{"version":3,"sources":["../../core/src/correlation-metadata.ts","../../core/src/safety/sensitive-key.ts","../../core/src/logs/redactor.ts","../../core/src/safety/credential-value-patterns.ts","../../core/src/redaction-profiles.ts","../../core/src/types.ts","../../core/src/types/inspect-event.ts","../../core/src/types/persisted-inspect-event.ts","../../core/src/persisted/to-trace-event.ts","../../../node_modules/.pnpm/nanoid@5.1.11/node_modules/nanoid/url-alphabet/index.js","../../../node_modules/.pnpm/nanoid@5.1.11/node_modules/nanoid/index.js","../../core/src/trace-filesystem.ts","../../core/src/utils/duration.ts","../../core/src/utils.ts","../../core/src/read-trace.ts","../../core/src/storage.ts","../../core/src/trace-event-safety.ts","../../core/src/context.ts","../../core/src/inspector-runtime.ts","../../core/src/outcomes/types.ts","../../core/src/outcomes/validate.ts","../../core/src/outcomes/extract.ts","../../core/src/outcomes/render.ts","../../core/src/outcomes/index.ts","../../core/src/inspector.ts","../../core/src/adapters/preview-capture.ts","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js","../../core/src/terminal.ts","../../core/src/trace-directory.ts","../../core/src/trace-metadata.ts","../../core/src/trace-filter.ts","../../core/src/stats.ts","../../core/src/timeline.ts","../../core/src/what.ts","../../core/src/causal-failure.ts","../../core/src/explain.ts","../../core/src/search.ts","../../core/src/sessions/metadata.ts","../../core/src/sessions/status.ts","../../core/src/sessions/activity.ts","../../core/src/sessions/types.ts","../../core/src/sessions/load.ts","../../core/src/sessions/scope.ts","../../core/src/sessions/cohort.ts","../../core/src/sessions/checks.ts","../../core/src/sessions/index.ts","../../core/src/trace-verification.ts","../../core/src/bundle/resolve.ts","../../core/src/bundle/safety-status.ts","../../core/src/bundle/manifest.ts","../../core/src/bundle/summary.ts","../../core/src/bundle/paths.ts","../../core/src/bundle/index.ts","../../core/src/evidence/types.ts","../../core/src/evidence/hash.ts","../../core/src/evidence/paths.ts","../../core/src/evidence/manifest.ts","../../core/src/diagnostics/programmatic.ts","../../core/src/checks/logical-events.ts","../../core/src/checks/derived-failure.ts","../../core/src/checks/relationship-facts.ts","../../core/src/checks/trace-facts.ts","../../core/src/checks/index.ts","../../core/src/checks/contract-scope.ts","../../core/src/checks/control-rules.ts","../../core/src/checks/canonical-equality.ts","../../core/src/checks/tool-arguments.ts","../../core/src/checks/retry-safety.ts","../../core/src/checks/recovery-operations.ts","../../core/src/checks/contract.ts","../../core/src/evidence/contract-binding.ts","../../core/src/exporters/helpers.ts","../../core/src/evidence/views.ts","../../core/src/evidence/html-shell.ts","../../core/src/diff/comparable.ts","../../core/src/diff/engine.ts","../../core/src/diff/renderer.ts","../../core/src/diff/index.ts","../../core/src/evidence/views-contract.ts","../../core/src/evidence/views-safety.ts","../../core/src/evidence/zip.ts","../../core/src/evidence/verify.ts","../../core/src/evidence/ci.ts","../../core/src/evidence/index.ts","../../core/src/suite/types.ts","../../core/src/suite/validate.ts","../../core/src/suite/load.ts","../../core/src/suite/resolve.ts","../../core/src/persisted/token-usage.ts","../../core/src/persisted/from-trace-event.ts","../../core/src/logs/tree-builder.ts","../../core/src/persisted/to-inspect-event.ts","../../core/src/persisted/tree-bridge.ts","../../core/src/readers/mapping-ledger.ts","../../core/src/readers/index.ts","../../core/src/suite/run.ts","../../core/src/suite/report.ts","../../core/src/suite/templates.ts","../../core/src/suite/index.ts","../../core/src/cohort/types.ts","../../core/src/cohort/compare.ts","../../core/src/cohort/grouping.ts","../../core/src/cohort/metrics.ts","../../core/src/cohort/analyze.ts","../../core/src/cohort/render.ts","../../core/src/cohort/index.ts","../../core/src/gate/parse.ts","../../core/src/gate/evaluate.ts","../../core/src/gate/run.ts","../../core/src/gate/render.ts","../../core/src/gate/index.ts","../../core/src/inspect-run.ts","../../core/src/maybe-inspect-run.ts","../../core/src/safety/omitted-payload.ts","../../core/src/entries/advanced.ts","../../index-sqlite/src/types.ts","../../index-sqlite/src/schema.ts","../../index-sqlite/src/load-sqlite.ts","../../index-sqlite/src/builder.ts","../../index-sqlite/src/query.ts","../../index-sqlite/src/index.ts","../../../package.json","../src/list.ts","../src/trace-dir-scale.ts","../src/clean.ts","../src/view.ts","../src/read-run.ts","../../core/src/entries/persisted.ts","../../core/src/persisted/from-inspect-event.ts","../../core/src/entries/readers.ts","../../core/src/logs/config.ts","../../core/src/logs/json-parser.ts","../../core/src/logs/log4js-parser.ts","../../core/src/logs/mapping.ts","../../core/src/entries/logs.ts","../../core/src/logs/normalizer.ts","../../core/src/logs/tree-renderer.ts","../../core/src/logs/index.ts","../../core/src/logs/line-parser.ts","../../core/src/logs/live-tree.ts","../src/logs.ts","../src/tail.ts","../src/export.ts","../../core/src/exporters/types.ts","../../core/src/exporters/redact-export.ts","../../core/src/safety/url-redaction.ts","../../core/src/exporters/html-exporter.ts","../../core/src/exporters/markdown-exporter.ts","../../core/src/exporters/openinference-exporter.ts","../../core/src/exporters/otlp-json-exporter.ts","../../core/src/exporters/validation.ts","../../core/src/exporters/index.ts","../../core/src/exporters/manual-trace-adapter.ts","../../core/src/report.ts","../../core/src/entries/exporters.ts","../src/cli-option-aliases.ts","../src/diff.ts","../../core/src/entries/diff.ts","../src/timeline.ts","../src/stats.ts","../src/search.ts","../src/sessions.ts","../src/sessions-load.ts","../src/what.ts","../src/report.ts","../src/redact.ts","../../redact/src/sensitive-key.ts","../../redact/src/key-value-secret.ts","../../redact/src/url-redaction.ts","../../redact/src/index.ts","../src/redaction-policy.ts","../../core/src/entries/checks.ts","../src/trace-input.ts","../src/safety.ts","../src/explain.ts","../src/open.ts","../src/migrate.ts","../src/check.ts","../src/evidence-on.ts","../../core/src/reporters/index.ts","../../circuit/src/analyze.ts","../../guardrails/src/rules.ts","../../guardrails/src/run.ts","../src/safety-extensions.ts","../../viewer/src/server.ts","../../viewer/src/html.ts","../../viewer/src/suite-data.ts","../../viewer/src/workspace-data.ts","../../core/src/workspace/types.ts","../../core/src/workspace/manifest.ts","../../core/src/workspace/fs.ts","../src/browser-open.ts","../src/serve.ts","../src/studio-cmd.ts","../../eval/src/index.ts","../src/eval.ts","../src/artifacts.ts","../src/bundle.ts","../src/bundle-verify.ts","../src/bundle-open.ts","../src/mcp-configure.ts","../src/ci-summary.ts","../src/init.ts","../src/doctor.ts","../../adapter-sdk/src/privacy.ts","../../adapter-sdk/src/manifest.ts","../../adapter-sdk/src/indexer.ts","../src/plugins.ts","../src/index-cmd.ts","../src/index-sqlite-cmd.ts","../src/workspace.ts","../src/suite.ts","../src/cohort.ts","../src/gate.ts","../src/index.ts"],"names":["crypto","asString","meta","isRecord","isNonEmptyString","legacyEvent","formatDuration","os","path","format","readFile","AsyncLocalStorage","init_types","process","version","tty","styles","chalk","open","durationMs","readdir","stat","parseIsoToMs","cached","toolSteps","input","pickCorrelation","observationStatus","toolName","attemptNumber","pass","fail","warn","retryCount","activityMs","createInterface","createReadStream","checks","createHash","init_paths","init_manifest","list","pickString","fact","emptySummary","buildFacts","scopedEvents","maxStringLength","init_checks","diagnostic","flattenNodes","run","runEvidence","eventEvidence","workflowFor","eventTime","sortByTime","attemptIdOf","hasDuplicateAttemptIds","sortKeysDeep","rm","packaged","access","init_validate","pathToFileURL","init_load","init_resolve","output","compactAttributes","percentile","init_render","init_cohort","hasThresholds","ok","init_run","require","createRequire","mkdir","existsSync","newestTraceMtimeMs","unlink","started","completed","last","status","durationLine","startedTs","startedLabel","redact","isFiniteNumber","safeString","parseRunIdKeys","summarizeWarnings","formatWarningLine","StringDecoder","renderTreeHtml","hexFrom","unixNano","stringAttr","mapStepStatus","tail","title","result","writeFile","parseLimit","isModuleNotFound","findSession","parseSinceCutoff","parseRedactionProfile","keyHasExplicitSeparator","normalizeSensitiveKey","NON_CREDENTIAL_TOKEN_CONFIG_KEYS","isTokenCredentialKey","isCredentialSensitiveKey","KEY_VALUE_SECRET_PATTERN","HTTP_URL","CONNECTION_PROTOCOLS","CONNECTION_URI","CONNECTION_USERINFO","CONNECTION_HAS_USERINFO","UUID_SEGMENT","HEX_SEGMENT","NUMERIC_SEGMENT","OPAQUE_SEGMENT","looksLikeHttpUrl","looksLikeConnectionUri","looksLikeUrlForRedaction","parseRedactableUrl","redactConnectionUserinfoFallback","isHttpProtocol","isIdentifierSegment","decodeParam","redactParams","redactUrlString","DEFAULT_REDACT_KEYS","SHARE_PROFILE_EXTRA_KEYS","STRICT_PROFILE_EXTRA_KEYS","toKey","stableHash","compileRules","Redactor","isMissingFileError","stats","stable","readStdin","selectRun","printMultipleRuns","writeJson","printSummary","stableJson","SEVERITY_RANK","toolArgs","ALL_RULES","runRule","promisify","execFile","CONFIG_EXTENSIONS","TS_CONFIG_EXTENSIONS","errorResult","asStringArray","env","exitCodeFor","printJson","printHuman","readErrorResult","constants","indexPath","createServer","spawn","parsePort","fileURLToPath","read","flatten","normalizeFinding","compareFindings","summarize","parseNumber","loadConfig","normalizeConfig","buildRules","escapeHtml","markdownTable","appendFile","BUNDLE_NOTE","base","selected","NOTE","REDACTION_PROFILES","renderMarkdown","readFileSync","isPlainObject","payload","PACKAGE","pathExists","lstat","normalizeMetrics","parseDuration","writeArtifacts","Command","Option","realpathSync"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { InspectRunOptions, TraceCorrelationMetadata } from \"./types.js\";\n\nexport const TRACE_CORRELATION_KEYS = [\n  \"correlationId\",\n  \"requestId\",\n  \"decisionId\",\n  \"groupId\",\n] as const satisfies readonly (keyof TraceCorrelationMetadata)[];\n\nfunction isNonEmptyString(value: unknown): value is string {\n  return typeof value === \"string\" && value.length > 0;\n}\n\n/** Extracts known correlation keys from a metadata record. */\nexport function extractCorrelationMetadata(\n  record: Record<string, unknown> | undefined,\n): TraceCorrelationMetadata | undefined {\n  if (!record) {\n    return undefined;\n  }\n\n  const out: TraceCorrelationMetadata = {};\n  let found = false;\n\n  for (const key of TRACE_CORRELATION_KEYS) {\n    const value = record[key];\n    if (isNonEmptyString(value)) {\n      out[key] = value;\n      found = true;\n    }\n  }\n\n  return found ? out : undefined;\n}\n\n/**\n * Builds `run_started` metadata from optional run metadata and top-level correlation fields.\n * Top-level correlation options override the same keys in `options.metadata`.\n */\nexport function buildRunStartedMetadata(\n  options?: Pick<\n    InspectRunOptions,\n    | \"metadata\"\n    | \"correlationId\"\n    | \"requestId\"\n    | \"decisionId\"\n    | \"groupId\"\n  >,\n): Record<string, unknown> | undefined {\n  if (!options) {\n    return undefined;\n  }\n\n  const merged: Record<string, unknown> =\n    options.metadata !== undefined ? { ...options.metadata } : {};\n\n  if (isNonEmptyString(options.correlationId)) {\n    merged.correlationId = options.correlationId;\n  }\n  if (isNonEmptyString(options.requestId)) {\n    merged.requestId = options.requestId;\n  }\n  if (isNonEmptyString(options.decisionId)) {\n    merged.decisionId = options.decisionId;\n  }\n  if (isNonEmptyString(options.groupId)) {\n    merged.groupId = options.groupId;\n  }\n\n  return Object.keys(merged).length > 0 ? merged : undefined;\n}\n","/**\n * Contextual sensitive-key classification for safety checks and redaction.\n *\n * Avoids treating model token-configuration fields (ls_max_tokens, max_tokens,\n * token_count, …) as credentials solely because they contain the substring\n * \"token\". Value-based secret detectors remain separate.\n *\n * @experimental Shared classifier used by checks (6.14.2+); parity across\n * surfaces lands in the same patch train.\n */\n\n/** True when the original key already uses an explicit separator. */\nfunction keyHasExplicitSeparator(value: string): boolean {\n  return /[_\\-.]/.test(value);\n}\n\n/**\n * Canonicalize field names so camelCase / kebab / dot / snake forms share a\n * snake_case shape the compound matcher can recognize (`userPassword` →\n * `user_password`).\n */\nexport function normalizeSensitiveKey(value: string): string {\n  return value\n    .replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, \"_\")\n    .replace(/^_+|_+$/g, \"\");\n}\n\n/** Model / usage configuration keys that are not credentials by key alone. */\nexport const NON_CREDENTIAL_TOKEN_CONFIG_KEYS: ReadonlySet<string> = new Set(\n  [\n    \"tokens\",\n    \"max_tokens\",\n    \"min_tokens\",\n    \"ls_max_tokens\",\n    \"token_count\",\n    \"token_limit\",\n    \"token_budget\",\n    \"input_tokens\",\n    \"output_tokens\",\n    \"total_tokens\",\n    \"cached_tokens\",\n    \"prompt_tokens\",\n    \"completion_tokens\",\n  ].map(normalizeSensitiveKey),\n);\n\nexport const DEFAULT_CREDENTIAL_SENSITIVE_KEYS = [\n  \"authorization\",\n  \"cookie\",\n  \"token\",\n  \"access_token\",\n  \"accesstoken\",\n  \"auth_token\",\n  \"authtoken\",\n  \"refresh_token\",\n  \"refreshtoken\",\n  \"id_token\",\n  \"idtoken\",\n  \"bearer_token\",\n  \"bearertoken\",\n  \"api_token\",\n  \"apitoken\",\n  \"apikey\",\n  \"api_key\",\n  \"password\",\n  \"secret\",\n  \"email\",\n] as const;\n\nfunction isTokenCredentialKey(normalized: string): boolean {\n  if (NON_CREDENTIAL_TOKEN_CONFIG_KEYS.has(normalized)) return false;\n  if (normalized === \"token\") return true;\n  // access_token / refreshToken → *token, but not *tokens (max_tokens → max_tokens)\n  if (normalized.endsWith(\"tokens\")) return false;\n  return normalized.endsWith(\"token\");\n}\n\n/**\n * True when the field name looks credential-sensitive under the shared policy.\n *\n * Suffix compounds (`user_password`, `userPassword`) always match. Prefix\n * compounds (`email_note`) match only when the original key already contained\n * an explicit separator, so camelCase topic fields like `emailNote` stay for\n * value detectors instead of key redaction.\n */\nexport function isCredentialSensitiveKey(\n  key: string | undefined,\n  sensitiveKeys: readonly string[] = DEFAULT_CREDENTIAL_SENSITIVE_KEYS,\n): boolean {\n  if (!key) return false;\n  const normalized = normalizeSensitiveKey(key);\n  if (!normalized) return false;\n  if (NON_CREDENTIAL_TOKEN_CONFIG_KEYS.has(normalized)) return false;\n\n  const allowPrefixCompound = keyHasExplicitSeparator(key);\n\n  for (const sensitive of sensitiveKeys) {\n    const s = normalizeSensitiveKey(sensitive);\n    if (!s) continue;\n    if (s === \"token\") {\n      if (isTokenCredentialKey(normalized)) return true;\n      continue;\n    }\n    if (normalized === s) return true;\n    // Compound keys with explicit separators, plus camelCase owner+secret suffixes.\n    if (normalized.endsWith(`_${s}`)) return true;\n    if (allowPrefixCompound && normalized.startsWith(`${s}_`)) return true;\n  }\n  return false;\n}\n","import crypto from \"node:crypto\";\n\nimport { isCredentialSensitiveKey } from \"../safety/sensitive-key.js\";\n\nimport type { RedactionRule } from \"../types/log-config.js\";\n\nexport const DEFAULT_REDACT_KEYS = [\n  \"authorization\",\n  \"cookie\",\n  \"token\",\n  \"apiKey\",\n  \"password\",\n  \"secret\",\n  \"email\",\n] as const;\n\nexport interface RedactorOptions {\n  rules?: RedactionRule[];\n  /** Additional exact keys (case-insensitive) to redact in addition to defaults. */\n  extraKeys?: readonly string[];\n}\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n  return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction toKey(s: string): string {\n  return s.toLowerCase();\n}\n\nfunction stableHash(value: string): string {\n  const h = crypto.createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n  return h.slice(0, 8);\n}\n\ntype CompiledRule = (\n  | { key: string; strategy: \"full\" }\n  | { key: string; strategy: \"prefix\"; keep: number }\n  | { key: string; strategy: \"hash\" }\n) & { raw?: string };\n\nfunction compileRules(\n  rules?: RedactionRule[],\n  extraKeys?: readonly string[],\n): CompiledRule[] {\n  const out = new Map<string, CompiledRule>();\n\n  const set = (r: CompiledRule) => {\n    const k = toKey(r.key);\n    out.set(k, { ...r, key: k, raw: r.raw ?? r.key } as CompiledRule);\n  };\n\n  for (const k of DEFAULT_REDACT_KEYS) {\n    set({ key: k, strategy: \"full\" });\n  }\n\n  for (const k of extraKeys ?? []) {\n    if (typeof k === \"string\" && k.length > 0) {\n      set({ key: k, strategy: \"full\" });\n    }\n  }\n\n  for (const r of rules ?? []) {\n    if (typeof r === \"string\") {\n      set({ key: r, strategy: \"full\" });\n      continue;\n    }\n    const key = r.key;\n    if (r.strategy === \"full\") set({ key, strategy: \"full\" });\n    if (r.strategy === \"hash\") set({ key, strategy: \"hash\" });\n    if (r.strategy === \"prefix\") {\n      set({ key, strategy: \"prefix\", keep: typeof r.keep === \"number\" ? r.keep : 8 });\n    }\n  }\n\n  return [...out.values()];\n}\n\nexport class Redactor {\n  readonly #rules: CompiledRule[];\n\n  constructor(options?: RedactorOptions) {\n    this.#rules = compileRules(options?.rules, options?.extraKeys);\n  }\n\n  /** Field names this redactor treats as sensitive, for value-level helpers. */\n  get sensitiveKeys(): readonly string[] {\n    return this.#rules.map((rule) => rule.raw ?? rule.key);\n  }\n\n  redactValue(key: string, value: unknown): unknown {\n    const k = toKey(key);\n    const rule =\n      this.#rules.find((r) => r.key === k) ??\n      this.#rules.find((r) => isCredentialSensitiveKey(key, [r.raw ?? r.key]));\n    if (!rule) {\n      return this.#redactNested(value);\n    }\n\n    if (rule.strategy === \"full\") return \"[REDACTED]\";\n    const asString =\n      typeof value === \"string\"\n        ? value\n        : typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\"\n          ? String(value)\n          : undefined;\n\n    if (rule.strategy === \"prefix\") {\n      if (asString === undefined) return \"[REDACTED]\";\n      const keep = Math.max(0, Math.floor(rule.keep));\n      return asString.length <= keep ? `${asString}…` : `${asString.slice(0, keep)}…`;\n    }\n\n    if (rule.strategy === \"hash\") {\n      if (asString === undefined) return \"[HASH:unknown]\";\n      return `[HASH:${stableHash(asString)}]`;\n    }\n\n    return this.#redactNested(value);\n  }\n\n  redactRecord(record: Record<string, unknown>): Record<string, unknown> {\n    const out: Record<string, unknown> = {};\n    for (const [k, v] of Object.entries(record)) {\n      out[k] = this.redactValue(k, v);\n    }\n    return out;\n  }\n\n  #redactNested(value: unknown): unknown {\n    if (Array.isArray(value)) {\n      return value.map((v) => this.#redactNested(v));\n    }\n    if (isRecord(value)) {\n      const out: Record<string, unknown> = {};\n      for (const [k, v] of Object.entries(value)) {\n        out[k] = this.redactValue(k, v);\n      }\n      return out;\n    }\n    return value;\n  }\n}\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 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","import type { RedactionRule } from \"./types/log-config.js\";\n\n/**\n * Discriminator for what kind of work a {@link Step} represents.\n * `\"decision\"` captures agent branching/choices; other values cover runs, LLM calls, tools, and user-defined steps.\n */\nexport type StepType =\n  | \"run\"\n  | \"llm\"\n  | \"tool\"\n  | \"decision\"\n  | \"logic\"\n  | \"state\"\n  | \"custom\";\n\n/** Lifecycle state of a single {@link Step}. */\nexport type StepStatus = \"running\" | \"success\" | \"error\";\n\n/** Lifecycle state of an entire {@link Run}. */\nexport type RunStatus = \"running\" | \"success\" | \"error\";\n\n/** Structured error attached to a run or step when status is `\"error\"`. */\nexport interface ErrorInfo {\n  message: string;\n  stack?: string;\n}\n\n/**\n * Optional token counts for a step (e.g. LLM usage).\n * Reserved for future roadmap; MVP does not compute or persist token usage.\n */\nexport interface TokenMetadata {\n  input?: number;\n  output?: number;\n  total?: number;\n  /** Cache-read tokens (informational; never added to total). */\n  cached?: number;\n  /** Cache-write / cache-creation tokens (informational). */\n  cacheWrite?: number;\n  /** Reasoning / thinking tokens when reported separately. */\n  reasoning?: number;\n}\n\n/** Arbitrary structured fields for a step; safe extensions use string keys. */\nexport interface StepMetadata {\n  model?: string;\n  toolName?: string;\n  tokens?: TokenMetadata;\n  retryCount?: number;\n  [key: string]: unknown;\n}\n\n/**\n * One traced agent run (root of an execution tree).\n * MVP intentionally omits `input` / `output` on the run to limit PII, secrets, and serialization risk.\n */\nexport interface Run {\n  id: string;\n  name: string;\n  status: RunStatus;\n  startTime: number;\n  endTime?: number;\n  durationMs?: number;\n  error?: ErrorInfo;\n  metadata?: Record<string, unknown>;\n}\n\n/**\n * One node in the execution tree under a {@link Run}.\n * MVP intentionally omits `input` / `output`; capture/redaction may come in a later version.\n */\nexport interface Step {\n  id: string;\n  runId: string;\n  parentId?: string;\n  name: string;\n  type: StepType;\n  status: StepStatus;\n  startTime: number;\n  endTime?: number;\n  durationMs?: number;\n  error?: ErrorInfo;\n  metadata?: StepMetadata;\n}\n\n/** Version of the JSONL trace line schema consumed by AgentInspect tooling. */\nexport type TraceSchemaVersion = \"0.1\";\n\n/**\n * Status for lightweight trace metadata extraction.\n * `\"unknown\"` means the file contained valid events but a run status could not be determined safely.\n */\nexport type TraceMetadataStatus = \"success\" | \"error\" | \"running\" | \"unknown\";\n\nexport interface TraceMetadata {\n  runId: string;\n  name?: string;\n  status: TraceMetadataStatus;\n  startedAt?: number;\n  endedAt?: number;\n  durationMs?: number;\n  eventCount: number;\n  filePath: string;\n  fileSize: number;\n  createdAt: Date;\n}\n\nexport interface RunSummary {\n  runId: string;\n  name?: string;\n  status: TraceMetadataStatus;\n  durationMs?: number;\n  totalSteps: number;\n  llmSteps: number;\n  toolSteps: number;\n  logicSteps: number;\n  errorSteps: number;\n  maxDepth: number;\n  longestStep?: {\n    name: string;\n    durationMs: number;\n    type: string;\n  };\n  totalTokens?: {\n    input: number;\n    output: number;\n    /** Present only when every token-bearing step has a supplied or derivable total. */\n    total?: number;\n    /** Sum of supplied cached counts; cached is not added to total. */\n    cached?: number;\n    /** Sum of cache-write / cache-creation counts; not added to total. */\n    cacheWrite?: number;\n    /** Sum of reasoning token counts; not added to total. */\n    reasoning?: number;\n  };\n}\n\n/** Fields shared by every persisted trace event line. */\nexport interface TraceEventBase {\n  schemaVersion: TraceSchemaVersion;\n  event: string;\n  timestamp: number;\n}\n\n/** Emitted when a run begins. */\nexport interface RunStartedEvent extends TraceEventBase {\n  event: \"run_started\";\n  runId: string;\n  name: string;\n  startTime: number;\n  metadata?: Record<string, unknown>;\n}\n\n/** Emitted when a run finishes successfully or with an error. */\nexport interface RunCompletedEvent extends TraceEventBase {\n  event: \"run_completed\";\n  runId: string;\n  status: \"success\" | \"error\";\n  endTime: number;\n  durationMs: number;\n  error?: ErrorInfo;\n}\n\n/** Emitted when a step begins (including nested steps under `parentId`). */\nexport interface StepStartedEvent extends TraceEventBase {\n  event: \"step_started\";\n  runId: string;\n  stepId: string;\n  parentId?: string;\n  name: string;\n  type: StepType;\n  startTime: number;\n  metadata?: StepMetadata;\n}\n\n/**\n * Emitted when a step finishes (success or failure).\n * Failures use `status: \"error\"` and optional {@link ErrorInfo}; there is no separate `step_failed` event in MVP.\n */\nexport interface StepCompletedEvent extends TraceEventBase {\n  event: \"step_completed\";\n  runId: string;\n  stepId: string;\n  status: \"success\" | \"error\";\n  endTime: number;\n  durationMs: number;\n  error?: ErrorInfo;\n}\n\n/** Emitted when an external-world outcome is observed (v4.4+). */\nexport interface OutcomeObservedEvent extends TraceEventBase {\n  event: \"outcome_observed\";\n  runId: string;\n  outcomeId: string;\n  parentId?: string;\n  name: string;\n  expectation: string;\n  status: \"passed\" | \"failed\" | \"unknown\" | \"skipped\";\n  method?:\n    | \"dom\"\n    | \"accessibility\"\n    | \"snapshot\"\n    | \"network\"\n    | \"storage\"\n    | \"filesystem\"\n    | \"database\"\n    | \"queue\"\n    | \"custom\";\n  actual?: unknown;\n  evidence?: unknown;\n  observedAt: number;\n}\n\n/** Discriminated union of all MVP trace events written as JSONL lines. */\nexport type TraceEvent =\n  | RunStartedEvent\n  | RunCompletedEvent\n  | StepStartedEvent\n  | StepCompletedEvent\n  | OutcomeObservedEvent;\n\n/** Named redaction presets for trace writing and share-safe exports (v1.3.0+). */\nexport type RedactionProfile = \"local\" | \"share\" | \"strict\";\n\n/** Optional correlation fields for grouping and cross-run tracing (v1.3.0+). */\nexport interface TraceCorrelationMetadata {\n  correlationId?: string;\n  requestId?: string;\n  decisionId?: string;\n  groupId?: string;\n}\n\n/** Options for `inspectRun()` and `maybeInspectRun()`. */\nexport interface InspectRunOptions extends TraceCorrelationMetadata {\n  traceDir?: string;\n  silent?: boolean;\n  metadata?: Record<string, unknown>;\n  /**\n   * When `false`, runs `fn` with no trace file, no execution context, and no terminal output.\n   * Omitted or `true` preserves default tracing behavior.\n   */\n  enabled?: boolean;\n  /**\n   * Redact sensitive metadata keys before writing JSONL. Default `true` (conservative keys).\n   * Pass `false` to persist metadata as-is (explicit opt-out).\n   */\n  redact?: boolean | { rules?: RedactionRule[] };\n  /**\n   * Redaction preset for trace metadata. Default `local` (same keys as default redaction).\n   * `share` and `strict` add extra key-based redaction and tighter string bounds.\n   * Ignored when `redact: false`.\n   */\n  redactionProfile?: RedactionProfile;\n  /** Max UTF-8 bytes for a serialized trace event line. Default 65536. */\n  maxEventBytes?: number;\n  /** Max length for string metadata values (non-preview keys). Default 2000. */\n  maxMetadataValueLength?: number;\n  /** Max length for preview-like metadata keys (contains `preview`). Default 500. */\n  maxPreviewLength?: number;\n}\n\n/** Options passed when opening a logical step (implemented in a later step). */\nexport interface StepOptions {\n  type?: StepType;\n  metadata?: StepMetadata;\n}\n\n/** Options for `observe()` — same surface as {@link InspectRunOptions} in MVP. */\nexport type ObserveOptions = InspectRunOptions;\n\n/**\n * Resolved settings for the active run while tracing is enabled.\n * Populated by runtime code in a later step; defined here for `context.ts`.\n */\nexport interface ExecutionContext {\n  runId: string;\n  runName: string;\n  traceDir: string;\n  silent: boolean;\n  metadata?: Record<string, unknown>;\n}\n\n/** Stack position of the step currently executing (used by future context tracking). */\nexport interface ActiveStepContext {\n  stepId: string;\n  parentId?: string;\n  depth: number;\n}\n\nconst STEP_TYPES: readonly StepType[] = [\n  \"run\",\n  \"llm\",\n  \"tool\",\n  \"decision\",\n  \"logic\",\n  \"state\",\n  \"custom\",\n] as const;\n\nconst STEP_STATUSES: readonly StepStatus[] = [\n  \"running\",\n  \"success\",\n  \"error\",\n] as const;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** Returns true if `value` is one of the MVP {@link StepType} literals. */\nexport function isStepType(value: unknown): value is StepType {\n  return (\n    typeof value === \"string\" &&\n    (STEP_TYPES as readonly string[]).includes(value)\n  );\n}\n\n/** Returns true if `value` is one of the MVP {@link StepStatus} literals. */\nexport function isStepStatus(value: unknown): value is StepStatus {\n  return (\n    typeof value === \"string\" &&\n    (STEP_STATUSES as readonly string[]).includes(value)\n  );\n}\n\n/**\n * Narrowing guard for a {@link TraceEvent} object with required MVP fields.\n * Does not deeply validate optional `metadata` shapes.\n */\nexport function isTraceEvent(value: unknown): value is TraceEvent {\n  if (!isRecord(value)) return false;\n  if (value.schemaVersion !== \"0.1\") return false;\n  if (typeof value.timestamp !== \"number\") return false;\n  if (typeof value.event !== \"string\") return false;\n\n  switch (value.event) {\n    case \"run_started\": {\n      return (\n        typeof value.runId === \"string\" &&\n        typeof value.name === \"string\" &&\n        typeof value.startTime === \"number\"\n      );\n    }\n    case \"run_completed\": {\n      return (\n        typeof value.runId === \"string\" &&\n        (value.status === \"success\" || value.status === \"error\") &&\n        typeof value.endTime === \"number\" &&\n        typeof value.durationMs === \"number\"\n      );\n    }\n    case \"step_started\": {\n      return (\n        typeof value.runId === \"string\" &&\n        typeof value.stepId === \"string\" &&\n        typeof value.name === \"string\" &&\n        isStepType(value.type) &&\n        typeof value.startTime === \"number\"\n      );\n    }\n    case \"step_completed\": {\n      return (\n        typeof value.runId === \"string\" &&\n        typeof value.stepId === \"string\" &&\n        (value.status === \"success\" || value.status === \"error\") &&\n        typeof value.endTime === \"number\" &&\n        typeof value.durationMs === \"number\"\n      );\n    }\n    case \"outcome_observed\": {\n      return (\n        typeof value.runId === \"string\" &&\n        typeof value.outcomeId === \"string\" &&\n        typeof value.name === \"string\" &&\n        typeof value.expectation === \"string\" &&\n        (value.status === \"passed\" ||\n          value.status === \"failed\" ||\n          value.status === \"unknown\" ||\n          value.status === \"skipped\") &&\n        typeof value.observedAt === \"number\"\n      );\n    }\n    default:\n      return false;\n  }\n}\n","export type AttributionConfidence =\n  | \"explicit\"\n  | \"correlated\"\n  | \"heuristic\"\n  | \"unknown\";\n\n/** Canonical attribution-confidence literals (weakest → strongest order is rank-based). */\nexport const ATTRIBUTION_CONFIDENCES: readonly AttributionConfidence[] = [\n  \"unknown\",\n  \"heuristic\",\n  \"correlated\",\n  \"explicit\",\n] as const;\n\nexport function isAttributionConfidence(value: unknown): value is AttributionConfidence {\n  return (\n    typeof value === \"string\" &&\n    (ATTRIBUTION_CONFIDENCES as readonly string[]).includes(value)\n  );\n}\n\n/** Rank for threshold comparisons; unknown is weakest (0). */\nexport const ATTRIBUTION_CONFIDENCE_RANK: Record<AttributionConfidence, number> = {\n  unknown: 0,\n  heuristic: 1,\n  correlated: 2,\n  explicit: 3,\n};\n\nexport type InspectKind =\n  | \"RUN\"\n  | \"AGENT\"\n  | \"LLM\"\n  | \"TOOL\"\n  | \"CHAIN\"\n  | \"RETRIEVER\"\n  | \"DECISION\"\n  | \"RESULT\"\n  | \"ERROR\"\n  | \"LOGIC\"\n  | \"LOG\"\n  | \"OUTCOME\";\n\nexport interface EventSource {\n  type: \"manual\" | \"json-log\" | \"log4js\" | \"pino\" | \"winston\" | \"adapter\";\n  file?: string;\n  line?: number;\n}\n\nexport interface InspectEvent {\n  eventId: string;\n  runId: string;\n  parentId?: string;\n  name: string;\n  kind: InspectKind;\n  timestamp: number;\n  status?: \"running\" | \"ok\" | \"error\";\n  durationMs?: number;\n  attributes?: Record<string, unknown>;\n  confidence: AttributionConfidence;\n  source: EventSource;\n}\n\nexport interface InspectNode {\n  event: InspectEvent;\n  children: InspectNode[];\n  depth: number;\n}\n\n/** Bounded parent/cycle summary for visibility-first tree building (6.14.2+). */\nexport interface RelationshipSummary {\n  rootCount: number;\n  selfParentCount: number;\n  cycleCount: number;\n  unresolvedParentCount: number;\n  normalizedEdgeCount: number;\n}\n\nexport interface InspectRunTree {\n  runId: string;\n  name?: string;\n  status?: \"running\" | \"ok\" | \"error\";\n  startedAt?: number;\n  endedAt?: number;\n  durationMs?: number;\n  children: InspectNode[];\n  metadata: {\n    totalEvents: number;\n    confidenceBreakdown: Record<AttributionConfidence, number>;\n    kinds: Record<InspectKind, number>;\n    relationshipSummary?: RelationshipSummary;\n  };\n}\n\n","import type { AttributionConfidence, InspectKind } from \"./inspect-event.js\";\nimport { isAttributionConfidence } from \"./inspect-event.js\";\n\nexport type PersistedSchemaVersion = \"0.2\" | \"1.0\";\n\nexport type PersistedEventSourceType =\n  | \"manual\"\n  | \"json-log\"\n  | \"log4js\"\n  | \"adapter\"\n  | \"ai-sdk\"\n  | \"otel\";\n\nexport interface PersistedEventSource {\n  type: PersistedEventSourceType;\n  name?: string;\n  version?: string;\n}\n\nexport type PersistedEventStatus = \"running\" | \"ok\" | \"error\" | \"unknown\";\n\nexport interface PersistedInspectError {\n  name?: string;\n  message: string;\n  code?: string;\n}\n\nexport interface PersistedTokenUsage {\n  input?: number;\n  output?: number;\n  total?: number;\n  /** Cache-read tokens (informational; never added to total). */\n  cached?: number;\n  /** Cache-write / cache-creation tokens (informational; never added to total). */\n  cacheWrite?: number;\n  /** Reasoning / thinking tokens when providers report them separately. */\n  reasoning?: number;\n}\n\nexport interface PersistedTraceContext {\n  traceId?: string;\n  spanId?: string;\n  parentSpanId?: string;\n}\n\nexport interface PersistedInspectEventBase {\n  eventId: string;\n  runId: string;\n  parentId?: string;\n  kind: InspectKind;\n  name: string;\n  status?: PersistedEventStatus;\n  timestamp: string;\n  startedAt?: string;\n  endedAt?: string;\n  durationMs?: number;\n  confidence: AttributionConfidence;\n  source: PersistedEventSource;\n  attributes?: Record<string, unknown>;\n  inputSummary?: unknown;\n  outputSummary?: unknown;\n  error?: PersistedInspectError;\n  tokenUsage?: PersistedTokenUsage;\n  trace?: PersistedTraceContext;\n}\n\nexport interface PersistedInspectEventV02 extends PersistedInspectEventBase {\n  schemaVersion: \"0.2\";\n}\n\nexport interface PersistedInspectEventV10 extends PersistedInspectEventBase {\n  schemaVersion: \"1.0\";\n  [key: string]: unknown;\n}\n\nexport type PersistedInspectEvent =\n  | PersistedInspectEventV02\n  | PersistedInspectEventV10;\n\nconst INSPECT_KINDS: readonly InspectKind[] = [\n  \"RUN\",\n  \"AGENT\",\n  \"LLM\",\n  \"TOOL\",\n  \"CHAIN\",\n  \"RETRIEVER\",\n  \"DECISION\",\n  \"RESULT\",\n  \"ERROR\",\n  \"LOGIC\",\n  \"LOG\",\n  \"OUTCOME\",\n];\n\nconst PERSISTED_EVENT_SOURCE_TYPES: readonly PersistedEventSourceType[] = [\n  \"manual\",\n  \"json-log\",\n  \"log4js\",\n  \"adapter\",\n  \"ai-sdk\",\n  \"otel\",\n];\n\nconst PERSISTED_EVENT_STATUSES: readonly PersistedEventStatus[] = [\n  \"running\",\n  \"ok\",\n  \"error\",\n  \"unknown\",\n];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isString(value: unknown): value is string {\n  return typeof value === \"string\";\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n  return typeof value === \"string\" && value.length > 0;\n}\n\nfunction isOptionalString(value: unknown): boolean {\n  return value === undefined || isString(value);\n}\n\nfunction isNonNegativeNumber(value: unknown): value is number {\n  return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nfunction isOptionalNonNegativeNumber(value: unknown): boolean {\n  return value === undefined || isNonNegativeNumber(value);\n}\n\nfunction isInspectKind(value: unknown): value is InspectKind {\n  return (\n    typeof value === \"string\" &&\n    (INSPECT_KINDS as readonly string[]).includes(value)\n  );\n}\n\nfunction isPersistedEventSourceType(\n  value: unknown,\n): value is PersistedEventSourceType {\n  return (\n    typeof value === \"string\" &&\n    (PERSISTED_EVENT_SOURCE_TYPES as readonly string[]).includes(value)\n  );\n}\n\nfunction isPersistedEventStatus(value: unknown): value is PersistedEventStatus {\n  return (\n    typeof value === \"string\" &&\n    (PERSISTED_EVENT_STATUSES as readonly string[]).includes(value)\n  );\n}\n\nfunction isPersistedEventSource(value: unknown): value is PersistedEventSource {\n  if (!isRecord(value)) return false;\n  if (!isPersistedEventSourceType(value.type)) return false;\n  if (!isOptionalString(value.name)) return false;\n  if (!isOptionalString(value.version)) return false;\n  return true;\n}\n\nfunction isPersistedInspectError(value: unknown): value is PersistedInspectError {\n  if (!isRecord(value)) return false;\n  if (!isNonEmptyString(value.message)) return false;\n  if (!isOptionalString(value.name)) return false;\n  if (!isOptionalString(value.code)) return false;\n  return true;\n}\n\nfunction isPersistedTokenUsage(value: unknown): value is PersistedTokenUsage {\n  if (!isRecord(value)) return false;\n  if (!isOptionalNonNegativeNumber(value.input)) return false;\n  if (!isOptionalNonNegativeNumber(value.output)) return false;\n  if (!isOptionalNonNegativeNumber(value.total)) return false;\n  if (!isOptionalNonNegativeNumber(value.cached)) return false;\n  if (!isOptionalNonNegativeNumber(value.cacheWrite)) return false;\n  if (!isOptionalNonNegativeNumber(value.reasoning)) return false;\n  return true;\n}\n\nfunction isPersistedTraceContext(value: unknown): value is PersistedTraceContext {\n  if (!isRecord(value)) return false;\n  if (!isOptionalString(value.traceId)) return false;\n  if (!isOptionalString(value.spanId)) return false;\n  if (!isOptionalString(value.parentSpanId)) return false;\n  return true;\n}\n\n/**\n * Runtime guard for a v0.2 or v1.0 {@link PersistedInspectEvent} JSON object.\n *\n * Timestamp fields (`timestamp`, `startedAt`, `endedAt`) are validated as\n * non-empty strings only — stricter ISO-8601 parsing may be added later.\n */\nexport function isPersistedInspectEvent(\n  value: unknown,\n): value is PersistedInspectEvent {\n  if (!isRecord(value)) return false;\n  if (value.schemaVersion !== \"0.2\" && value.schemaVersion !== \"1.0\") {\n    return false;\n  }\n\n  if (!isNonEmptyString(value.eventId)) return false;\n  if (!isNonEmptyString(value.runId)) return false;\n  if (!isInspectKind(value.kind)) return false;\n  if (!isNonEmptyString(value.name)) return false;\n  // Non-empty string required; ISO format not validated in this PR.\n  if (!isNonEmptyString(value.timestamp)) return false;\n  if (!isAttributionConfidence(value.confidence)) return false;\n  if (!isPersistedEventSource(value.source)) return false;\n\n  if (value.parentId !== undefined && !isNonEmptyString(value.parentId)) {\n    return false;\n  }\n  if (value.status !== undefined && !isPersistedEventStatus(value.status)) {\n    return false;\n  }\n  if (!isOptionalString(value.startedAt)) return false;\n  if (!isOptionalString(value.endedAt)) return false;\n  if (value.durationMs !== undefined && !isNonNegativeNumber(value.durationMs)) {\n    return false;\n  }\n  if (value.attributes !== undefined && !isRecord(value.attributes)) {\n    return false;\n  }\n  if (value.error !== undefined && !isPersistedInspectError(value.error)) {\n    return false;\n  }\n  if (value.tokenUsage !== undefined && !isPersistedTokenUsage(value.tokenUsage)) {\n    return false;\n  }\n  if (value.trace !== undefined && !isPersistedTraceContext(value.trace)) {\n    return false;\n  }\n\n  return true;\n}\n\nexport function isPersistedInspectEventV02(\n  value: unknown,\n): value is PersistedInspectEventV02 {\n  return isPersistedInspectEvent(value) && value.schemaVersion === \"0.2\";\n}\n\nexport function isPersistedInspectEventV10(\n  value: unknown,\n): value is PersistedInspectEventV10 {\n  return isPersistedInspectEvent(value) && value.schemaVersion === \"1.0\";\n}\n","import type { InspectKind } from \"../types/inspect-event.js\";\nimport type {\n  ErrorInfo,\n  RunStatus,\n  StepMetadata,\n  StepStatus,\n  StepType,\n  TraceEvent,\n} from \"../types.js\";\nimport {\n  isPersistedInspectEvent,\n  type PersistedInspectEvent,\n  type PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\n\nexport interface PersistedToTraceEventOptions {\n  /**\n   * Stable index within the source event list.\n   * Used for deterministic timestamps when only one instant is known.\n   */\n  eventIndex?: number;\n}\n\nfunction parseIsoToMs(iso: string): number {\n  const parsed = Date.parse(iso);\n  return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction mapInspectKindToStepType(kind: InspectKind): StepType {\n  switch (kind) {\n    case \"LLM\":\n      return \"llm\";\n    case \"TOOL\":\n      return \"tool\";\n    case \"DECISION\":\n      return \"decision\";\n    case \"RUN\":\n      return \"run\";\n    default:\n      return \"logic\";\n  }\n}\n\nfunction mapPersistedStatusToStepStatus(\n  status: PersistedInspectEvent[\"status\"],\n): StepStatus | undefined {\n  switch (status) {\n    case \"ok\":\n      return \"success\";\n    case \"error\":\n      return \"error\";\n    case \"running\":\n      return \"running\";\n    default:\n      return undefined;\n  }\n}\n\nfunction mapPersistedStatusToRunStatus(\n  status: PersistedInspectEvent[\"status\"],\n): RunStatus | undefined {\n  switch (status) {\n    case \"ok\":\n      return \"success\";\n    case \"error\":\n      return \"error\";\n    case \"running\":\n      return \"running\";\n    default:\n      return undefined;\n  }\n}\n\nfunction mapPersistedError(\n  error: PersistedInspectEvent[\"error\"],\n  attributes: Record<string, unknown> | undefined,\n): ErrorInfo | undefined {\n  if (!error?.message) return undefined;\n  const out: ErrorInfo = { message: error.message };\n  const stack =\n    typeof attributes?.errorStack === \"string\" &&\n    attributes.errorStack.length > 0\n      ? attributes.errorStack\n      : undefined;\n  if (stack) {\n    out.stack = stack;\n  }\n  return out;\n}\n\nfunction mapTokenUsageToMetadata(\n  tokenUsage: PersistedTokenUsage | undefined,\n  attributes: Record<string, unknown> | undefined,\n): StepMetadata | undefined {\n  const metadata: StepMetadata = {};\n  if (attributes?.metadata && typeof attributes.metadata === \"object\") {\n    Object.assign(metadata, attributes.metadata as Record<string, unknown>);\n  }\n  if (tokenUsage) {\n    metadata.tokens = {\n      ...(tokenUsage.input !== undefined ? { input: tokenUsage.input } : {}),\n      ...(tokenUsage.output !== undefined ? { output: tokenUsage.output } : {}),\n      ...(tokenUsage.total !== undefined ? { total: tokenUsage.total } : {}),\n      ...(tokenUsage.cached !== undefined ? { cached: tokenUsage.cached } : {}),\n      ...(tokenUsage.cacheWrite !== undefined\n        ? { cacheWrite: tokenUsage.cacheWrite }\n        : {}),\n      ...(tokenUsage.reasoning !== undefined\n        ? { reasoning: tokenUsage.reasoning }\n        : {}),\n    };\n  }\n  return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction pickRunMetadata(\n  attributes: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n  if (!attributes) return undefined;\n  const metadata =\n    attributes.metadata && typeof attributes.metadata === \"object\"\n      ? { ...(attributes.metadata as Record<string, unknown>) }\n      : {};\n  for (const key of [\n    \"correlationId\",\n    \"requestId\",\n    \"decisionId\",\n    \"groupId\",\n  ] as const) {\n    const value = attributes[key];\n    if (typeof value === \"string\" && value.trim() !== \"\") {\n      metadata[key] = value;\n    }\n  }\n  return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction resolveStepId(event: PersistedInspectEvent): string {\n  const attrs = event.attributes;\n  if (attrs && typeof attrs.stepId === \"string\" && attrs.stepId.trim() !== \"\") {\n    return attrs.stepId;\n  }\n  return event.eventId;\n}\n\nfunction resolveStepType(event: PersistedInspectEvent): StepType {\n  const attrs = event.attributes;\n  if (attrs && typeof attrs.stepType === \"string\") {\n    const t = attrs.stepType;\n    if (\n      t === \"run\" ||\n      t === \"llm\" ||\n      t === \"tool\" ||\n      t === \"decision\" ||\n      t === \"logic\" ||\n      t === \"state\" ||\n      t === \"custom\"\n    ) {\n      return t;\n    }\n  }\n  return mapInspectKindToStepType(event.kind);\n}\n\nfunction resolveTimes(event: PersistedInspectEvent): {\n  timestamp: number;\n  startTime: number;\n  endTime: number;\n} {\n  const timestamp = parseIsoToMs(event.timestamp);\n  const startTime =\n    event.startedAt !== undefined ? parseIsoToMs(event.startedAt) : timestamp;\n  let endTime =\n    event.endedAt !== undefined ? parseIsoToMs(event.endedAt) : timestamp;\n  if (\n    event.durationMs !== undefined &&\n    Number.isFinite(event.durationMs) &&\n    event.durationMs >= 0 &&\n    event.endedAt === undefined\n  ) {\n    endTime = startTime + event.durationMs;\n  }\n  return { timestamp, startTime, endTime };\n}\n\nfunction fromLegacyRunStarted(event: PersistedInspectEvent): TraceEvent {\n  const { timestamp, startTime } = resolveTimes(event);\n  const out: Extract<TraceEvent, { event: \"run_started\" }> = {\n    schemaVersion: \"0.1\",\n    event: \"run_started\",\n    timestamp,\n    runId: event.runId,\n    name: event.name,\n    startTime,\n  };\n  const metadata = pickRunMetadata(event.attributes);\n  if (metadata) out.metadata = metadata;\n  return out;\n}\n\nfunction fromLegacyRunCompleted(event: PersistedInspectEvent): TraceEvent {\n  const { timestamp, endTime } = resolveTimes(event);\n  const status = mapPersistedStatusToRunStatus(event.status) ?? \"success\";\n  const out: Extract<TraceEvent, { event: \"run_completed\" }> = {\n    schemaVersion: \"0.1\",\n    event: \"run_completed\",\n    timestamp,\n    runId: event.runId,\n    status: status === \"running\" ? \"success\" : status,\n    endTime,\n    durationMs: event.durationMs ?? Math.max(0, endTime - timestamp),\n  };\n  const error = mapPersistedError(event.error, event.attributes);\n  if (error) out.error = error;\n  return out;\n}\n\nfunction fromLegacyStepStarted(event: PersistedInspectEvent): TraceEvent {\n  const { timestamp, startTime } = resolveTimes(event);\n  const out: Extract<TraceEvent, { event: \"step_started\" }> = {\n    schemaVersion: \"0.1\",\n    event: \"step_started\",\n    timestamp,\n    runId: event.runId,\n    stepId: resolveStepId(event),\n    name: event.name,\n    type: resolveStepType(event),\n    startTime,\n  };\n  if (event.parentId !== undefined) out.parentId = event.parentId;\n  const metadata = mapTokenUsageToMetadata(event.tokenUsage, event.attributes);\n  if (metadata) out.metadata = metadata;\n  return out;\n}\n\nfunction fromLegacyStepCompleted(event: PersistedInspectEvent): TraceEvent {\n  const { timestamp, endTime } = resolveTimes(event);\n  const status = mapPersistedStatusToStepStatus(event.status) ?? \"success\";\n  const out: Extract<TraceEvent, { event: \"step_completed\" }> = {\n    schemaVersion: \"0.1\",\n    event: \"step_completed\",\n    timestamp,\n    runId: event.runId,\n    stepId: resolveStepId(event),\n    status: status === \"running\" ? \"success\" : status,\n    endTime,\n    durationMs: event.durationMs ?? Math.max(0, endTime - timestamp),\n  };\n  const error = mapPersistedError(event.error, event.attributes);\n  if (error) out.error = error;\n  return out;\n}\n\nfunction fromLegacyOutcomeObserved(event: PersistedInspectEvent): TraceEvent {\n  const attrs = event.attributes ?? {};\n  const observedAtRaw = attrs.observedAt;\n  const observedAt =\n    typeof observedAtRaw === \"string\"\n      ? Date.parse(observedAtRaw)\n      : typeof observedAtRaw === \"number\" && Number.isFinite(observedAtRaw)\n        ? observedAtRaw\n        : resolveTimes(event).timestamp;\n  const status = attrs.outcomeStatus;\n  const out: Extract<TraceEvent, { event: \"outcome_observed\" }> = {\n    schemaVersion: \"0.1\",\n    event: \"outcome_observed\",\n    timestamp: observedAt,\n    runId: event.runId,\n    outcomeId:\n      typeof attrs.outcomeId === \"string\" ? attrs.outcomeId : event.eventId,\n    name: event.name,\n    expectation:\n      typeof attrs.expectation === \"string\" ? attrs.expectation : event.name,\n    status:\n      status === \"passed\" ||\n      status === \"failed\" ||\n      status === \"unknown\" ||\n      status === \"skipped\"\n        ? status\n        : \"unknown\",\n    observedAt,\n  };\n  if (event.parentId !== undefined) out.parentId = event.parentId;\n  if (typeof attrs.method === \"string\") out.method = attrs.method as never;\n  if (attrs.actual !== undefined) out.actual = attrs.actual;\n  if (event.outputSummary !== undefined) out.actual = event.outputSummary;\n  if (attrs.evidence !== undefined) out.evidence = attrs.evidence;\n  return out;\n}\n\nfunction fromNativeOutcome(event: PersistedInspectEvent): TraceEvent[] {\n  return [fromLegacyOutcomeObserved(event)];\n}\n\nfunction fromNativeRun(event: PersistedInspectEvent): TraceEvent[] {\n  const { timestamp, startTime, endTime } = resolveTimes(event);\n  const runStatus = mapPersistedStatusToRunStatus(event.status);\n  const out: TraceEvent[] = [];\n\n  if (runStatus === \"running\" || event.startedAt !== undefined) {\n    const started: Extract<TraceEvent, { event: \"run_started\" }> = {\n      schemaVersion: \"0.1\",\n      event: \"run_started\",\n      timestamp,\n      runId: event.runId,\n      name: event.name,\n      startTime,\n    };\n    const metadata = pickRunMetadata(event.attributes);\n    if (metadata) started.metadata = metadata;\n    out.push(started);\n  }\n\n  if (runStatus === \"success\" || runStatus === \"error\" || event.endedAt !== undefined) {\n    const completed: Extract<TraceEvent, { event: \"run_completed\" }> = {\n      schemaVersion: \"0.1\",\n      event: \"run_completed\",\n      timestamp,\n      runId: event.runId,\n      status: runStatus === \"error\" ? \"error\" : \"success\",\n      endTime,\n      durationMs: event.durationMs ?? Math.max(0, endTime - startTime),\n    };\n    const error = mapPersistedError(event.error, event.attributes);\n    if (error) completed.error = error;\n    out.push(completed);\n  }\n\n  if (out.length === 0) {\n    out.push(fromLegacyRunStarted(event));\n  }\n\n  return out;\n}\n\nfunction fromNativeStep(event: PersistedInspectEvent): TraceEvent[] {\n  const { timestamp, startTime, endTime } = resolveTimes(event);\n  const stepStatus = mapPersistedStatusToStepStatus(event.status);\n  const stepId = resolveStepId(event);\n  const out: TraceEvent[] = [];\n\n  const shouldEmitStarted =\n    stepStatus === \"running\" ||\n    event.startedAt !== undefined ||\n    stepStatus === \"success\" ||\n    stepStatus === \"error\";\n\n  if (shouldEmitStarted) {\n    const started: Extract<TraceEvent, { event: \"step_started\" }> = {\n      schemaVersion: \"0.1\",\n      event: \"step_started\",\n      timestamp,\n      runId: event.runId,\n      stepId,\n      name: event.name,\n      type: resolveStepType(event),\n      startTime,\n    };\n    if (event.parentId !== undefined) started.parentId = event.parentId;\n    const metadata = mapTokenUsageToMetadata(event.tokenUsage, event.attributes);\n    if (metadata) started.metadata = metadata;\n    out.push(started);\n  }\n\n  if (\n    stepStatus === \"success\" ||\n    stepStatus === \"error\" ||\n    event.endedAt !== undefined ||\n    event.durationMs !== undefined\n  ) {\n    const completed: Extract<TraceEvent, { event: \"step_completed\" }> = {\n      schemaVersion: \"0.1\",\n      event: \"step_completed\",\n      timestamp,\n      runId: event.runId,\n      stepId,\n      status: stepStatus === \"error\" ? \"error\" : \"success\",\n      endTime,\n      durationMs: event.durationMs ?? Math.max(0, endTime - startTime),\n    };\n    const error = mapPersistedError(event.error, event.attributes);\n    if (error) completed.error = error;\n    out.push(completed);\n  }\n\n  if (out.length === 0) {\n    out.push(fromLegacyStepStarted(event));\n  }\n\n  return out;\n}\n\n/**\n * Maps one v0.2 {@link PersistedInspectEvent} to zero or more v0.1 {@link TraceEvent} rows\n * for inspection commands. Does not mutate `event`.\n */\nexport function persistedInspectEventToTraceEvents(\n  event: PersistedInspectEvent,\n): TraceEvent[] {\n  if (!isPersistedInspectEvent(event)) {\n    throw new Error(\"Invalid PersistedInspectEvent: failed isPersistedInspectEvent\");\n  }\n\n  const legacyEvent = event.attributes?.legacyEvent;\n  if (legacyEvent === \"run_started\") return [fromLegacyRunStarted(event)];\n  if (legacyEvent === \"run_completed\") return [fromLegacyRunCompleted(event)];\n  if (legacyEvent === \"step_started\") return [fromLegacyStepStarted(event)];\n  if (legacyEvent === \"step_completed\") return [fromLegacyStepCompleted(event)];\n  if (legacyEvent === \"outcome_observed\") return [fromLegacyOutcomeObserved(event)];\n\n  if (event.kind === \"RUN\") {\n    return fromNativeRun(event);\n  }\n\n  if (event.kind === \"OUTCOME\") {\n    return fromNativeOutcome(event);\n  }\n\n  return fromNativeStep(event);\n}\n\n/**\n * Maps persisted v0.2 events to v0.1 trace events for inspection.\n */\nexport function persistedInspectEventsToTraceEvents(\n  events: readonly PersistedInspectEvent[],\n  options?: PersistedToTraceEventOptions,\n): TraceEvent[] {\n  const out: TraceEvent[] = [];\n  events.forEach((event, index) => {\n    const rows = persistedInspectEventToTraceEvents(event);\n    if (rows.length === 0 && options?.eventIndex !== undefined) {\n      void options.eventIndex;\n      void index;\n    }\n    out.push(...rows);\n  });\n  return out;\n}\n","export let urlAlphabet =\n  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","import { webcrypto as crypto } from 'node:crypto'\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\nfunction fillPool(bytes) {\n  if (bytes < 0 || bytes > 1024) throw new RangeError('Wrong ID size')\n  if (!pool || pool.length < bytes) {\n    pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n    crypto.getRandomValues(pool)\n    poolOffset = 0\n  } else if (poolOffset + bytes > pool.length) {\n    crypto.getRandomValues(pool)\n    poolOffset = 0\n  }\n  poolOffset += bytes\n}\nexport function random(bytes) {\n  fillPool((bytes |= 0))\n  return pool.subarray(poolOffset - bytes, poolOffset)\n}\nexport function customRandom(alphabet, defaultSize, getRandom) {\n  let safeByteCutoff = 256 - (256 % alphabet.length)\n  if (safeByteCutoff === 256) {\n    let mask = alphabet.length - 1\n    return (size = defaultSize) => {\n      if (!size) return ''\n      let id = ''\n      while (true) {\n        let bytes = getRandom(size)\n        let i = size\n        while (i--) {\n          id += alphabet[bytes[i] & mask]\n          if (id.length >= size) return id\n        }\n      }\n    }\n  }\n  let step = Math.ceil((1.6 * 256 * defaultSize) / safeByteCutoff)\n  return (size = defaultSize) => {\n    if (!size) return ''\n    let id = ''\n    while (true) {\n      let bytes = getRandom(step)\n      let i = step\n      while (i--) {\n        if (bytes[i] < safeByteCutoff) {\n          id += alphabet[bytes[i] % alphabet.length]\n          if (id.length >= size) return id\n        }\n      }\n    }\n  }\n}\nexport function customAlphabet(alphabet, size = 21) {\n  return customRandom(alphabet, size, random)\n}\nexport function nanoid(size = 21) {\n  fillPool((size |= 0))\n  let id = ''\n  for (let i = poolOffset - size; i < poolOffset; i++) {\n    id += scopedUrlAlphabet[pool[i] & 63]\n  }\n  return id\n}\n","import { appendFile, mkdir, writeFile } from \"node:fs/promises\";\n\n/** POSIX mode requested for newly created built-in raw trace directories. */\nexport const TRACE_DIR_MODE = 0o700;\n\n/** POSIX mode requested for newly created built-in raw trace JSONL files. */\nexport const TRACE_FILE_MODE = 0o600;\n\n/**\n * Creates a trace directory recursively with {@link TRACE_DIR_MODE}.\n * Mode applies only to newly created path components; existing directories are not chmodded.\n */\nexport async function mkdirTraceDir(dirPath: string): Promise<void> {\n  await mkdir(dirPath, { recursive: true, mode: TRACE_DIR_MODE });\n}\n\n/**\n * Creates or truncates an empty UTF-8 trace file with {@link TRACE_FILE_MODE}.\n * Mode applies only when the file is created; existing files are not chmodded.\n */\nexport async function createEmptyTraceFile(filePath: string): Promise<void> {\n  await writeFile(filePath, \"\", { encoding: \"utf-8\", mode: TRACE_FILE_MODE });\n}\n\n/**\n * Appends UTF-8 data to a trace file, creating it with {@link TRACE_FILE_MODE} when missing.\n * Mode applies only on create; existing files are not chmodded.\n */\nexport async function appendTraceFile(filePath: string, data: string): Promise<void> {\n  await appendFile(filePath, data, { encoding: \"utf-8\", mode: TRACE_FILE_MODE });\n}\n","/**\n * v0.2 shared duration utilities.\n *\n * `parseDuration` is used for filters such as \"since\" / \"older-than\".\n * `formatDuration` is used for compact display in CLI and summaries.\n */\n\nexport function parseDuration(duration: string): number {\n  const raw = typeof duration === \"string\" ? duration.trim() : \"\";\n  const match = raw.match(/^(\\d+)(ms|[smhd])$/);\n  if (!match) {\n    throw new Error(\n      `Invalid duration format: ${duration}. Use a positive integer followed by ms, s, m, h, or d (e.g. 500ms, 30s, 5m, 2h, 7d).`,\n    );\n  }\n\n  const amount = Number.parseInt(match[1], 10);\n  const unit = match[2];\n\n  if (!Number.isFinite(amount) || amount <= 0) {\n    throw new Error(\n      `Invalid duration amount: ${duration}. Amount must be a positive integer.`,\n    );\n  }\n\n  switch (unit) {\n    case \"ms\":\n      return amount;\n    case \"s\":\n      return amount * 1000;\n    case \"m\":\n      return amount * 60 * 1000;\n    case \"h\":\n      return amount * 60 * 60 * 1000;\n    case \"d\":\n      return amount * 24 * 60 * 60 * 1000;\n    default: {\n      // Should be unreachable due to regex.\n      throw new Error(`Unknown duration unit: ${unit}`);\n    }\n  }\n}\n\nexport function formatDuration(ms: number): string {\n  if (!Number.isFinite(ms)) {\n    return \"0ms\";\n  }\n  if (ms < 0) {\n    throw new Error(`formatDuration: ms must be non-negative (got ${ms})`);\n  }\n  if (ms < 1000) {\n    return `${Math.floor(ms)}ms`;\n  }\n  if (ms < 60_000) {\n    return `${(ms / 1000).toFixed(2)}s`;\n  }\n  if (ms < 3_600_000) {\n    return `${(ms / 60_000).toFixed(1)}m`;\n  }\n  return `${(ms / 3_600_000).toFixed(1)}h`;\n}\n\n","import os from \"node:os\";\nimport path from \"node:path\";\n\nimport { nanoid } from \"nanoid\";\n\nimport { mkdirTraceDir } from \"./trace-filesystem.js\";\nimport type { ErrorInfo } from \"./types.js\";\nimport { formatDuration as formatDurationV2 } from \"./utils/duration.js\";\n\n/** Default folder under the user home for AgentInspect data. */\nexport const DEFAULT_TRACE_DIR_NAME = \".agent-inspect\";\n\n/** Subfolder where JSONL run traces are stored. */\nexport const RUNS_DIR_NAME = \"runs\";\n\n/** Writable trace root when the default home path cannot be used. */\nexport const FALLBACK_TRACE_DIR = path.join(\n  os.tmpdir(),\n  \"agent-inspect\",\n  RUNS_DIR_NAME,\n);\n\n/** Maximum display length for run/step names before truncation. */\nexport const MAX_NAME_LENGTH = 100;\n\n/** Returns `run_` + a 10-character nanoid segment. */\nexport function createRunId(): string {\n  return `run_${nanoid(10)}`;\n}\n\n/** Returns `step_` + a 10-character nanoid segment. */\nexport function createStepId(): string {\n  return `step_${nanoid(10)}`;\n}\n\n/** Formats a duration for CLI display (v0.2 rules). */\nexport function formatDuration(ms: number): string {\n  return formatDurationV2(ms);\n}\n\n/**\n * Formats a Unix timestamp (ms) as local `YYYY-MM-DD HH:mm:ss`.\n * Invalid values yield `\"Invalid date\"` (no throw).\n */\nexport function formatTimestamp(timestamp: number): string {\n  if (!Number.isFinite(timestamp)) {\n    return \"Invalid date\";\n  }\n  const d = new Date(timestamp);\n  if (Number.isNaN(d.getTime())) {\n    return \"Invalid date\";\n  }\n  const y = d.getFullYear();\n  const mo = String(d.getMonth() + 1).padStart(2, \"0\");\n  const day = String(d.getDate()).padStart(2, \"0\");\n  const h = String(d.getHours()).padStart(2, \"0\");\n  const min = String(d.getMinutes()).padStart(2, \"0\");\n  const s = String(d.getSeconds()).padStart(2, \"0\");\n  return `${y}-${mo}-${day} ${h}:${min}:${s}`;\n}\n\n/**\n * Default directory for trace files: `~/DEFAULT_TRACE_DIR_NAME/RUNS_DIR_NAME`.\n * Falls back to {@link FALLBACK_TRACE_DIR} when home cannot be resolved.\n */\nexport function getDefaultTraceDir(): string {\n  const envDir = process.env.AGENT_INSPECT_TRACE_DIR;\n  if (typeof envDir === \"string\" && envDir.trim() !== \"\") {\n    return envDir.trim();\n  }\n  try {\n    const home = os.homedir();\n    if (typeof home !== \"string\" || home.trim() === \"\") {\n      return FALLBACK_TRACE_DIR;\n    }\n    return path.join(home, DEFAULT_TRACE_DIR_NAME, RUNS_DIR_NAME);\n  } catch {\n    return FALLBACK_TRACE_DIR;\n  }\n}\n\n/**\n * Full path to the JSONL trace file for a run.\n * `runId` is passed through `path.basename` to avoid traversal; empty ids become `run_unknown`.\n */\nexport function getTraceFilePath(runId: string, traceDir?: string): string {\n  const baseDir = traceDir ?? getDefaultTraceDir();\n  let safeId =\n    typeof runId === \"string\" && runId.trim() !== \"\" ? runId.trim() : \"run_unknown\";\n  safeId = path.basename(safeId);\n  if (safeId === \"\" || safeId === \".\" || safeId === \"..\") {\n    safeId = \"run_unknown\";\n  }\n  return path.join(baseDir, `${safeId}.jsonl`);\n}\n\n/**\n * Ensures a trace directory exists (recursive). Tries {@link FALLBACK_TRACE_DIR} on failure.\n * Returns the directory path that callers should prefer: primary, fallback, or original if both mkdir attempts fail.\n * Emits concise `[AgentInspect]` warnings on failure; never throws.\n */\nexport async function ensureTraceDir(traceDir: string): Promise<string> {\n  const primary = path.resolve(traceDir);\n  try {\n    await mkdirTraceDir(primary);\n    return primary;\n  } catch {\n    warn(`Failed to create trace directory: ${primary}`);\n    const fallback = path.resolve(FALLBACK_TRACE_DIR);\n    try {\n      await mkdirTraceDir(fallback);\n      return fallback;\n    } catch {\n      warn(`Failed to create fallback trace directory: ${fallback}`);\n      return primary;\n    }\n  }\n}\n\n/**\n * Normalizes any thrown/caught value into {@link ErrorInfo}.\n * Never throws (circular structures and non-JSON values fall back to a generic message).\n */\nexport function formatError(error: unknown): ErrorInfo {\n  if (error instanceof Error) {\n    const out: ErrorInfo = { message: error.message };\n    if (typeof error.stack === \"string\" && error.stack.length > 0) {\n      out.stack = error.stack;\n    }\n    return out;\n  }\n  if (typeof error === \"string\") {\n    return { message: error };\n  }\n  if (error === null) {\n    return { message: \"Unknown error: null\" };\n  }\n  if (error === undefined) {\n    return { message: \"Unknown error: undefined\" };\n  }\n  if (\n    typeof error === \"number\" ||\n    typeof error === \"boolean\" ||\n    typeof error === \"bigint\"\n  ) {\n    return { message: String(error) };\n  }\n  if (typeof error === \"object\") {\n    try {\n      return { message: JSON.stringify(error) };\n    } catch {\n      return { message: \"Unknown error\" };\n    }\n  }\n  return { message: \"Unknown error\" };\n}\n\n/**\n * Truncates a display name to `maxLength`, appending `\"...\"` when shortened.\n * Empty or non-string input becomes `\"unnamed\"`.\n */\nexport function truncateName(name: string, maxLength = MAX_NAME_LENGTH): string {\n  if (typeof name !== \"string\" || name.trim() === \"\") {\n    return \"unnamed\";\n  }\n  const trimmed = name.trim();\n  if (trimmed.length <= maxLength) {\n    return trimmed;\n  }\n  const ellipsis = \"...\";\n  const head = Math.max(0, maxLength - ellipsis.length);\n  return `${trimmed.slice(0, head)}${ellipsis}`;\n}\n\n/**\n * Instrumentation-only warning to stderr. Not a general-purpose logger.\n * Optional `error` is summarized via {@link formatError} (message only).\n */\nexport function warn(message: string, error?: unknown): void {\n  const base = `[AgentInspect] ${message}`;\n  if (error === undefined) {\n    console.warn(base);\n    return;\n  }\n  console.warn(`${base}: ${formatError(error).message}`);\n}\n","import { persistedInspectEventToTraceEvents } from \"./persisted/to-trace-event.js\";\nimport { isPersistedInspectEvent } from \"./types/persisted-inspect-event.js\";\nimport type { PersistedInspectEvent } from \"./types/persisted-inspect-event.js\";\nimport { isTraceEvent } from \"./types.js\";\nimport type { TraceEvent } from \"./types.js\";\nimport { warn } from \"./utils.js\";\n\nexport type TraceJsonlFormat = \"0.1\" | \"0.2\" | \"1.0\" | \"mixed\" | \"empty\";\n\nexport type ParsedTraceJsonlRow =\n  | { format: \"0.1\"; event: TraceEvent; sourceLine: number }\n  | { format: \"0.2\"; event: PersistedInspectEvent; sourceLine: number }\n  | { format: \"1.0\"; event: PersistedInspectEvent; sourceLine: number };\n\nexport interface ParseTraceJsonlResult {\n  format: TraceJsonlFormat;\n  /** Count of valid source JSONL rows before any one-to-many normalization. */\n  sourceEventCount: number;\n  events: TraceEvent[];\n  persisted: PersistedInspectEvent[];\n  /** Valid source rows in JSONL order, before cross-version normalization. */\n  rows: ParsedTraceJsonlRow[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction detectLineFormat(parsed: unknown): \"0.1\" | \"0.2\" | \"1.0\" | \"unknown\" {\n  if (!isRecord(parsed)) return \"unknown\";\n  if (parsed.schemaVersion === \"0.1\") return \"0.1\";\n  if (parsed.schemaVersion === \"0.2\") return \"0.2\";\n  if (parsed.schemaVersion === \"1.0\") return \"1.0\";\n  return \"unknown\";\n}\n\nexport interface ParseTraceJsonlOptions {\n  validate?: (value: unknown) => value is TraceEvent;\n  /** Emit parse warnings through the standard AgentInspect warning channel (default true). */\n  warnings?: boolean;\n}\n\n/**\n * Parses JSONL content into normalized v0.1 {@link TraceEvent} rows.\n * Accepts homogenous v0.1, v0.2, or v1.0 files; mixed files are converted with a warning.\n */\nexport function parseTraceJsonl(\n  raw: string,\n  options: ParseTraceJsonlOptions = {},\n): ParseTraceJsonlResult {\n  const validate = options.validate ?? isTraceEvent;\n  const emitWarning = (message: string): void => {\n    if (options.warnings !== false) warn(message);\n  };\n  const persisted: PersistedInspectEvent[] = [];\n  const traceEvents: TraceEvent[] = [];\n  const rows: ParsedTraceJsonlRow[] = [];\n  let sourceEventCount = 0;\n  let saw01 = false;\n  let saw02 = false;\n  let saw10 = false;\n  let lineNumber = 0;\n\n  for (const line of raw.split(/\\r?\\n/)) {\n    lineNumber += 1;\n    const trimmed = line.trim();\n    if (trimmed === \"\") continue;\n\n    let parsed: unknown;\n    try {\n      parsed = JSON.parse(trimmed) as unknown;\n    } catch {\n      emitWarning(\"Skipped invalid JSON line in trace file\");\n      continue;\n    }\n\n    const format = detectLineFormat(parsed);\n    if (format === \"0.1\") {\n      saw01 = true;\n      if (validate(parsed)) {\n        sourceEventCount += 1;\n        traceEvents.push(parsed);\n        rows.push({ format: \"0.1\", event: parsed, sourceLine: lineNumber });\n      } else {\n        emitWarning(\"Skipped invalid trace event line in trace file\");\n      }\n      continue;\n    }\n\n    if (format === \"0.2\" || format === \"1.0\") {\n      if (format === \"0.2\") saw02 = true;\n      else saw10 = true;\n      if (isPersistedInspectEvent(parsed)) {\n        sourceEventCount += 1;\n        persisted.push(parsed);\n        rows.push({ format, event: parsed, sourceLine: lineNumber });\n        traceEvents.push(...persistedInspectEventToTraceEvents(parsed));\n      } else {\n        emitWarning(\"Skipped invalid persisted inspect event line in trace file\");\n      }\n      continue;\n    }\n\n    emitWarning(\"Skipped trace line with unknown schemaVersion\");\n  }\n\n  const seenFormats = [saw01, saw02, saw10].filter(Boolean).length;\n  if (seenFormats > 1) {\n    emitWarning(\n      \"Trace file mixes AgentInspect schemaVersion rows; normalizing all rows\",\n    );\n  }\n\n  let format: TraceJsonlFormat = \"empty\";\n  if (seenFormats > 1) format = \"mixed\";\n  else if (saw01) format = \"0.1\";\n  else if (saw02) format = \"0.2\";\n  else if (saw10) format = \"1.0\";\n\n  return { format, sourceEventCount, events: traceEvents, persisted, rows };\n}\n\n/**\n * Returns a user-facing message when a trace file uses an unsupported schema version.\n */\nexport function unknownTraceFormatMessage(): string {\n  return (\n    \"Unsupported trace format. Expected schemaVersion 0.1 (TraceEvent), 0.2 (PersistedInspectEvent), or 1.0 (PersistedInspectEvent).\"\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","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 { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport { extractCorrelationMetadata } from \"./correlation-metadata.js\";\nimport type { ExecutionContext, TraceCorrelationMetadata } from \"./types.js\";\nimport {\n  resolveTraceSafetyOptions,\n  type TraceSafetyOptions,\n} from \"./trace-event-safety.js\";\n\ntype RuntimeExecutionContext = ExecutionContext & {\n  currentStepId?: string;\n  currentDepth: number;\n  traceSafety: TraceSafetyOptions;\n};\n\nconst storage = new AsyncLocalStorage<RuntimeExecutionContext>();\n\nfunction toPublicContext(ctx: RuntimeExecutionContext): ExecutionContext {\n  return {\n    runId: ctx.runId,\n    runName: ctx.runName,\n    traceDir: ctx.traceDir,\n    silent: ctx.silent,\n    metadata: ctx.metadata,\n  };\n}\n\nfunction invoke<T>(fn: () => T | Promise<T>): Promise<T> {\n  return new Promise((resolve, reject) => {\n    try {\n      Promise.resolve(fn()).then(resolve, reject);\n    } catch (e) {\n      reject(e);\n    }\n  });\n}\n\n/** Returns the active run context, without internal step fields. */\nexport function getCurrentContext(): ExecutionContext | undefined {\n  try {\n    const s = storage.getStore();\n    if (!s) return undefined;\n    return toPublicContext(s);\n  } catch {\n    return undefined;\n  }\n}\n\n/** Active `runId` when inside `runWithContext`, else `undefined`. */\nexport function getCurrentRunId(): string | undefined {\n  try {\n    return storage.getStore()?.runId;\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * Correlation metadata for the active run (`correlationId`, `requestId`, `decisionId`, `groupId`).\n * `undefined` outside `inspectRun` / `maybeInspectRun` or when no correlation fields were set.\n */\nexport function getCurrentCorrelationMetadata():\n  | TraceCorrelationMetadata\n  | undefined {\n  try {\n    return extractCorrelationMetadata(storage.getStore()?.metadata);\n  } catch {\n    return undefined;\n  }\n}\n\n/** Active `runName` when inside `runWithContext`, else `undefined`. */\nexport function getCurrentRunName(): string | undefined {\n  try {\n    return storage.getStore()?.runName;\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * Active step id in this async scope (parent for nested `step()` calls).\n * `undefined` at run root or outside any run.\n */\nexport function getCurrentStepId(): string | undefined {\n  try {\n    return storage.getStore()?.currentStepId;\n  } catch {\n    return undefined;\n  }\n}\n\n/** Alias of {@link getCurrentStepId} for readability in step instrumentation. */\nexport function getParentStepId(): string | undefined {\n  return getCurrentStepId();\n}\n\n/**\n * Nesting depth: `0` at run root, increments by one per nested `runWithStepContext`.\n * Returns `0` outside any run.\n */\nexport function getCurrentDepth(): number {\n  try {\n    const d = storage.getStore()?.currentDepth;\n    return typeof d === \"number\" && Number.isFinite(d) ? d : 0;\n  } catch {\n    return 0;\n  }\n}\n\nexport function hasActiveContext(): boolean {\n  try {\n    return storage.getStore() !== undefined;\n  } catch {\n    return false;\n  }\n}\n\nexport function getTraceDirFromContext(): string | undefined {\n  try {\n    return storage.getStore()?.traceDir;\n  } catch {\n    return undefined;\n  }\n}\n\nexport function isSilentContext(): boolean {\n  try {\n    const s = storage.getStore();\n    return s ? s.silent : false;\n  } catch {\n    return false;\n  }\n}\n\n/** Resolved trace safety settings for the active run (redaction + size bounds). */\nexport function getTraceSafetyFromContext(): TraceSafetyOptions | undefined {\n  try {\n    return storage.getStore()?.traceSafety;\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * Runs `fn` with a fresh AgentInspect run context (depth 0, no active step).\n * Propagates sync/async results and rejections; does not swallow user errors.\n */\nexport function runWithContext<T>(\n  context: ExecutionContext,\n  fn: () => Promise<T> | T,\n  traceSafety: TraceSafetyOptions = resolveTraceSafetyOptions(),\n): Promise<T> {\n  const runtime: RuntimeExecutionContext = {\n    runId: context.runId,\n    runName: context.runName,\n    traceDir: context.traceDir,\n    silent: context.silent,\n    metadata: context.metadata,\n    traceSafety,\n    currentDepth: 0,\n  };\n\n  return new Promise((resolve, reject) => {\n    storage.run(runtime, () => {\n      try {\n        Promise.resolve(fn()).then(resolve, reject);\n      } catch (e) {\n        reject(e);\n      }\n    });\n  });\n}\n\n/**\n * Runs `fn` with `stepId` as the active step (incremented depth).\n * If no run is active, runs `fn` without altering async context.\n */\nexport function runWithStepContext<T>(\n  stepId: string,\n  fn: () => Promise<T> | T,\n): Promise<T> {\n  let parent: RuntimeExecutionContext | undefined;\n  try {\n    parent = storage.getStore();\n  } catch {\n    parent = undefined;\n  }\n\n  if (!parent) {\n    return invoke(fn);\n  }\n\n  const derived: RuntimeExecutionContext = {\n    runId: parent.runId,\n    runName: parent.runName,\n    traceDir: parent.traceDir,\n    silent: parent.silent,\n    metadata: parent.metadata,\n    traceSafety: parent.traceSafety,\n    currentStepId: stepId,\n    currentDepth: parent.currentDepth + 1,\n  };\n\n  return new Promise((resolve, reject) => {\n    storage.run(derived, () => {\n      try {\n        Promise.resolve(fn()).then(resolve, reject);\n      } catch (e) {\n        reject(e);\n      }\n    });\n  });\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport { extractCorrelationMetadata } from \"./correlation-metadata.js\";\nimport type { ExecutionContext, TraceCorrelationMetadata } from \"./types.js\";\nimport {\n  preparePersistedInspectEventForWrite,\n  resolveTraceSafetyOptions,\n  type TraceSafetyOptions,\n} from \"./trace-event-safety.js\";\nimport type { PersistedInspectEvent } from \"./types/persisted-inspect-event.js\";\nimport type { TraceWriter, TraceWriterStats } from \"./writers/index.js\";\n\nexport interface InspectorRuntimeOptions {\n  enabled?: boolean;\n  writer?: TraceWriter;\n  traceSafety?: TraceSafetyOptions;\n}\n\nexport interface InspectorRuntimeContext extends ExecutionContext {\n  runtimeId: string;\n}\n\nexport interface InspectorRuntimeDiagnostics {\n  instrumentationErrors: number;\n  lastInstrumentationError?: string;\n  writerStats?: TraceWriterStats;\n}\n\ntype RuntimeStore = InspectorRuntimeContext & {\n  currentStepId?: string;\n  currentDepth: number;\n  traceSafety: TraceSafetyOptions;\n};\n\nexport interface InspectorRuntime {\n  readonly runtimeId: string;\n  readonly enabled: boolean;\n  runWithContext<T>(\n    context: ExecutionContext,\n    fn: () => Promise<T> | T,\n  ): Promise<T>;\n  runWithStepContext<T>(\n    stepId: string,\n    fn: () => Promise<T> | T,\n  ): Promise<T>;\n  getCurrentContext(): InspectorRuntimeContext | undefined;\n  getCurrentCorrelationMetadata(): TraceCorrelationMetadata | undefined;\n  getCurrentStepId(): string | undefined;\n  getCurrentDepth(): number;\n  getTraceSafety(): TraceSafetyOptions;\n  write(event: PersistedInspectEvent): Promise<void>;\n  flush(): Promise<void>;\n  close(): Promise<void>;\n  getDiagnostics(): InspectorRuntimeDiagnostics;\n}\n\nfunction invoke<T>(fn: () => T | Promise<T>): Promise<T> {\n  return new Promise((resolve, reject) => {\n    try {\n      Promise.resolve(fn()).then(resolve, reject);\n    } catch (error) {\n      reject(error);\n    }\n  });\n}\n\nfunction normalizeError(error: unknown): string {\n  if (error instanceof Error && error.message.trim() !== \"\") {\n    return error.message;\n  }\n  if (typeof error === \"string\" && error.trim() !== \"\") {\n    return error;\n  }\n  return \"Unknown inspector runtime error\";\n}\n\nlet runtimeSequence = 0;\n\nfunction createRuntimeId(): string {\n  runtimeSequence += 1;\n  return `runtime_${runtimeSequence.toString(36)}`;\n}\n\nfunction publicContext(store: RuntimeStore): InspectorRuntimeContext {\n  return {\n    runtimeId: store.runtimeId,\n    runId: store.runId,\n    runName: store.runName,\n    traceDir: store.traceDir,\n    silent: store.silent,\n    metadata: store.metadata,\n  };\n}\n\nexport function createInspectorRuntime(\n  options: InspectorRuntimeOptions = {},\n): InspectorRuntime {\n  const storage = new AsyncLocalStorage<RuntimeStore>();\n  const enabled = options.enabled ?? true;\n  const runtimeId = createRuntimeId();\n  const traceSafety = options.traceSafety ?? resolveTraceSafetyOptions();\n  let closed = false;\n  let instrumentationErrors = 0;\n  let lastInstrumentationError: string | undefined;\n\n  function recordInstrumentationError(error: unknown): void {\n    instrumentationErrors += 1;\n    lastInstrumentationError = normalizeError(error);\n  }\n\n  function currentStore(): RuntimeStore | undefined {\n    try {\n      return storage.getStore();\n    } catch (error) {\n      recordInstrumentationError(error);\n      return undefined;\n    }\n  }\n\n  const runtime: InspectorRuntime = {\n    runtimeId,\n    enabled,\n    runWithContext(context, fn) {\n      if (!enabled) return invoke(fn);\n\n      const store: RuntimeStore = {\n        runtimeId,\n        runId: context.runId,\n        runName: context.runName,\n        traceDir: context.traceDir,\n        silent: context.silent,\n        metadata: context.metadata,\n        traceSafety,\n        currentDepth: 0,\n      };\n\n      return new Promise((resolve, reject) => {\n        storage.run(store, () => {\n          invoke(fn).then(resolve, reject);\n        });\n      });\n    },\n    runWithStepContext(stepId, fn) {\n      if (!enabled) return invoke(fn);\n      const parent = currentStore();\n      if (!parent) return invoke(fn);\n\n      const store: RuntimeStore = {\n        runtimeId,\n        runId: parent.runId,\n        runName: parent.runName,\n        traceDir: parent.traceDir,\n        silent: parent.silent,\n        metadata: parent.metadata,\n        traceSafety: parent.traceSafety,\n        currentStepId: stepId,\n        currentDepth: parent.currentDepth + 1,\n      };\n\n      return new Promise((resolve, reject) => {\n        storage.run(store, () => {\n          invoke(fn).then(resolve, reject);\n        });\n      });\n    },\n    getCurrentContext() {\n      const store = currentStore();\n      return store ? publicContext(store) : undefined;\n    },\n    getCurrentCorrelationMetadata() {\n      return extractCorrelationMetadata(currentStore()?.metadata);\n    },\n    getCurrentStepId() {\n      return currentStore()?.currentStepId;\n    },\n    getCurrentDepth() {\n      const depth = currentStore()?.currentDepth;\n      return typeof depth === \"number\" && Number.isFinite(depth) ? depth : 0;\n    },\n    getTraceSafety() {\n      return traceSafety;\n    },\n    async write(event) {\n      if (!enabled || closed || !options.writer) return;\n      try {\n        const safe = preparePersistedInspectEventForWrite(event, traceSafety);\n        if (safe === undefined) {\n          recordInstrumentationError(\"Invalid persisted inspect event\");\n          return;\n        }\n        await options.writer.write(safe);\n      } catch (error) {\n        recordInstrumentationError(error);\n      }\n    },\n    async flush() {\n      if (!options.writer) return;\n      try {\n        await options.writer.flush?.();\n      } catch (error) {\n        recordInstrumentationError(error);\n      }\n    },\n    async close() {\n      if (closed) return;\n      try {\n        await options.writer?.close?.();\n      } catch (error) {\n        recordInstrumentationError(error);\n      } finally {\n        closed = true;\n      }\n    },\n    getDiagnostics() {\n      const diagnostics: InspectorRuntimeDiagnostics = {\n        instrumentationErrors,\n      };\n      if (lastInstrumentationError !== undefined) {\n        diagnostics.lastInstrumentationError = lastInstrumentationError;\n      }\n      const writerStats = options.writer?.getStats?.();\n      if (writerStats !== undefined) {\n        diagnostics.writerStats = writerStats;\n      }\n      return diagnostics;\n    },\n  };\n\n  return runtime;\n}\n","export type ObservedOutcomeStatus = \"passed\" | \"failed\" | \"unknown\" | \"skipped\";\n\nexport type ObservedOutcomeMethod =\n  | \"dom\"\n  | \"accessibility\"\n  | \"snapshot\"\n  | \"network\"\n  | \"storage\"\n  | \"filesystem\"\n  | \"database\"\n  | \"queue\"\n  | \"custom\";\n\nexport interface ObservedOutcome {\n  outcomeId: string;\n  runId: string;\n  parentId?: string;\n  name: string;\n  expectation: string;\n  status: ObservedOutcomeStatus;\n  method?: ObservedOutcomeMethod;\n  actual?: unknown;\n  evidence?: unknown;\n  observedAt: number;\n}\n\nexport interface ObserveOutcomeOptions {\n  expectation: string;\n  status: ObservedOutcomeStatus;\n  method?: ObservedOutcomeMethod;\n  actual?: unknown;\n  evidence?: unknown;\n  observedAt?: number | string;\n}\n\nexport interface ObservedOutcomeSummary {\n  total: number;\n  passed: number;\n  failed: number;\n  unknown: number;\n  skipped: number;\n  outcomes: ObservedOutcome[];\n}\n\nexport const OBSERVED_OUTCOME_STATUSES: readonly ObservedOutcomeStatus[] = [\n  \"passed\",\n  \"failed\",\n  \"unknown\",\n  \"skipped\",\n];\n\nexport const OBSERVED_OUTCOME_METHODS: readonly ObservedOutcomeMethod[] = [\n  \"dom\",\n  \"accessibility\",\n  \"snapshot\",\n  \"network\",\n  \"storage\",\n  \"filesystem\",\n  \"database\",\n  \"queue\",\n  \"custom\",\n];\n\nexport const OUTCOME_ATTRIBUTE_STATUS_KEY = \"outcomeStatus\";\nexport const OUTCOME_ATTRIBUTE_EXPECTATION_KEY = \"expectation\";\nexport const OUTCOME_ATTRIBUTE_METHOD_KEY = \"method\";\nexport const OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY = \"observedAt\";\nexport const OUTCOME_LEGACY_EVENT = \"outcome_observed\";\n","import type { TraceSafetyOptions } from \"../trace-event-safety.js\";\nimport { prepareMetadataForDisk } from \"../trace-event-safety.js\";\nimport type { OutcomeObservedEvent } from \"../types.js\";\nimport {\n  OBSERVED_OUTCOME_METHODS,\n  OBSERVED_OUTCOME_STATUSES,\n  type ObserveOutcomeOptions,\n  type ObservedOutcomeMethod,\n  type ObservedOutcomeStatus,\n} from \"./types.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction normalizeName(name: string): string {\n  const trimmed = name.trim();\n  if (trimmed === \"\") {\n    throw new Error(\"observeOutcome requires a non-empty name.\");\n  }\n  return trimmed.slice(0, 100);\n}\n\nfunction normalizeExpectation(value: string): string {\n  const trimmed = value.trim();\n  if (trimmed === \"\") {\n    throw new Error(\"observeOutcome requires a non-empty expectation.\");\n  }\n  return trimmed.slice(0, 500);\n}\n\nexport function parseObservedOutcomeStatus(value: string): ObservedOutcomeStatus {\n  const trimmed = value.trim().toLowerCase();\n  if ((OBSERVED_OUTCOME_STATUSES as readonly string[]).includes(trimmed)) {\n    return trimmed as ObservedOutcomeStatus;\n  }\n  throw new Error(\n    `Unsupported observation status \"${value}\". Use passed, failed, unknown, or skipped.`,\n  );\n}\n\nfunction parseMethod(value: string | undefined): ObservedOutcomeMethod | undefined {\n  if (value === undefined || value.trim() === \"\") return undefined;\n  const trimmed = value.trim().toLowerCase();\n  if ((OBSERVED_OUTCOME_METHODS as readonly string[]).includes(trimmed)) {\n    return trimmed as ObservedOutcomeMethod;\n  }\n  throw new Error(`Unsupported observation method \"${value}\".`);\n}\n\nfunction parseObservedAt(value: number | string | undefined, fallback: number): number {\n  if (value === undefined) return fallback;\n  if (typeof value === \"number\" && Number.isFinite(value)) return value;\n  if (typeof value === \"string\") {\n    const parsed = Date.parse(value);\n    if (Number.isFinite(parsed)) return parsed;\n  }\n  return fallback;\n}\n\nexport function normalizeObserveOutcomeInput(\n  name: string,\n  options: ObserveOutcomeOptions,\n  nowMs: number = Date.now(),\n): {\n  name: string;\n  expectation: string;\n  status: ObservedOutcomeStatus;\n  method?: ObservedOutcomeMethod;\n  actual?: unknown;\n  evidence?: unknown;\n  observedAt: number;\n} {\n  return {\n    name: normalizeName(name),\n    expectation: normalizeExpectation(options.expectation),\n    status: options.status,\n    ...(options.method !== undefined ? { method: parseMethod(options.method) } : {}),\n    ...(options.actual !== undefined ? { actual: options.actual } : {}),\n    ...(options.evidence !== undefined ? { evidence: options.evidence } : {}),\n    observedAt: parseObservedAt(options.observedAt, nowMs),\n  };\n}\n\nfunction boundPayload(\n  value: unknown,\n  opts: TraceSafetyOptions,\n): unknown {\n  if (value === undefined) return undefined;\n  if (!isRecord(value) && !Array.isArray(value)) {\n    if (typeof value === \"string\") {\n      return value.length > opts.maxMetadataValueLength\n        ? `${value.slice(0, opts.maxMetadataValueLength)}…`\n        : value;\n    }\n    return value;\n  }\n  return prepareMetadataForDisk(\n    isRecord(value) ? value : { items: value },\n    opts,\n  );\n}\n\nexport function prepareOutcomeEventForDisk(\n  event: OutcomeObservedEvent,\n  opts: TraceSafetyOptions,\n): OutcomeObservedEvent {\n  const actual = boundPayload(event.actual, opts);\n  const evidence = boundPayload(event.evidence, opts);\n  const next: OutcomeObservedEvent = {\n    ...event,\n    ...(actual !== undefined ? { actual } : {}),\n    ...(evidence !== undefined ? { evidence } : {}),\n  };\n  if (\"actual\" in event && actual === undefined) {\n    const { actual: _a, ...rest } = next;\n    return rest;\n  }\n  if (\"evidence\" in event && evidence === undefined) {\n    const { evidence: _e, ...rest } = next;\n    return rest;\n  }\n  return next;\n}\n","import type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport type { TraceEvent } from \"../types.js\";\nimport {\n  OUTCOME_ATTRIBUTE_EXPECTATION_KEY,\n  OUTCOME_ATTRIBUTE_METHOD_KEY,\n  OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY,\n  OUTCOME_ATTRIBUTE_STATUS_KEY,\n  OUTCOME_LEGACY_EVENT,\n  type ObservedOutcome,\n  type ObservedOutcomeMethod,\n  type ObservedOutcomeStatus,\n  type ObservedOutcomeSummary,\n} from \"./types.js\";\nimport { parseObservedOutcomeStatus } from \"./validate.js\";\n\nfunction isOutcomeStatus(value: unknown): value is ObservedOutcomeStatus {\n  return (\n    value === \"passed\" ||\n    value === \"failed\" ||\n    value === \"unknown\" ||\n    value === \"skipped\"\n  );\n}\n\nfunction parseMethod(value: unknown): ObservedOutcomeMethod | undefined {\n  if (typeof value !== \"string\" || value.trim() === \"\") return undefined;\n  return value as ObservedOutcomeMethod;\n}\n\nfunction fromOutcomeObservedEvent(event: Extract<TraceEvent, { event: \"outcome_observed\" }>): ObservedOutcome {\n  return {\n    outcomeId: event.outcomeId,\n    runId: event.runId,\n    ...(event.parentId !== undefined ? { parentId: event.parentId } : {}),\n    name: event.name,\n    expectation: event.expectation,\n    status: event.status,\n    ...(event.method !== undefined ? { method: event.method } : {}),\n    ...(event.actual !== undefined ? { actual: event.actual } : {}),\n    ...(event.evidence !== undefined ? { evidence: event.evidence } : {}),\n    observedAt: event.observedAt,\n  };\n}\n\nfunction fromPersistedOutcome(event: PersistedInspectEvent): ObservedOutcome | undefined {\n  if (event.kind !== \"OUTCOME\") return undefined;\n  const attrs = event.attributes ?? {};\n  const statusRaw = attrs[OUTCOME_ATTRIBUTE_STATUS_KEY];\n  if (!isOutcomeStatus(statusRaw)) return undefined;\n  const expectation =\n    typeof attrs[OUTCOME_ATTRIBUTE_EXPECTATION_KEY] === \"string\"\n      ? attrs[OUTCOME_ATTRIBUTE_EXPECTATION_KEY]\n      : event.name;\n  const observedAtRaw = attrs[OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY];\n  const observedAt =\n    typeof observedAtRaw === \"string\"\n      ? Date.parse(observedAtRaw)\n      : typeof observedAtRaw === \"number\" && Number.isFinite(observedAtRaw)\n        ? observedAtRaw\n        : Date.parse(event.timestamp);\n  return {\n    outcomeId: event.eventId,\n    runId: event.runId,\n    ...(event.parentId !== undefined ? { parentId: event.parentId } : {}),\n    name: event.name,\n    expectation,\n    status: statusRaw,\n    ...(parseMethod(attrs[OUTCOME_ATTRIBUTE_METHOD_KEY]) !== undefined\n      ? { method: parseMethod(attrs[OUTCOME_ATTRIBUTE_METHOD_KEY]) }\n      : {}),\n    ...(event.outputSummary !== undefined ? { actual: event.outputSummary } : {}),\n    ...(attrs.evidence !== undefined ? { evidence: attrs.evidence } : {}),\n    observedAt: Number.isFinite(observedAt) ? observedAt : Date.parse(event.timestamp),\n  };\n}\n\nexport function extractOutcomesFromTraceEvents(events: readonly TraceEvent[]): ObservedOutcome[] {\n  const out: ObservedOutcome[] = [];\n  for (const event of events) {\n    if (event.event === OUTCOME_LEGACY_EVENT) {\n      out.push(fromOutcomeObservedEvent(event as Extract<TraceEvent, { event: \"outcome_observed\" }>));\n    }\n  }\n  return out.sort((a, b) => a.observedAt - b.observedAt || a.name.localeCompare(b.name));\n}\n\nexport function extractOutcomesFromPersistedEvents(\n  events: readonly PersistedInspectEvent[],\n): ObservedOutcome[] {\n  const out: ObservedOutcome[] = [];\n  for (const event of events) {\n    const outcome = fromPersistedOutcome(event);\n    if (outcome) out.push(outcome);\n  }\n  return out.sort((a, b) => a.observedAt - b.observedAt || a.name.localeCompare(b.name));\n}\n\nexport function summarizeObservedOutcomes(outcomes: readonly ObservedOutcome[]): ObservedOutcomeSummary {\n  const summary: ObservedOutcomeSummary = {\n    total: outcomes.length,\n    passed: 0,\n    failed: 0,\n    unknown: 0,\n    skipped: 0,\n    outcomes: [...outcomes],\n  };\n  for (const outcome of outcomes) {\n    summary[outcome.status] += 1;\n  }\n  return summary;\n}\n\nexport function outcomesMatchingStatus(\n  outcomes: readonly ObservedOutcome[],\n  statuses: readonly ObservedOutcomeStatus[],\n): ObservedOutcome[] {\n  const set = new Set(statuses);\n  return outcomes.filter((outcome) => set.has(outcome.status));\n}\n\nexport function parseObservationFilter(value: string | undefined): ObservedOutcomeStatus | undefined {\n  if (value === undefined || value.trim() === \"\") return undefined;\n  return parseObservedOutcomeStatus(value);\n}\n","import type { ObservedOutcome, ObservedOutcomeSummary } from \"./types.js\";\n\nfunction formatPayload(value: unknown): string {\n  if (value === undefined) return \"\";\n  try {\n    return JSON.stringify(value);\n  } catch {\n    return String(value);\n  }\n}\n\nexport function renderObservedOutcomesMarkdown(summary: ObservedOutcomeSummary): string {\n  if (summary.total === 0) {\n    return \"No observed outcomes recorded for this run.\";\n  }\n  const lines = [\n    `Total: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})`,\n    \"\",\n    \"| Name | Status | Expectation | Method |\",\n    \"| --- | --- | --- | --- |\",\n  ];\n  for (const outcome of summary.outcomes) {\n    lines.push(\n      `| ${outcome.name} | ${outcome.status} | ${outcome.expectation.replace(/\\|/g, \"\\\\|\")} | ${outcome.method ?? \"-\"} |`,\n    );\n  }\n  return lines.join(\"\\n\");\n}\n\nexport function renderObservedOutcomesText(summary: ObservedOutcomeSummary): string {\n  if (summary.total === 0) {\n    return \"No observed outcomes recorded for this run.\";\n  }\n  const lines = [\n    `Observed outcomes: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})`,\n  ];\n  for (const outcome of summary.outcomes) {\n    const evidence = formatPayload(outcome.evidence);\n    const suffix = evidence ? ` evidence=${evidence}` : \"\";\n    lines.push(\n      `- ${outcome.name} [${outcome.status}] ${outcome.expectation}${suffix}`,\n    );\n  }\n  return lines.join(\"\\n\");\n}\n\nexport function renderObservedOutcomesHtml(summary: ObservedOutcomeSummary): string {\n  if (summary.total === 0) {\n    return \"<p>No observed outcomes recorded for this run.</p>\";\n  }\n  const rows = summary.outcomes\n    .map((outcome: ObservedOutcome) => {\n      const esc = (v: string) =>\n        v.replaceAll(\"&\", \"&amp;\").replaceAll(\"<\", \"&lt;\").replaceAll(\">\", \"&gt;\");\n      return `<tr><td>${esc(outcome.name)}</td><td>${esc(outcome.status)}</td><td>${esc(outcome.expectation)}</td><td>${esc(outcome.method ?? \"-\")}</td></tr>`;\n    })\n    .join(\"\");\n  return `<p>Total: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})</p><table><thead><tr><th>Name</th><th>Status</th><th>Expectation</th><th>Method</th></tr></thead><tbody>${rows}</tbody></table>`;\n}\n","export type {\n  ObserveOutcomeOptions,\n  ObservedOutcome,\n  ObservedOutcomeMethod,\n  ObservedOutcomeStatus,\n  ObservedOutcomeSummary,\n} from \"./types.js\";\nexport {\n  OBSERVED_OUTCOME_METHODS,\n  OBSERVED_OUTCOME_STATUSES,\n  OUTCOME_ATTRIBUTE_EXPECTATION_KEY,\n  OUTCOME_ATTRIBUTE_METHOD_KEY,\n  OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY,\n  OUTCOME_ATTRIBUTE_STATUS_KEY,\n  OUTCOME_LEGACY_EVENT,\n} from \"./types.js\";\nexport {\n  extractOutcomesFromPersistedEvents,\n  extractOutcomesFromTraceEvents,\n  outcomesMatchingStatus,\n  parseObservationFilter,\n  summarizeObservedOutcomes,\n} from \"./extract.js\";\nexport {\n  normalizeObserveOutcomeInput,\n  parseObservedOutcomeStatus,\n  prepareOutcomeEventForDisk,\n} from \"./validate.js\";\nexport {\n  renderObservedOutcomesHtml,\n  renderObservedOutcomesMarkdown,\n  renderObservedOutcomesText,\n} from \"./render.js\";\n","import { createInspectorRuntime } from \"./inspector-runtime.js\";\nimport type { InspectorRuntime } from \"./inspector-runtime.js\";\nimport type { InspectKind } from \"./types/inspect-event.js\";\nimport type {\n  PersistedInspectError,\n  PersistedInspectEvent,\n} from \"./types/persisted-inspect-event.js\";\nimport type { RedactionProfile, StepMetadata, StepType } from \"./types.js\";\nimport {\n  normalizeObserveOutcomeInput,\n  type ObserveOutcomeOptions,\n} from \"./outcomes/index.js\";\nimport {\n  preparePersistedInspectEventForWrite,\n  resolveTraceSafetyOptions,\n  type TraceSafetyOptions,\n} from \"./trace-event-safety.js\";\nimport type { TraceWriter } from \"./writers/index.js\";\nimport {\n  createRunId,\n  createStepId,\n  getDefaultTraceDir,\n  truncateName,\n} from \"./utils.js\";\n\nconst INSPECTOR_PERSISTED_SCHEMA_VERSION =\n  \"1.0\" satisfies PersistedInspectEvent[\"schemaVersion\"];\n\nexport interface InspectorCaptureOptions {\n  onSuccess?: \"none\" | \"metadata-only\";\n  onError?: \"none\" | \"metadata-only\";\n}\n\nexport interface CreateInspectorOptions {\n  enabled?: boolean;\n  writer?: TraceWriter;\n  /**\n   * Context metadata only. Does not configure writer output; use\n   * `fileWriter({ dir })` or another explicit writer for persistence paths.\n   *\n   * @experimental\n   */\n  traceDir?: string;\n  /**\n   * Context metadata only for compatibility with existing terminal helpers.\n   * `createInspector()` does not print lifecycle output.\n   *\n   * @experimental\n   */\n  silent?: boolean;\n  metadata?: Record<string, unknown>;\n  redactionProfile?: RedactionProfile;\n  /**\n   * Metadata-only summaries for persisted run/step completion rows.\n   * This never stores raw return values, prompts, outputs, or thrown objects.\n   *\n   * @experimental\n   */\n  capture?: InspectorCaptureOptions;\n  traceSafety?: TraceSafetyOptions;\n}\n\nexport interface InspectorRunOptions {\n  runId?: string;\n  traceDir?: string;\n  silent?: boolean;\n  metadata?: Record<string, unknown>;\n}\n\nexport interface InspectorStepOptions {\n  type?: StepType;\n  metadata?: StepMetadata;\n}\n\nexport type InspectorObserveOptions = InspectorStepOptions;\n\nexport interface Inspector {\n  /**\n   * Low-level runtime access is retained for v1.6 compatibility. Prefer\n   * `getDiagnostics()` unless you need advanced runtime context primitives.\n   *\n   * @experimental\n   */\n  readonly runtime: InspectorRuntime;\n  run<T>(\n    name: string,\n    fn: () => T | Promise<T>,\n    options?: InspectorRunOptions,\n  ): Promise<T>;\n  step<T>(\n    name: string,\n    fn: () => T | Promise<T>,\n    options?: InspectorStepOptions,\n  ): Promise<T>;\n  tool<T>(\n    name: string,\n    fn: () => T | Promise<T>,\n    options?: InspectorStepOptions,\n  ): Promise<T>;\n  llm<T>(\n    name: string,\n    fn: () => T | Promise<T>,\n    options?: InspectorStepOptions,\n  ): Promise<T>;\n  observe<TFunction extends (...args: any[]) => any>(\n    name: string,\n    fn: TFunction,\n    options?: InspectorObserveOptions,\n  ): (...args: Parameters<TFunction>) => Promise<Awaited<ReturnType<TFunction>>>;\n  observeOutcome(name: string, options: ObserveOutcomeOptions): Promise<void>;\n  getDiagnostics(): ReturnType<InspectorRuntime[\"getDiagnostics\"]>;\n  flush(): Promise<void>;\n  close(): Promise<void>;\n}\n\nfunction normalizeName(name: unknown, fallback: string): string {\n  if (typeof name !== \"string\" || name.trim() === \"\") return fallback;\n  return truncateName(name.trim(), 100);\n}\n\nfunction nowIso(): string {\n  return new Date().toISOString();\n}\n\nfunction durationMs(startedAt: string, endedAt: string): number {\n  return Math.max(0, Date.parse(endedAt) - Date.parse(startedAt));\n}\n\nfunction mergeMetadata(\n  base: Record<string, unknown> | undefined,\n  override: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n  if (base === undefined && override === undefined) return undefined;\n  return {\n    ...(base ?? {}),\n    ...(override ?? {}),\n  };\n}\n\nconst SAFE_ERROR_CODE_MAX_LENGTH = 128;\nconst SAFE_ERROR_CODE_PATTERN = /^[A-Za-z0-9_.:-]+$/;\n\n/**\n * Normalize a thrown error's `code` or `status` into a bounded safe string.\n * Accepts finite numbers (e.g. HTTP 404) and short alphanumeric codes.\n * Omits objects, arrays, multiline/oversized values, and arbitrary properties.\n */\nfunction toSafeErrorCode(error: unknown): string | undefined {\n  if (typeof error !== \"object\" || error === null) {\n    return undefined;\n  }\n  const record = error as Record<string, unknown>;\n  const raw = record.code !== undefined ? record.code : record.status;\n  let candidate: string | undefined;\n  if (typeof raw === \"number\" && Number.isFinite(raw)) {\n    candidate = String(raw);\n  } else if (typeof raw === \"string\") {\n    candidate = raw.trim();\n  }\n  if (\n    candidate === undefined ||\n    candidate.length === 0 ||\n    candidate.length > SAFE_ERROR_CODE_MAX_LENGTH ||\n    !SAFE_ERROR_CODE_PATTERN.test(candidate)\n  ) {\n    return undefined;\n  }\n  return candidate;\n}\n\nfunction toPersistedError(error: unknown): PersistedInspectError {\n  if (error instanceof Error) {\n    const persisted: PersistedInspectError = {\n      name: error.name,\n      message: error.message,\n    };\n    const code = toSafeErrorCode(error);\n    if (code !== undefined) {\n      persisted.code = code;\n    }\n    return persisted;\n  }\n  if (typeof error === \"string\") {\n    return { message: error };\n  }\n  if (typeof error === \"object\" && error !== null) {\n    const record = error as Record<string, unknown>;\n    const message =\n      typeof record.message === \"string\" && record.message.length > 0\n        ? record.message\n        : \"Unknown error\";\n    const persisted: PersistedInspectError = { message };\n    if (typeof record.name === \"string\" && record.name.length > 0) {\n      persisted.name = record.name;\n    }\n    const code = toSafeErrorCode(error);\n    if (code !== undefined) {\n      persisted.code = code;\n    }\n    return persisted;\n  }\n  return { message: \"Unknown error\" };\n}\n\nfunction summarizeValue(value: unknown): Record<string, unknown> {\n  if (value === null) return { type: \"null\" };\n  if (Array.isArray(value)) return { type: \"array\", length: value.length };\n\n  if (typeof value === \"string\") return { type: \"string\", length: value.length };\n  if (typeof value === \"number\") {\n    return { type: \"number\", finite: Number.isFinite(value) };\n  }\n  if (typeof value === \"bigint\") return { type: \"bigint\" };\n  if (typeof value === \"boolean\") return { type: \"boolean\" };\n  if (typeof value === \"undefined\") return { type: \"undefined\" };\n  if (typeof value === \"symbol\") return { type: \"symbol\" };\n  if (typeof value === \"function\") {\n    return { type: \"function\", name: value.name || undefined };\n  }\n  if (typeof value === \"object\") {\n    const record = value as Record<string, unknown>;\n    let keyCount: number | undefined;\n    try {\n      keyCount = Object.keys(record).length;\n    } catch {\n      keyCount = undefined;\n    }\n    return {\n      type: \"object\",\n      constructorName: value?.constructor?.name,\n      ...(keyCount !== undefined ? { keyCount } : {}),\n    };\n  }\n  return { type: typeof value };\n}\n\nfunction summarizeCapturedError(error: unknown): Record<string, unknown> {\n  if (error instanceof Error) {\n    return { type: \"error\", name: error.name };\n  }\n  return summarizeValue(error);\n}\n\nfunction stepTypeToKind(type: StepType): InspectKind {\n  switch (type) {\n    case \"llm\":\n      return \"LLM\";\n    case \"tool\":\n      return \"TOOL\";\n    case \"decision\":\n      return \"DECISION\";\n    case \"run\":\n      return \"RUN\";\n    default:\n      return \"LOGIC\";\n  }\n}\n\nexport function createInspector(\n  options: CreateInspectorOptions = {},\n): Inspector {\n  const traceSafety =\n    options.traceSafety ??\n    resolveTraceSafetyOptions({\n      redactionProfile: options.redactionProfile,\n    });\n  const runtime = createInspectorRuntime({\n    enabled: options.enabled,\n    writer: options.writer,\n    traceSafety,\n  });\n\n  async function write(event: PersistedInspectEvent): Promise<void> {\n    const safe = preparePersistedInspectEventForWrite(event, traceSafety);\n    if (safe !== undefined) {\n      await runtime.write(safe);\n    }\n  }\n\n  async function run<T>(\n    name: string,\n    fn: () => T | Promise<T>,\n    runOptions: InspectorRunOptions = {},\n  ): Promise<T> {\n    if (typeof fn !== \"function\") {\n      throw new TypeError(\"inspector.run requires `fn` to be a function\");\n    }\n    if (options.enabled === false) {\n      return Promise.resolve(fn());\n    }\n\n    const runName = normalizeName(name, \"unnamed-run\");\n    const runId = runOptions.runId ?? createRunId();\n    const traceDir = runOptions.traceDir ?? options.traceDir ?? getDefaultTraceDir();\n    const metadata = mergeMetadata(options.metadata, runOptions.metadata);\n    const startedAt = nowIso();\n\n    return runtime.runWithContext(\n      {\n        runId,\n        runName,\n        traceDir,\n        silent: runOptions.silent ?? options.silent ?? true,\n        metadata,\n      },\n      async () => {\n        await write({\n          schemaVersion: INSPECTOR_PERSISTED_SCHEMA_VERSION,\n          eventId: `${runId}_started`,\n          runId,\n          kind: \"RUN\",\n          name: runName,\n          status: \"running\",\n          timestamp: startedAt,\n          startedAt,\n          confidence: \"explicit\",\n          source: { type: \"manual\", name: \"createInspector\" },\n          attributes: {\n            legacyEvent: \"run_started\",\n            ...(metadata !== undefined ? { metadata } : {}),\n          },\n        });\n\n        try {\n          const result = await Promise.resolve(fn());\n          const endedAt = nowIso();\n          await write({\n            schemaVersion: INSPECTOR_PERSISTED_SCHEMA_VERSION,\n            eventId: `${runId}_completed`,\n            runId,\n            kind: \"RUN\",\n            name: runName,\n            status: \"ok\",\n            timestamp: endedAt,\n            endedAt,\n            durationMs: durationMs(startedAt, endedAt),\n            confidence: \"explicit\",\n            source: { type: \"manual\", name: \"createInspector\" },\n            attributes: { legacyEvent: \"run_completed\" },\n            ...(options.capture?.onSuccess === \"metadata-only\"\n              ? { outputSummary: summarizeValue(result) }\n              : {}),\n          });\n          return result;\n        } catch (error) {\n          const endedAt = nowIso();\n          await write({\n            schemaVersion: INSPECTOR_PERSISTED_SCHEMA_VERSION,\n            eventId: `${runId}_completed`,\n            runId,\n            kind: \"RUN\",\n            name: runName,\n            status: \"error\",\n            timestamp: endedAt,\n            endedAt,\n            durationMs: durationMs(startedAt, endedAt),\n            confidence: \"explicit\",\n            source: { type: \"manual\", name: \"createInspector\" },\n            attributes: { legacyEvent: \"run_completed\" },\n            ...(options.capture?.onError === \"metadata-only\"\n              ? { outputSummary: summarizeCapturedError(error) }\n              : {}),\n            error: toPersistedError(error),\n          });\n          throw error;\n        }\n      },\n    );\n  }\n\n  async function step<T>(\n    name: string,\n    fn: () => T | Promise<T>,\n    stepOptions: InspectorStepOptions = {},\n  ): Promise<T> {\n    if (typeof fn !== \"function\") {\n      throw new TypeError(\"inspector.step requires `fn` to be a function\");\n    }\n    if (options.enabled === false || !runtime.getCurrentContext()) {\n      return Promise.resolve(fn());\n    }\n\n    const context = runtime.getCurrentContext()!;\n    const stepName = normalizeName(name, \"unnamed-step\");\n    const stepId = createStepId();\n    const parentId = runtime.getCurrentStepId();\n    const stepType = stepOptions.type ?? \"logic\";\n    const startedAt = nowIso();\n    const attributes = {\n      legacyEvent: \"step_started\",\n      stepId,\n      stepType,\n      ...(stepOptions.metadata !== undefined\n        ? { metadata: stepOptions.metadata }\n        : {}),\n    };\n\n    await write({\n      schemaVersion: INSPECTOR_PERSISTED_SCHEMA_VERSION,\n      eventId: `${stepId}_started`,\n      runId: context.runId,\n      ...(parentId !== undefined ? { parentId } : {}),\n      kind: stepTypeToKind(stepType),\n      name: stepName,\n      status: \"running\",\n      timestamp: startedAt,\n      startedAt,\n      confidence: \"explicit\",\n      source: { type: \"manual\", name: \"createInspector\" },\n      attributes,\n    });\n\n    return runtime.runWithStepContext(stepId, async () => {\n      try {\n        const result = await Promise.resolve(fn());\n        const endedAt = nowIso();\n        await write({\n          schemaVersion: INSPECTOR_PERSISTED_SCHEMA_VERSION,\n          eventId: `${stepId}_completed`,\n          runId: context.runId,\n          kind: stepTypeToKind(stepType),\n          name: stepName,\n          status: \"ok\",\n          timestamp: endedAt,\n          endedAt,\n          durationMs: durationMs(startedAt, endedAt),\n          confidence: \"explicit\",\n          source: { type: \"manual\", name: \"createInspector\" },\n          attributes: {\n            legacyEvent: \"step_completed\",\n            stepId,\n            stepType,\n          },\n          ...(options.capture?.onSuccess === \"metadata-only\"\n            ? { outputSummary: summarizeValue(result) }\n            : {}),\n        });\n        return result;\n      } catch (error) {\n        const endedAt = nowIso();\n        await write({\n          schemaVersion: INSPECTOR_PERSISTED_SCHEMA_VERSION,\n          eventId: `${stepId}_completed`,\n          runId: context.runId,\n          kind: stepTypeToKind(stepType),\n          name: stepName,\n          status: \"error\",\n          timestamp: endedAt,\n          endedAt,\n          durationMs: durationMs(startedAt, endedAt),\n          confidence: \"explicit\",\n          source: { type: \"manual\", name: \"createInspector\" },\n          attributes: {\n            legacyEvent: \"step_completed\",\n            stepId,\n            stepType,\n          },\n          ...(options.capture?.onError === \"metadata-only\"\n            ? { outputSummary: summarizeCapturedError(error) }\n            : {}),\n          error: toPersistedError(error),\n        });\n        throw error;\n      }\n    });\n  }\n\n  const inspector: Inspector = {\n    runtime,\n    run,\n    step,\n    tool(name, fn, toolOptions) {\n      const toolName = normalizeName(name, \"unknown-tool\");\n      return step(`tool:${toolName}`, fn, {\n        ...toolOptions,\n        type: \"tool\",\n        metadata: {\n          ...(toolOptions?.metadata ?? {}),\n          toolName,\n        },\n      });\n    },\n    llm(name, fn, llmOptions) {\n      const model = normalizeName(name, \"unknown-model\");\n      return step(`llm:${model}`, fn, {\n        ...llmOptions,\n        type: \"llm\",\n        metadata: {\n          ...(llmOptions?.metadata ?? {}),\n          model,\n        },\n      });\n    },\n    observe(name, fn, observeOptions) {\n      return async (...args) =>\n        step(name, () => Promise.resolve(fn(...args)), observeOptions);\n    },\n    async observeOutcome(name, outcomeOptions) {\n      const ctx = runtime.getCurrentContext();\n      if (!ctx) return;\n      let normalized;\n      try {\n        normalized = normalizeObserveOutcomeInput(name, outcomeOptions);\n      } catch {\n        return;\n      }\n      const outcomeId = createStepId();\n      const parentId = runtime.getCurrentStepId();\n      await write({\n        schemaVersion: INSPECTOR_PERSISTED_SCHEMA_VERSION,\n        eventId: outcomeId,\n        runId: ctx.runId,\n        ...(parentId !== undefined ? { parentId } : {}),\n        kind: \"OUTCOME\",\n        name: normalized.name,\n        status: normalized.status === \"failed\" ? \"error\" : \"ok\",\n        timestamp: new Date(normalized.observedAt).toISOString(),\n        confidence: \"explicit\",\n        source: { type: \"manual\", name: \"createInspector\" },\n        attributes: {\n          legacyEvent: \"outcome_observed\",\n          outcomeId,\n          outcomeStatus: normalized.status,\n          expectation: normalized.expectation,\n          ...(normalized.method !== undefined ? { method: normalized.method } : {}),\n          ...(normalized.actual !== undefined ? { actual: normalized.actual } : {}),\n          ...(normalized.evidence !== undefined ? { evidence: normalized.evidence } : {}),\n          observedAt: new Date(normalized.observedAt).toISOString(),\n        },\n        ...(normalized.actual !== undefined ? { outputSummary: normalized.actual } : {}),\n      });\n    },\n    getDiagnostics() {\n      return runtime.getDiagnostics();\n    },\n    flush() {\n      return runtime.flush();\n    },\n    close() {\n      return runtime.close();\n    },\n  };\n\n  return inspector;\n}\n","/**\n * Shared bounded-preview capture used by the official framework adapters.\n *\n * Adapters own framework field selection; this module owns the parts that must\n * behave identically everywhere: safe serialization, `maxPreviewChars` bounds,\n * key/profile redaction before the value reaches an event, and stable\n * diagnostics when a requested field cannot be sourced.\n *\n * Previews are bounded and key-redacted, not sanitized. Review exports before\n * sharing.\n *\n * @experimental Adapter-facing helper; shape may change while the official\n * adapters remain experimental.\n */\nimport { Redactor } from \"../logs/redactor.js\";\nimport { resolveRedactionProfile } from \"../redaction-profiles.js\";\nimport type { RedactionRule } from \"../types/log-config.js\";\nimport type { RedactionProfile } from \"../types.js\";\n\n/** Default bound for adapter preview fields (characters). */\nexport const DEFAULT_ADAPTER_MAX_PREVIEW_CHARS = 200;\n\n/**\n * Capture policy shared by the official adapters.\n *\n * `metadata-only` is the default everywhere and never persists framework\n * payload content. `preview` opts into bounded, redacted previews.\n */\nexport type AdapterCaptureMode = \"metadata-only\" | \"preview\";\n\n/** Stable diagnostic codes emitted by shared preview capture. */\nexport const ADAPTER_CAPTURE_DIAGNOSTIC_CODES = [\n  \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n  \"AI_CAPTURE_PREVIEW_TRUNCATED\",\n  \"AI_CAPTURE_PREVIEW_REDACTED\",\n] as const;\n\nexport type AdapterCaptureDiagnosticCode =\n  (typeof ADAPTER_CAPTURE_DIAGNOSTIC_CODES)[number];\n\n/** One bounded diagnostic. Never contains preview content or filesystem paths. */\nexport interface AdapterCaptureDiagnostic {\n  readonly code: AdapterCaptureDiagnosticCode;\n  readonly message: string;\n  /** Persisted attribute name the diagnostic refers to (e.g. `inputPreview`). */\n  readonly field: string;\n  readonly capture: AdapterCaptureMode;\n}\n\n/** Optional consumer hook for adapter capture diagnostics. */\nexport type AdapterDiagnosticListener = (\n  diagnostic: AdapterCaptureDiagnostic,\n) => void;\n\n/** Preview capture options accepted by every official adapter. */\nexport interface AdapterPreviewCaptureOptions {\n  /** Defaults to `metadata-only`. */\n  capture?: AdapterCaptureMode;\n  /** Redaction profile applied to preview values before they reach an event. */\n  redactionProfile?: RedactionProfile;\n  /** Upper bound for each serialized preview field. */\n  maxPreviewChars?: number;\n  /** Extra adapter-supplied redaction rules. */\n  redact?: RedactionRule[];\n  /** Receives bounded capture diagnostics. Listener failures are swallowed. */\n  onDiagnostic?: AdapterDiagnosticListener;\n}\n\n/** Bounded capture counters for adapter `getDiagnostics()` surfaces. */\nexport interface AdapterCaptureDiagnostics {\n  readonly capture: AdapterCaptureMode;\n  readonly redactionProfile: RedactionProfile;\n  readonly maxPreviewChars: number;\n  readonly previewFieldsCaptured: number;\n  readonly previewFieldsUnavailable: number;\n  readonly previewFieldsTruncated: number;\n  readonly previewFieldsRedacted: number;\n  readonly lastDiagnosticCode?: AdapterCaptureDiagnosticCode;\n  readonly lastDiagnosticMessage?: string;\n}\n\n/** Shared preview capture handle owned by one adapter instance. */\nexport interface AdapterPreviewCapture {\n  /** Effective capture mode (adapters no longer downgrade `preview`). */\n  readonly capture: AdapterCaptureMode;\n  readonly previewEnabled: boolean;\n  readonly maxPreviewChars: number;\n  readonly redactionProfile: RedactionProfile;\n  /** Normalizes a logical field to a persisted `*Preview` attribute name. */\n  previewFieldName(field: string): string;\n  /**\n   * Returns a bounded, redacted preview string, or `undefined` when capture is\n   * metadata-only or the field could not be sourced.\n   */\n  capturePreviewField(field: string, value: unknown): string | undefined;\n  /** Writes every available preview onto `target` and returns it. */\n  applyPreviewFields(\n    target: Record<string, unknown>,\n    fields: Record<string, unknown>,\n  ): Record<string, unknown>;\n  getDiagnostics(): AdapterCaptureDiagnostics;\n}\n\n/**\n * JSON-ish serialization that tolerates cycles, bigints, and throwing getters,\n * bounded to `maxChars`. Returns `undefined` for a non-positive bound or a\n * value JSON cannot represent.\n */\nexport function serializeAdapterPreview(\n  value: unknown,\n  maxChars: number,\n): string | undefined {\n  if (!Number.isFinite(maxChars) || maxChars <= 0) return undefined;\n  const serialized = serializePreviewValue(value);\n  if (serialized === undefined) return undefined;\n  return boundPreviewString(serialized, Math.floor(maxChars)).text;\n}\n\n/**\n * Resolves the effective preview bound. Profile caps apply so a `share` or\n * `strict` profile cannot be widened by a larger adapter option.\n */\nexport function resolveAdapterMaxPreviewChars(\n  value: unknown,\n  profile: RedactionProfile = \"local\",\n): number {\n  const requested =\n    typeof value === \"number\" && Number.isFinite(value) && value >= 0\n      ? Math.floor(value)\n      : DEFAULT_ADAPTER_MAX_PREVIEW_CHARS;\n  const cap = resolveRedactionProfile(profile).maxPreviewLengthCap;\n  return cap === undefined ? requested : Math.min(requested, cap);\n}\n\n/** Creates the shared preview capture handle for one adapter instance. */\nexport function createAdapterPreviewCapture(\n  options: AdapterPreviewCaptureOptions = {},\n): AdapterPreviewCapture {\n  const capture: AdapterCaptureMode =\n    options.capture === \"preview\" ? \"preview\" : \"metadata-only\";\n  const redactionProfile: RedactionProfile = options.redactionProfile ?? \"local\";\n  const maxPreviewChars = resolveAdapterMaxPreviewChars(\n    options.maxPreviewChars,\n    redactionProfile,\n  );\n  const redactor = new Redactor({\n    rules: options.redact,\n    extraKeys: resolveRedactionProfile(redactionProfile).extraKeys,\n  });\n\n  const counters = {\n    previewFieldsCaptured: 0,\n    previewFieldsUnavailable: 0,\n    previewFieldsTruncated: 0,\n    previewFieldsRedacted: 0,\n  };\n  let lastDiagnosticCode: AdapterCaptureDiagnosticCode | undefined;\n  let lastDiagnosticMessage: string | undefined;\n\n  const emit = (\n    code: AdapterCaptureDiagnosticCode,\n    field: string,\n    message: string,\n  ): void => {\n    lastDiagnosticCode = code;\n    lastDiagnosticMessage = `${code}: ${message}`;\n    try {\n      options.onDiagnostic?.({ code, message, field, capture });\n    } catch {\n      // Consumer diagnostics must never throw into instrumented code.\n    }\n  };\n\n  const previewFieldName = (field: string): string =>\n    /preview$/i.test(field) ? field : `${field}Preview`;\n\n  const capturePreviewField = (\n    field: string,\n    value: unknown,\n  ): string | undefined => {\n    if (capture !== \"preview\" || maxPreviewChars <= 0) return undefined;\n    const name = previewFieldName(field);\n\n    try {\n      if (value === undefined) {\n        counters.previewFieldsUnavailable += 1;\n        emit(\n          \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n          name,\n          `${name} was requested but this framework callback did not expose the field`,\n        );\n        return undefined;\n      }\n\n      // Normalize before redaction so cycles and hostile getters cannot reach\n      // the key-based redactor, which walks plain structures only.\n      const plain = toPlainPreviewValue(value);\n      if (plain === UNSERIALIZABLE) {\n        counters.previewFieldsUnavailable += 1;\n        emit(\n          \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n          name,\n          `${name} could not be serialized into a bounded preview`,\n        );\n        return undefined;\n      }\n\n      const serialized = serializePreviewValue(redactor.redactValue(name, plain));\n      if (serialized === undefined) {\n        counters.previewFieldsUnavailable += 1;\n        emit(\n          \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n          name,\n          `${name} could not be serialized into a bounded preview`,\n        );\n        return undefined;\n      }\n\n      if (containsRedactionMarker(serialized)) {\n        counters.previewFieldsRedacted += 1;\n        emit(\n          \"AI_CAPTURE_PREVIEW_REDACTED\",\n          name,\n          `${name} matched the ${redactionProfile} redaction profile before persistence`,\n        );\n      }\n\n      const bounded = boundPreviewString(serialized, maxPreviewChars);\n      if (bounded.truncated) {\n        counters.previewFieldsTruncated += 1;\n        emit(\n          \"AI_CAPTURE_PREVIEW_TRUNCATED\",\n          name,\n          `${name} was truncated to maxPreviewChars=${maxPreviewChars}`,\n        );\n      }\n\n      counters.previewFieldsCaptured += 1;\n      return bounded.text;\n    } catch {\n      counters.previewFieldsUnavailable += 1;\n      emit(\n        \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n        name,\n        `${name} could not be read from this framework callback`,\n      );\n      return undefined;\n    }\n  };\n\n  return {\n    capture,\n    previewEnabled: capture === \"preview\",\n    maxPreviewChars,\n    redactionProfile,\n    previewFieldName,\n    capturePreviewField,\n    applyPreviewFields(target, fields) {\n      if (capture !== \"preview\") return target;\n      for (const [field, value] of Object.entries(fields)) {\n        const preview = capturePreviewField(field, value);\n        if (preview !== undefined) target[previewFieldName(field)] = preview;\n      }\n      return target;\n    },\n    getDiagnostics() {\n      return {\n        capture,\n        redactionProfile,\n        maxPreviewChars,\n        ...counters,\n        ...(lastDiagnosticCode === undefined ? {} : { lastDiagnosticCode }),\n        ...(lastDiagnosticMessage === undefined\n          ? {}\n          : { lastDiagnosticMessage }),\n      };\n    },\n  };\n}\n\n/** Sentinel for a value JSON cannot represent at all. */\nconst UNSERIALIZABLE = Symbol(\"agent-inspect.preview.unserializable\");\n\nfunction toPlainPreviewValue(value: unknown): unknown {\n  const json = serializePreviewValue(value);\n  if (json === undefined) return UNSERIALIZABLE;\n  try {\n    return JSON.parse(json) as unknown;\n  } catch {\n    // `serializePreviewValue` fell back to `String(value)`.\n    return json;\n  }\n}\n\nfunction containsRedactionMarker(serialized: string): boolean {\n  return serialized.includes(\"[REDACTED]\") || serialized.includes(\"[HASH:\");\n}\n\nfunction serializePreviewValue(value: unknown): string | undefined {\n  try {\n    const seen = new WeakSet<object>();\n    return JSON.stringify(value, (_key, entry) => {\n      if (typeof entry === \"bigint\") return entry.toString();\n      if (typeof entry === \"function\" || typeof entry === \"symbol\") {\n        return undefined;\n      }\n      if (typeof entry === \"object\" && entry !== null) {\n        if (seen.has(entry)) return \"[Circular]\";\n        seen.add(entry);\n      }\n      return entry;\n    });\n  } catch {\n    try {\n      return String(value);\n    } catch {\n      return undefined;\n    }\n  }\n}\n\nfunction boundPreviewString(\n  value: string,\n  maxChars: number,\n): { text: string; truncated: boolean } {\n  if (value.length <= maxChars) return { text: value, truncated: false };\n  return { text: `${value.slice(0, maxChars)}…`, truncated: true };\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","import chalk from \"chalk\";\n\nimport { isSilentContext } from \"./context.js\";\nimport type { ErrorInfo, RunStatus, StepStatus } from \"./types.js\";\nimport { formatDuration, truncateName } from \"./utils.js\";\n\n/** Two spaces per nesting level in terminal output. */\nexport const TERMINAL_INDENT = \"  \";\n\n/** Max display length for names in terminal output. */\nexport const MAX_TERMINAL_NAME_LENGTH = 80;\n\n/** Max nesting depth used for indentation (prevents huge indents). */\nexport const MAX_TERMINAL_DEPTH = 10;\n\nfunction normalizeDepth(depth: number): number {\n  if (!Number.isFinite(depth) || depth < 0) {\n    return 0;\n  }\n  return Math.min(Math.floor(depth), MAX_TERMINAL_DEPTH);\n}\n\nfunction safePrint(line = \"\"): void {\n  try {\n    console.log(line);\n  } catch {\n    /* never break callers */\n  }\n}\n\n/** Indentation string for a nesting depth (capped, never negative). */\nexport function getIndent(depth: number): string {\n  return TERMINAL_INDENT.repeat(normalizeDepth(depth));\n}\n\n/** Truncates a display name for terminal use; invalid input becomes `\"unnamed\"`. */\nexport function formatTerminalName(name: string): string {\n  if (typeof name !== \"string\" || name.trim() === \"\") {\n    return \"unnamed\";\n  }\n  return truncateName(name, MAX_TERMINAL_NAME_LENGTH);\n}\n\nfunction getStatusIcon(status: StepStatus | RunStatus): string {\n  if (status === \"success\") return chalk.green(\"✔\");\n  if (status === \"error\") return chalk.red(\"✖\");\n  return chalk.yellow(\"⏳\");\n}\n\n/** Renders a single step line (colored); does not consult silent mode. */\nexport function renderStepLine(\n  name: string,\n  durationMs: number | undefined,\n  status: StepStatus,\n  depth?: number,\n): string {\n  try {\n    const nm = formatTerminalName(name);\n    const ind = getIndent(depth ?? 0);\n    if (status === \"running\" && durationMs === undefined) {\n      return `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n    }\n    const hasDur =\n      durationMs !== undefined && Number.isFinite(durationMs as number);\n    const dur = hasDur ? formatDuration(durationMs as number) : undefined;\n    if (status === \"running\") {\n      return dur !== undefined\n        ? `${ind}${chalk.yellow(\"⏳\")} ${nm} (${dur})`\n        : `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n    }\n    if (!hasDur || dur === undefined) {\n      return `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n    }\n    if (status === \"success\") {\n      return `${ind}${getStatusIcon(\"success\")} ${nm} (${dur})`;\n    }\n    return `${ind}${getStatusIcon(\"error\")} ${nm} (${dur})`;\n  } catch {\n    return \"\";\n  }\n}\n\n/** Renders an error summary line (no stack in MVP). */\nexport function renderErrorLine(error: ErrorInfo, depth?: number): string {\n  try {\n    const msg =\n      typeof error.message === \"string\" ? error.message : \"\";\n    const ind = getIndent((depth ?? 0) + 1);\n    return `${ind}Error: ${msg}`;\n  } catch {\n    return \"\";\n  }\n}\n\n/** Plain-text run summary lines (no chalk) for stable testing and CLI reuse. */\nexport function renderRunSummary(\n  durationMs: number,\n  status: RunStatus,\n  traceFilePath?: string,\n): string[] {\n  try {\n    const dur = Number.isFinite(durationMs)\n      ? formatDuration(durationMs)\n      : formatDuration(0);\n    const head =\n      status === \"error\" ? `Failed in ${dur}` : `Completed in ${dur}`;\n    const lines = [head];\n    if (traceFilePath !== undefined && traceFilePath.trim() !== \"\") {\n      lines.push(`Trace: ${traceFilePath}`);\n    }\n    return lines;\n  } catch {\n    return [];\n  }\n}\n\n/** Prints run header with icon and dim run id. */\nexport function printRunStart(runId: string, name: string): void {\n  if (isSilentContext()) return;\n  try {\n    safePrint(\"\");\n    const header = `${chalk.cyan.bold(\"🔍 AgentInspect:\")} ${formatTerminalName(name)} ${chalk.dim(`(${runId})`)}`;\n    safePrint(header);\n  } catch {\n    /* noop */\n  }\n}\n\n/** Prints a running step line. */\nexport function printStepStart(name: string, depth = 0): void {\n  if (isSilentContext()) return;\n  try {\n    safePrint(renderStepLine(name, undefined, \"running\", depth));\n  } catch {\n    /* noop */\n  }\n}\n\n/** Prints a completed step line with duration and status icon. */\nexport function printStepComplete(\n  name: string,\n  durationMs: number,\n  status: StepStatus,\n  depth = 0,\n): void {\n  if (isSilentContext()) return;\n  try {\n    safePrint(renderStepLine(name, durationMs, status, depth));\n  } catch {\n    /* noop */\n  }\n}\n\n/** Prints a structured error line (message only, no stack). */\nexport function printError(error: ErrorInfo, depth = 0): void {\n  if (isSilentContext()) return;\n  try {\n    safePrint(renderErrorLine(error, depth));\n  } catch {\n    /* noop */\n  }\n}\n\n/** Prints run completion summary and optional trace path. */\nexport function printRunComplete(\n  _name: string,\n  _runId: string,\n  durationMs: number,\n  status: RunStatus,\n  traceFilePath?: string,\n): void {\n  if (isSilentContext()) return;\n  try {\n    const lines = renderRunSummary(durationMs, status, traceFilePath);\n    for (let i = 0; i < lines.length; i++) {\n      const line = lines[i]!;\n      if (i === 0) {\n        const color =\n          status === \"error\"\n            ? chalk.red\n            : status === \"running\"\n              ? chalk.yellow\n              : chalk.green;\n        safePrint(color(line));\n      } else {\n        safePrint(chalk.dim(line));\n      }\n    }\n  } catch {\n    /* noop */\n  }\n}\n\n/** Prints which step failed. */\nexport function printFailedAt(stepName: string): void {\n  if (isSilentContext()) return;\n  try {\n    safePrint(`Failed at: ${formatTerminalName(stepName)}`);\n  } catch {\n    /* noop */\n  }\n}\n","import type { Stats } from \"node:fs\";\nimport { readdir, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { getDefaultTraceDir } from \"./utils.js\";\n\nexport interface TraceDirectoryOptions {\n  dir?: string;\n}\n\nexport function resolveTraceDir(options: TraceDirectoryOptions = {}): string {\n  if (typeof options.dir === \"string\" && options.dir.trim() !== \"\") {\n    return options.dir.trim();\n  }\n  const envDir = process.env.AGENT_INSPECT_TRACE_DIR;\n  if (typeof envDir === \"string\" && envDir.trim() !== \"\") {\n    return envDir.trim();\n  }\n  return getDefaultTraceDir();\n}\n\nexport class TraceDirectory {\n  readonly #dir: string;\n\n  constructor(options: TraceDirectoryOptions = {}) {\n    this.#dir = resolveTraceDir(options);\n  }\n\n  getPath(filename?: string): string {\n    return filename ? path.join(this.#dir, filename) : this.#dir;\n  }\n\n  async list(): Promise<string[]> {\n    try {\n      const files = await readdir(this.#dir);\n      return files.filter((f) => f.endsWith(\".jsonl\"));\n    } catch (e) {\n      if (e && typeof e === \"object\" && \"code\" in e && e.code === \"ENOENT\") {\n        return [];\n      }\n      throw e;\n    }\n  }\n\n  async getFileStats(filename: string): Promise<Stats> {\n    return await stat(this.getPath(filename));\n  }\n}\n\n","import { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type {\n  RunCompletedEvent,\n  RunStartedEvent,\n  StepCompletedEvent,\n  StepStartedEvent,\n  TraceEvent,\n  TraceMetadata,\n  TraceMetadataStatus,\n  RunSummary,\n  StepType,\n  StepStatus,\n} from \"./types.js\";\nimport { parseTraceJsonl } from \"./read-trace.js\";\n\nfunction isFiniteNumber(v: unknown): v is number {\n  return typeof v === \"number\" && Number.isFinite(v);\n}\n\nfunction parseIsoToMs(value: string | undefined): number | undefined {\n  if (value === undefined) return undefined;\n  const parsed = Date.parse(value);\n  return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nexport async function extractMetadata(\n  filePath: string,\n  _quickScan?: boolean,\n): Promise<TraceMetadata> {\n  const stats = await stat(filePath);\n\n  let runIdFromFile = path.basename(filePath);\n  if (runIdFromFile.endsWith(\".jsonl\")) {\n    runIdFromFile = runIdFromFile.slice(0, -\".jsonl\".length);\n  }\n\n  const raw = await readFile(filePath, \"utf-8\");\n  const parsedTrace = parseTraceJsonl(raw, { warnings: false });\n\n  let runId: string | undefined;\n  let name: string | undefined;\n  let startedAt: number | undefined;\n  let endedAt: number | undefined;\n  let explicitDurationMs: number | undefined;\n\n  let hasRunStarted = false;\n  let hasRunCompleted = false;\n  let runCompletedStatus: \"success\" | \"error\" | undefined;\n  let anyStepError = false;\n  const anyKnownEvent = parsedTrace.sourceEventCount > 0;\n  let persistedStatus: TraceMetadataStatus | undefined;\n\n  const persistedRun = parsedTrace.persisted.find(\n    (event) => event.kind === \"RUN\",\n  );\n  if (persistedRun) {\n    runId = persistedRun.runId;\n    if (persistedRun.name.trim() !== \"\") {\n      name = persistedRun.name;\n    }\n    startedAt =\n      parseIsoToMs(persistedRun.startedAt) ??\n      parseIsoToMs(persistedRun.timestamp);\n    endedAt = parseIsoToMs(persistedRun.endedAt);\n    if (isFiniteNumber(persistedRun.durationMs)) {\n      explicitDurationMs = persistedRun.durationMs;\n      if (endedAt === undefined && startedAt !== undefined) {\n        endedAt = startedAt + persistedRun.durationMs;\n      }\n    }\n    if (persistedRun.status === \"ok\") persistedStatus = \"success\";\n    else if (persistedRun.status === \"error\") persistedStatus = \"error\";\n    else if (persistedRun.status === \"running\") persistedStatus = \"running\";\n    else if (persistedRun.status === \"unknown\") persistedStatus = \"unknown\";\n  } else {\n    runId = parsedTrace.persisted[0]?.runId;\n  }\n\n  for (const e of parsedTrace.events) {\n    if (\n      runId === undefined &&\n      typeof (e as { runId?: unknown }).runId === \"string\"\n    ) {\n      runId = (e as { runId: string }).runId;\n    }\n\n    if (e.event === \"run_started\") {\n      hasRunStarted = true;\n      const rs = e as RunStartedEvent;\n      if (typeof rs.name === \"string\" && rs.name.trim() !== \"\") {\n        name = rs.name;\n      }\n      if (isFiniteNumber(rs.startTime)) {\n        startedAt = rs.startTime;\n      } else if (isFiniteNumber(rs.timestamp)) {\n        startedAt = rs.timestamp;\n      }\n    }\n\n    if (e.event === \"run_completed\") {\n      hasRunCompleted = true;\n      const rc = e as RunCompletedEvent;\n      runCompletedStatus = rc.status;\n      if (isFiniteNumber(rc.endTime)) endedAt = rc.endTime;\n      else if (isFiniteNumber(rc.timestamp)) endedAt = rc.timestamp;\n      if (isFiniteNumber(rc.durationMs)) explicitDurationMs = rc.durationMs;\n    }\n\n    if (e.event === \"step_completed\") {\n      const sc = e as StepCompletedEvent;\n      if (sc.status === \"error\") {\n        anyStepError = true;\n      }\n    }\n  }\n\n  const resolvedRunId = runId ?? runIdFromFile;\n\n  let status: TraceMetadataStatus = \"unknown\";\n  if (\n    hasRunCompleted &&\n    (runCompletedStatus === \"success\" || runCompletedStatus === \"error\")\n  ) {\n    status = runCompletedStatus;\n  } else if (anyStepError) {\n    // If run_completed is missing, but at least one step failed, treat as error.\n    status = \"error\";\n  } else if (persistedStatus !== undefined) {\n    status = persistedStatus;\n  } else if (hasRunStarted && !hasRunCompleted) {\n    status = \"running\";\n  } else if (anyKnownEvent) {\n    status = \"unknown\";\n  } else {\n    status = \"unknown\";\n  }\n\n  const durationMs =\n    explicitDurationMs ??\n    (startedAt !== undefined &&\n    endedAt !== undefined &&\n    Number.isFinite(startedAt) &&\n    Number.isFinite(endedAt) &&\n    endedAt >= startedAt\n      ? endedAt - startedAt\n      : undefined);\n\n  return {\n    runId: resolvedRunId,\n    name,\n    status,\n    startedAt,\n    endedAt,\n    durationMs,\n    eventCount: parsedTrace.sourceEventCount,\n    filePath,\n    fileSize: stats.size,\n    createdAt: stats.birthtime,\n  };\n}\n\ntype StepAgg = {\n  type: StepType;\n  name: string;\n  status: StepStatus;\n  durationMs?: number;\n  parentId?: string;\n  tokensInput?: number;\n  tokensOutput?: number;\n  tokensTotal?: number;\n  tokensCached?: number;\n  tokensCacheWrite?: number;\n  tokensReasoning?: number;\n};\n\nconst ROOT_STEP_DEPTH = 0;\nconst MAX_RUN_SUMMARY_DEPTH = 1000;\n\nfunction isNonNegativeFiniteNumber(value: unknown): value is number {\n  return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nfunction resolveParentStepId(\n  step: StepAgg,\n  steps: ReadonlyMap<string, StepAgg>,\n): string | undefined {\n  const parentId = step.parentId;\n  if (typeof parentId !== \"string\" || parentId.trim() === \"\") {\n    return undefined;\n  }\n\n  return steps.has(parentId) ? parentId : undefined;\n}\n\n// Resolve ancestry iteratively so malformed cycles and deeply nested\n// valid traces cannot overflow the JavaScript call stack.\nfunction computeStepDepth(\n  stepId: string,\n  steps: ReadonlyMap<string, StepAgg>,\n  depthCache: Map<string, number>,\n): number {\n  const cached = depthCache.get(stepId);\n  if (cached !== undefined) return cached;\n\n  const ancestry: string[] = [];\n  const ancestryIndexes = new Map<string, number>();\n  let currentStepId = stepId;\n  let resolvedDepth: number | undefined;\n\n  while (resolvedDepth === undefined) {\n    const cachedDepth = depthCache.get(currentStepId);\n    if (cachedDepth !== undefined) {\n      resolvedDepth = cachedDepth;\n      continue;\n    }\n\n    const cycleStart = ancestryIndexes.get(currentStepId);\n    if (cycleStart !== undefined) {\n      const cycleStepIds = ancestry.splice(cycleStart);\n      for (const cycleStepId of cycleStepIds) {\n        depthCache.set(cycleStepId, ROOT_STEP_DEPTH);\n      }\n      resolvedDepth = ROOT_STEP_DEPTH;\n      continue;\n    }\n\n    const currentStep = steps.get(currentStepId);\n    if (!currentStep) {\n      resolvedDepth = ROOT_STEP_DEPTH;\n      continue;\n    }\n\n    ancestryIndexes.set(currentStepId, ancestry.length);\n    ancestry.push(currentStepId);\n\n    const parentStepId = resolveParentStepId(currentStep, steps);\n    if (parentStepId === undefined) {\n      ancestry.pop();\n      depthCache.set(currentStepId, ROOT_STEP_DEPTH);\n      resolvedDepth = ROOT_STEP_DEPTH;\n      continue;\n    }\n\n    currentStepId = parentStepId;\n  }\n\n  // Depth is parent depth + 1. Cap at a sane limit after cycles are resolved.\n  ancestry.reverse();\n  for (const ancestorStepId of ancestry) {\n    resolvedDepth = Math.min(MAX_RUN_SUMMARY_DEPTH, resolvedDepth + 1);\n    depthCache.set(ancestorStepId, resolvedDepth);\n  }\n\n  return depthCache.get(stepId) ?? ROOT_STEP_DEPTH;\n}\n\nexport function buildRunSummary(events: TraceEvent[]): RunSummary {\n  const started = events.find(\n    (e): e is RunStartedEvent => e.event === \"run_started\",\n  );\n  const completed = events.filter(\n    (e): e is RunCompletedEvent => e.event === \"run_completed\",\n  );\n  const lastCompleted = completed[completed.length - 1];\n\n  const runId = started?.runId ?? events.find((e: any) => typeof e.runId === \"string\")?.runId ?? \"unknown-run\";\n\n  const name =\n    typeof started?.name === \"string\" && started.name.trim() !== \"\"\n      ? started.name\n      : undefined;\n\n  const status: TraceMetadataStatus = lastCompleted\n    ? lastCompleted.status\n    : started\n      ? \"running\"\n      : \"unknown\";\n\n  const durationMs =\n    lastCompleted && isFiniteNumber(lastCompleted.durationMs)\n      ? lastCompleted.durationMs\n      : undefined;\n\n  const startedAt =\n    started && isFiniteNumber(started.startTime)\n      ? started.startTime\n      : undefined;\n\n  const steps = new Map<string, StepAgg>();\n\n  for (const e of events) {\n    if (e.event === \"step_started\") {\n      const s = e as StepStartedEvent;\n      steps.set(s.stepId, {\n        type: s.type,\n        name: s.name,\n        status: \"running\",\n        parentId: s.parentId,\n        tokensInput:\n          isNonNegativeFiniteNumber(s.metadata?.tokens?.input)\n            ? s.metadata.tokens.input\n            : undefined,\n        tokensOutput:\n          isNonNegativeFiniteNumber(s.metadata?.tokens?.output)\n            ? s.metadata.tokens.output\n            : undefined,\n        tokensTotal: isNonNegativeFiniteNumber(s.metadata?.tokens?.total)\n          ? s.metadata.tokens.total\n          : undefined,\n        tokensCached: isNonNegativeFiniteNumber(s.metadata?.tokens?.cached)\n          ? s.metadata.tokens.cached\n          : undefined,\n        tokensCacheWrite: isNonNegativeFiniteNumber(\n          s.metadata?.tokens?.cacheWrite,\n        )\n          ? s.metadata.tokens.cacheWrite\n          : undefined,\n        tokensReasoning: isNonNegativeFiniteNumber(\n          s.metadata?.tokens?.reasoning,\n        )\n          ? s.metadata.tokens.reasoning\n          : undefined,\n      });\n    }\n  }\n\n  for (const e of events) {\n    if (e.event === \"step_completed\") {\n      const c = e as StepCompletedEvent;\n      const existing = steps.get(c.stepId);\n      if (!existing) continue;\n      existing.status = c.status;\n      existing.durationMs = c.durationMs;\n    }\n  }\n\n  let totalSteps = 0;\n  let llmSteps = 0;\n  let toolSteps = 0;\n  let logicSteps = 0;\n  let errorSteps = 0;\n  let maxDepth = 0;\n  let longestStep: RunSummary[\"longestStep\"] | undefined;\n\n  let totalTokensInput = 0;\n  let totalTokensOutput = 0;\n  let totalTokensTotal = 0;\n  let totalTokensCached = 0;\n  let totalTokensCacheWrite = 0;\n  let totalTokensReasoning = 0;\n  let tokenBearingSteps = 0;\n  let stepsWithKnownTotal = 0;\n  let hasCachedTokens = false;\n  let hasCacheWriteTokens = false;\n  let hasReasoningTokens = false;\n\n  const depthCache = new Map<string, number>();\n\n  for (const [id, s] of steps.entries()) {\n    totalSteps += 1;\n    if (s.type === \"llm\") llmSteps += 1;\n    else if (s.type === \"tool\") toolSteps += 1;\n    else logicSteps += 1;\n\n    if (s.status === \"error\") errorSteps += 1;\n    const depth = computeStepDepth(id, steps, depthCache);\n    if (depth > maxDepth) maxDepth = depth;\n\n    if (typeof s.durationMs === \"number\" && Number.isFinite(s.durationMs)) {\n      if (!longestStep || s.durationMs > longestStep.durationMs) {\n        longestStep = { name: s.name, durationMs: s.durationMs, type: s.type };\n      }\n    }\n\n    if (\n      s.tokensInput !== undefined ||\n      s.tokensOutput !== undefined ||\n      s.tokensTotal !== undefined ||\n      s.tokensCached !== undefined ||\n      s.tokensCacheWrite !== undefined ||\n      s.tokensReasoning !== undefined\n    ) {\n      tokenBearingSteps += 1;\n      if (s.tokensInput !== undefined) totalTokensInput += s.tokensInput;\n      if (s.tokensOutput !== undefined) totalTokensOutput += s.tokensOutput;\n\n      if (s.tokensTotal !== undefined) {\n        totalTokensTotal += s.tokensTotal;\n        stepsWithKnownTotal += 1;\n      } else if (s.tokensInput !== undefined && s.tokensOutput !== undefined) {\n        totalTokensTotal += s.tokensInput + s.tokensOutput;\n        stepsWithKnownTotal += 1;\n      }\n\n      if (s.tokensCached !== undefined) {\n        totalTokensCached += s.tokensCached;\n        hasCachedTokens = true;\n      }\n      if (s.tokensCacheWrite !== undefined) {\n        totalTokensCacheWrite += s.tokensCacheWrite;\n        hasCacheWriteTokens = true;\n      }\n      if (s.tokensReasoning !== undefined) {\n        totalTokensReasoning += s.tokensReasoning;\n        hasReasoningTokens = true;\n      }\n    }\n  }\n\n  const summary: RunSummary = {\n    runId,\n    name,\n    status,\n    durationMs,\n    totalSteps,\n    llmSteps,\n    toolSteps,\n    logicSteps,\n    errorSteps,\n    maxDepth,\n    ...(longestStep ? { longestStep } : {}),\n    ...(tokenBearingSteps > 0\n      ? {\n          totalTokens: {\n            input: totalTokensInput,\n            output: totalTokensOutput,\n            ...(stepsWithKnownTotal === tokenBearingSteps\n              ? { total: totalTokensTotal }\n              : {}),\n            ...(hasCachedTokens ? { cached: totalTokensCached } : {}),\n            ...(hasCacheWriteTokens\n              ? { cacheWrite: totalTokensCacheWrite }\n              : {}),\n            ...(hasReasoningTokens\n              ? { reasoning: totalTokensReasoning }\n              : {}),\n          },\n        }\n      : {}),\n  };\n\n  // startedAt isn't in RunSummary spec, but keep deterministic results: ignore.\n  void startedAt;\n  return summary;\n}\n","import type { TraceMetadata, TraceMetadataStatus } from \"./types.js\";\nimport { parseDuration } from \"./utils/duration.js\";\n\nexport interface TraceFilterOptions {\n  status?: TraceMetadataStatus;\n  name?: string;\n  since?: string;\n  limit?: number;\n}\n\nfunction toLower(s: string | undefined): string {\n  return typeof s === \"string\" ? s.toLowerCase() : \"\";\n}\n\nexport function filterTraces(\n  traces: TraceMetadata[],\n  options: TraceFilterOptions,\n): TraceMetadata[] {\n  const input = [...traces];\n\n  let out = input.filter((t) => {\n    if (options.status && t.status !== options.status) return false;\n\n    if (options.name) {\n      const q = options.name.toLowerCase();\n      const hay = `${toLower(t.name)} ${toLower(t.runId)}`;\n      if (!hay.includes(q)) return false;\n    }\n\n    if (options.since) {\n      const windowMs = parseDuration(options.since);\n      const cutoff = Date.now() - windowMs;\n      const started = typeof t.startedAt === \"number\" ? t.startedAt : undefined;\n      const basis = started ?? t.createdAt.getTime();\n      if (!Number.isFinite(basis) || basis < cutoff) return false;\n    }\n\n    return true;\n  });\n\n  out.sort((a, b) => {\n    const aTime = (typeof a.startedAt === \"number\" ? a.startedAt : undefined) ?? a.createdAt.getTime();\n    const bTime = (typeof b.startedAt === \"number\" ? b.startedAt : undefined) ?? b.createdAt.getTime();\n    return bTime - aTime;\n  });\n\n  if (typeof options.limit === \"number\" && Number.isFinite(options.limit)) {\n    const n = Math.max(0, Math.floor(options.limit));\n    out = out.slice(0, n);\n  }\n\n  return out;\n}\n\n","import type { RunStartedEvent, TraceEvent, TraceMetadata } from \"./types.js\";\nimport { buildRunSummary } from \"./trace-metadata.js\";\nimport { filterTraces } from \"./trace-filter.js\";\nimport { readTraceEventsFromFile } from \"./storage.js\";\nimport { formatDuration } from \"./utils.js\";\n\nexport interface DurationStats {\n  minMs?: number;\n  maxMs?: number;\n  avgMs?: number;\n  p50Ms?: number;\n  p95Ms?: number;\n}\n\nexport interface TraceStatsRankedRun {\n  runId: string;\n  name?: string;\n  durationMs?: number;\n  status: string;\n}\n\nexport interface TraceStatsRankedStep {\n  runId: string;\n  stepName: string;\n  stepType: string;\n  durationMs: number;\n}\n\nexport interface TraceStats {\n  traceDir: string;\n  since?: string;\n  correlationId?: string;\n  groupId?: string;\n  totalRuns: number;\n  successCount: number;\n  errorCount: number;\n  runningCount: number;\n  unknownCount: number;\n  errorRate: number;\n  duration: DurationStats;\n  totalSteps: number;\n  avgStepsPerRun: number;\n  totalLlmSteps: number;\n  totalToolSteps: number;\n  totalErrorSteps: number;\n  slowestRuns: TraceStatsRankedRun[];\n  slowestSteps: TraceStatsRankedStep[];\n}\n\nexport interface TraceStatsOptions {\n  traceDir: string;\n  since?: string;\n  correlationId?: string;\n  groupId?: string;\n  slowRunLimit?: number;\n  slowStepLimit?: number;\n}\n\nfunction percentile(sorted: number[], p: number): number | undefined {\n  if (sorted.length === 0) return undefined;\n  const idx = Math.min(\n    sorted.length - 1,\n    Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n  );\n  return sorted[idx];\n}\n\nasync function readRunStartedMetadata(\n  filePath: string,\n): Promise<Record<string, unknown> | undefined> {\n  try {\n    const events = await readTraceEventsFromFile(filePath);\n    for (const event of events) {\n      if (event.event !== \"run_started\") continue;\n      const rs = event as RunStartedEvent;\n      if (rs.metadata && typeof rs.metadata === \"object\") {\n        return rs.metadata as Record<string, unknown>;\n      }\n      return undefined;\n    }\n  } catch {\n    /* skip */\n  }\n  return undefined;\n}\n\nfunction metaMatchesCorrelation(\n  metadata: Record<string, unknown> | undefined,\n  correlationId?: string,\n  groupId?: string,\n): boolean {\n  if (correlationId) {\n    const v = metadata?.correlationId;\n    if (typeof v !== \"string\" || v !== correlationId) return false;\n  }\n  if (groupId) {\n    const v = metadata?.groupId;\n    if (typeof v !== \"string\" || v !== groupId) return false;\n  }\n  return true;\n}\n\nexport async function buildTraceStats(\n  metas: TraceMetadata[],\n  options: TraceStatsOptions,\n): Promise<TraceStats> {\n  let filtered = filterTraces(metas, { since: options.since });\n\n  if (options.correlationId || options.groupId) {\n    const next: TraceMetadata[] = [];\n    for (const m of filtered) {\n      const md = await readRunStartedMetadata(m.filePath);\n      if (metaMatchesCorrelation(md, options.correlationId, options.groupId)) {\n        next.push(m);\n      }\n    }\n    filtered = next;\n  }\n\n  let successCount = 0;\n  let errorCount = 0;\n  let runningCount = 0;\n  let unknownCount = 0;\n  const durations: number[] = [];\n  let totalSteps = 0;\n  let totalLlmSteps = 0;\n  let totalToolSteps = 0;\n  let totalErrorSteps = 0;\n  const slowestRuns: TraceStatsRankedRun[] = [];\n  const slowestSteps: TraceStatsRankedStep[] = [];\n\n  for (const m of filtered) {\n    if (m.status === \"success\") successCount += 1;\n    else if (m.status === \"error\") errorCount += 1;\n    else if (m.status === \"running\") runningCount += 1;\n    else unknownCount += 1;\n\n    if (\n      typeof m.durationMs === \"number\" &&\n      Number.isFinite(m.durationMs) &&\n      m.durationMs >= 0\n    ) {\n      durations.push(m.durationMs);\n      slowestRuns.push({\n        runId: m.runId,\n        name: m.name,\n        durationMs: m.durationMs,\n        status: m.status,\n      });\n    }\n\n    try {\n      const events = await readTraceEventsFromFile(m.filePath);\n      if (events.length === 0) continue;\n      const summary = buildRunSummary(events);\n      totalSteps += summary.totalSteps;\n      totalLlmSteps += summary.llmSteps;\n      totalToolSteps += summary.toolSteps;\n      totalErrorSteps += summary.errorSteps;\n\n      const steps = collectCompletedSteps(events, m.runId);\n      for (const s of steps) {\n        slowestSteps.push(s);\n      }\n    } catch {\n      /* skip malformed */\n    }\n  }\n\n  slowestRuns.sort((a, b) => (b.durationMs ?? 0) - (a.durationMs ?? 0));\n  slowestSteps.sort((a, b) => b.durationMs - a.durationMs);\n\n  const runLimit = options.slowRunLimit ?? 5;\n  const stepLimit = options.slowStepLimit ?? 5;\n  const sortedDur = [...durations].sort((a, b) => a - b);\n  const totalRuns = filtered.length;\n  const errorRate = totalRuns > 0 ? errorCount / totalRuns : 0;\n  const sumDur = durations.reduce((a, b) => a + b, 0);\n\n  return {\n    traceDir: options.traceDir,\n    ...(options.since ? { since: options.since } : {}),\n    ...(options.correlationId ? { correlationId: options.correlationId } : {}),\n    ...(options.groupId ? { groupId: options.groupId } : {}),\n    totalRuns,\n    successCount,\n    errorCount,\n    runningCount,\n    unknownCount,\n    errorRate,\n    duration: {\n      ...(sortedDur.length > 0\n        ? {\n            minMs: sortedDur[0],\n            maxMs: sortedDur[sortedDur.length - 1],\n            avgMs: sumDur / sortedDur.length,\n            p50Ms: percentile(sortedDur, 50),\n            p95Ms: percentile(sortedDur, 95),\n          }\n        : {}),\n    },\n    totalSteps,\n    avgStepsPerRun: totalRuns > 0 ? totalSteps / totalRuns : 0,\n    totalLlmSteps,\n    totalToolSteps,\n    totalErrorSteps,\n    slowestRuns: slowestRuns.slice(0, runLimit),\n    slowestSteps: slowestSteps.slice(0, stepLimit),\n  };\n}\n\nfunction collectCompletedSteps(\n  events: TraceEvent[],\n  runId: string,\n): TraceStatsRankedStep[] {\n  const started = new Map<string, { name: string; type: string }>();\n  const out: TraceStatsRankedStep[] = [];\n  for (const e of events) {\n    if (e.event === \"step_started\") {\n      const s = e as { stepId: string; name: string; type: string };\n      started.set(s.stepId, { name: s.name, type: s.type });\n    }\n    if (e.event === \"step_completed\") {\n      const c = e as {\n        stepId: string;\n        durationMs?: number;\n        status: string;\n      };\n      if (c.status !== \"success\" && c.status !== \"error\") continue;\n      if (typeof c.durationMs !== \"number\" || !Number.isFinite(c.durationMs)) {\n        continue;\n      }\n      const meta = started.get(c.stepId);\n      out.push({\n        runId,\n        stepName: meta?.name ?? c.stepId,\n        stepType: meta?.type ?? \"logic\",\n        durationMs: c.durationMs,\n      });\n    }\n  }\n  return out;\n}\n\n/**\n * Formats a step label for display. `step.tool`/`step.llm` already store the\n * name with its type prefix (e.g. \"tool:lookup\"), while plain `step()` stores a\n * bare name, so prefixing unconditionally would double the prefix. Add the type\n * prefix only when the name does not already carry it, matching what list/view\n * show for the same step.\n */\nexport function formatStepLabel(stepType: string, stepName: string): string {\n  return stepName.startsWith(`${stepType}:`) ? stepName : `${stepType}:${stepName}`;\n}\n\nexport function renderTraceStats(stats: TraceStats): string {\n  const lines: string[] = [];\n  lines.push(\"Trace stats (local)\");\n  lines.push(`Directory: ${stats.traceDir}`);\n  if (stats.since) lines.push(`Since: ${stats.since}`);\n  if (stats.correlationId) lines.push(`Correlation ID: ${stats.correlationId}`);\n  if (stats.groupId) lines.push(`Group ID: ${stats.groupId}`);\n  lines.push(\"\");\n  lines.push(`Runs: ${stats.totalRuns}`);\n  lines.push(\n    `  success: ${stats.successCount}  error: ${stats.errorCount}  running: ${stats.runningCount}  unknown: ${stats.unknownCount}`,\n  );\n  lines.push(`Error rate: ${(stats.errorRate * 100).toFixed(1)}%`);\n  if (stats.duration.avgMs !== undefined) {\n    lines.push(\n      `Duration: min ${formatDuration(stats.duration.minMs ?? 0)} | avg ${formatDuration(stats.duration.avgMs)} | p50 ${formatDuration(stats.duration.p50Ms ?? 0)} | p95 ${formatDuration(stats.duration.p95Ms ?? 0)} | max ${formatDuration(stats.duration.maxMs ?? 0)}`,\n    );\n  }\n  lines.push(\"\");\n  lines.push(`Steps: ${stats.totalSteps} (avg ${stats.avgStepsPerRun.toFixed(1)} per run)`);\n  lines.push(\n    `  LLM: ${stats.totalLlmSteps}  tool: ${stats.totalToolSteps}  errors: ${stats.totalErrorSteps}`,\n  );\n  if (stats.slowestRuns.length > 0) {\n    lines.push(\"\");\n    lines.push(\"Slowest runs:\");\n    for (const r of stats.slowestRuns) {\n      lines.push(\n        `  ${r.runId} | ${r.name ?? \"-\"} | ${formatDuration(r.durationMs ?? 0)} | ${r.status}`,\n      );\n    }\n  }\n  if (stats.slowestSteps.length > 0) {\n    lines.push(\"\");\n    lines.push(\"Slowest steps:\");\n    for (const s of stats.slowestSteps) {\n      lines.push(\n        `  ${s.runId} | ${formatStepLabel(s.stepType, s.stepName)} | ${formatDuration(s.durationMs)}`,\n      );\n    }\n  }\n  return lines.join(\"\\n\");\n}\n","import type {\n  RunCompletedEvent,\n  RunStartedEvent,\n  StepCompletedEvent,\n  StepStartedEvent,\n  StepStatus,\n  StepType,\n  TraceEvent,\n  TraceMetadataStatus,\n} from \"./types.js\";\nimport { formatStepLabel } from \"./stats.js\";\nimport { formatDuration, formatTimestamp } from \"./utils.js\";\n\nexport type TimelineFocus = \"all\" | \"slow\";\n\nexport interface TimelineEntry {\n  stepId: string;\n  name: string;\n  type: StepType;\n  status: StepStatus;\n  depth: number;\n  startedAt: number;\n  offsetMs: number;\n  durationMs?: number;\n  isError: boolean;\n  slow?: boolean;\n  streaming?: {\n    chunkCount?: number;\n    streamDurationMs?: number;\n    streamedCharCount?: number;\n  };\n}\n\nexport interface RunTimeline {\n  runId: string;\n  name?: string;\n  status: TraceMetadataStatus;\n  startedAt?: number;\n  endedAt?: number;\n  durationMs?: number;\n  correlation?: {\n    correlationId?: string;\n    requestId?: string;\n    decisionId?: string;\n    groupId?: string;\n  };\n  entries: TimelineEntry[];\n}\n\nexport interface TimelineOptions {\n  focus?: TimelineFocus;\n  slowTopN?: number;\n}\n\nconst ROOT_TIMELINE_DEPTH = 0;\nconst MAX_TIMELINE_DEPTH = 1000;\n\nfunction finite(n: unknown): n is number {\n  return typeof n === \"number\" && Number.isFinite(n);\n}\n\nfunction pickStreamingMeta(\n  metadata: Record<string, unknown> | undefined,\n): TimelineEntry[\"streaming\"] | undefined {\n  if (!metadata || typeof metadata !== \"object\") return undefined;\n  const chunkCount = metadata.chunkCount;\n  const streamDurationMs = metadata.streamDurationMs;\n  const streamedCharCount = metadata.streamedCharCount;\n  if (\n    !finite(chunkCount) &&\n    !finite(streamDurationMs) &&\n    !finite(streamedCharCount)\n  ) {\n    return undefined;\n  }\n  return {\n    ...(finite(chunkCount) ? { chunkCount } : {}),\n    ...(finite(streamDurationMs) ? { streamDurationMs } : {}),\n    ...(finite(streamedCharCount) ? { streamedCharCount } : {}),\n  };\n}\n\nfunction pickCorrelation(\n  metadata: Record<string, unknown> | undefined,\n): RunTimeline[\"correlation\"] | undefined {\n  if (!metadata || typeof metadata !== \"object\") return undefined;\n  const out: NonNullable<RunTimeline[\"correlation\"]> = {};\n  for (const key of [\n    \"correlationId\",\n    \"requestId\",\n    \"decisionId\",\n    \"groupId\",\n  ] as const) {\n    const v = metadata[key];\n    if (typeof v === \"string\" && v.trim() !== \"\") {\n      out[key] = v;\n    }\n  }\n  return Object.keys(out).length > 0 ? out : undefined;\n}\n\nexport function buildRunTimeline(\n  events: readonly TraceEvent[],\n  options: TimelineOptions = {},\n): RunTimeline {\n  const started = events.find(\n    (e): e is RunStartedEvent => e.event === \"run_started\",\n  );\n  const completed = events.filter(\n    (e): e is RunCompletedEvent => e.event === \"run_completed\",\n  );\n  const lastCompleted = completed[completed.length - 1];\n\n  const runId =\n    started?.runId ??\n    events.find((e) => typeof (e as { runId?: string }).runId === \"string\")\n      ?.runId ??\n    \"unknown-run\";\n\n  const runStart =\n    started && finite(started.startTime)\n      ? started.startTime\n      : started && finite(started.timestamp)\n        ? started.timestamp\n        : undefined;\n\n  const status: TraceMetadataStatus = lastCompleted\n    ? lastCompleted.status\n    : started\n      ? \"running\"\n      : \"unknown\";\n\n  const steps = new Map<\n    string,\n    {\n      name: string;\n      type: StepType;\n      parentId?: string;\n      startedAt: number;\n      status: StepStatus;\n      durationMs?: number;\n      metadata?: Record<string, unknown>;\n    }\n  >();\n\n  for (const e of events) {\n    if (e.event === \"step_started\") {\n      const s = e as StepStartedEvent;\n      steps.set(s.stepId, {\n        name: s.name,\n        type: s.type,\n        parentId: s.parentId,\n        startedAt: finite(s.startTime) ? s.startTime : s.timestamp,\n        status: \"running\",\n        metadata: s.metadata as Record<string, unknown> | undefined,\n      });\n    }\n  }\n\n  for (const e of events) {\n    if (e.event !== \"step_completed\") continue;\n    const c = e as StepCompletedEvent;\n    const node = steps.get(c.stepId);\n    if (!node) continue;\n    node.status = c.status;\n    if (finite(c.durationMs)) node.durationMs = c.durationMs;\n  }\n\n  const depthCache = new Map<string, number>();\n  const computeDepth = (stepId: string): number => {\n    const cached = depthCache.get(stepId);\n    if (cached !== undefined) return cached;\n\n    const ancestry: string[] = [];\n    const ancestryIndexes = new Map<string, number>();\n    let currentStepId = stepId;\n    let resolvedDepth: number | undefined;\n\n    while (resolvedDepth === undefined) {\n      const cachedDepth = depthCache.get(currentStepId);\n      if (cachedDepth !== undefined) {\n        resolvedDepth = cachedDepth;\n        continue;\n      }\n\n      const cycleStart = ancestryIndexes.get(currentStepId);\n      if (cycleStart !== undefined) {\n        const cycleStepIds = ancestry.splice(cycleStart);\n        for (const cycleStepId of cycleStepIds) {\n          depthCache.set(cycleStepId, ROOT_TIMELINE_DEPTH);\n        }\n        resolvedDepth = ROOT_TIMELINE_DEPTH;\n        continue;\n      }\n\n      const currentStep = steps.get(currentStepId);\n      if (!currentStep) {\n        resolvedDepth = ROOT_TIMELINE_DEPTH;\n        continue;\n      }\n\n      ancestryIndexes.set(currentStepId, ancestry.length);\n      ancestry.push(currentStepId);\n\n      const parentId = currentStep.parentId;\n      if (\n        typeof parentId !== \"string\" ||\n        parentId.trim() === \"\" ||\n        !steps.has(parentId)\n      ) {\n        ancestry.pop();\n        depthCache.set(currentStepId, ROOT_TIMELINE_DEPTH);\n        resolvedDepth = ROOT_TIMELINE_DEPTH;\n        continue;\n      }\n\n      currentStepId = parentId;\n    }\n\n    ancestry.reverse();\n    for (const ancestorStepId of ancestry) {\n      resolvedDepth = Math.min(MAX_TIMELINE_DEPTH, resolvedDepth + 1);\n      depthCache.set(ancestorStepId, resolvedDepth);\n    }\n\n    const resolvedStepDepth = depthCache.get(stepId);\n    if (resolvedStepDepth === undefined) {\n      throw new Error(`Failed to resolve timeline depth for step \"${stepId}\"`);\n    }\n    return resolvedStepDepth;\n  };\n\n  const entries: TimelineEntry[] = [];\n  for (const [stepId, s] of steps.entries()) {\n    const offsetMs =\n      runStart !== undefined && finite(s.startedAt)\n        ? Math.max(0, s.startedAt - runStart)\n        : 0;\n    entries.push({\n      stepId,\n      name: s.name,\n      type: s.type,\n      status: s.status,\n      depth: computeDepth(stepId),\n      startedAt: s.startedAt,\n      offsetMs,\n      durationMs: s.durationMs,\n      isError: s.status === \"error\",\n      streaming: pickStreamingMeta(s.metadata),\n    });\n  }\n\n  entries.sort((a, b) => a.startedAt - b.startedAt);\n\n  const slowTopN = options.slowTopN ?? 3;\n  if (options.focus === \"slow\" && entries.length > 0) {\n    const ranked = [...entries]\n      .filter((e) => finite(e.durationMs))\n      .sort((a, b) => (b.durationMs ?? 0) - (a.durationMs ?? 0));\n    const slowIds = new Set(\n      ranked.slice(0, slowTopN).map((e) => e.stepId),\n    );\n    for (const e of entries) {\n      if (slowIds.has(e.stepId)) e.slow = true;\n    }\n  }\n\n  return {\n    runId,\n    name:\n      typeof started?.name === \"string\" && started.name.trim() !== \"\"\n        ? started.name\n        : undefined,\n    status,\n    startedAt: runStart,\n    endedAt:\n      lastCompleted && finite(lastCompleted.endTime)\n        ? lastCompleted.endTime\n        : undefined,\n    durationMs:\n      lastCompleted && finite(lastCompleted.durationMs)\n        ? lastCompleted.durationMs\n        : undefined,\n    correlation: pickCorrelation(\n      started?.metadata as Record<string, unknown> | undefined,\n    ),\n    entries,\n  };\n}\n\nexport interface RenderTimelineOptions {\n  focus?: TimelineFocus;\n}\n\nexport function renderTimeline(\n  timeline: RunTimeline,\n  options: RenderTimelineOptions = {},\n): string {\n  const lines: string[] = [];\n  lines.push(`Timeline: ${timeline.name ?? timeline.runId}`);\n  lines.push(`Run ID: ${timeline.runId}`);\n  lines.push(`Status: ${timeline.status}`);\n  if (timeline.startedAt !== undefined) {\n    lines.push(`Started: ${formatTimestamp(timeline.startedAt)}`);\n  }\n  if (timeline.durationMs !== undefined) {\n    lines.push(`Duration: ${formatDuration(timeline.durationMs)}`);\n  }\n  if (timeline.correlation) {\n    const parts = Object.entries(timeline.correlation)\n      .filter(([, v]) => typeof v === \"string\")\n      .map(([k, v]) => `${k}=${v}`);\n    if (parts.length > 0) {\n      lines.push(`Correlation: ${parts.join(\", \")}`);\n    }\n  }\n  lines.push(\"\");\n  lines.push(\"Steps (chronological):\");\n\n  const show = timeline.entries.filter((e) => {\n    if (options.focus === \"slow\") return e.slow === true;\n    return true;\n  });\n\n  if (show.length === 0) {\n    lines.push(\n      options.focus === \"slow\"\n        ? \"(no steps with duration for slow focus)\"\n        : \"(no steps)\",\n    );\n    return lines.join(\"\\n\");\n  }\n\n  for (const e of show) {\n    const prefix = e.slow ? \"[slow] \" : \"\";\n    const typeTag =\n      e.type === \"llm\" ? \"llm\" : e.type === \"tool\" ? \"tool\" : e.type;\n    const dur =\n      e.durationMs !== undefined ? formatDuration(e.durationMs) : \"-\";\n    const err = e.isError ? \" error\" : \"\";\n    const off = formatDuration(e.offsetMs);\n    let line = `${prefix}+${off} ${formatStepLabel(typeTag, e.name)} (${dur})${err}`;\n    if (e.streaming?.chunkCount !== undefined) {\n      line += ` chunks=${e.streaming.chunkCount}`;\n    }\n    if (e.streaming?.streamDurationMs !== undefined) {\n      line += ` stream=${formatDuration(e.streaming.streamDurationMs)}`;\n    }\n    lines.push(line);\n  }\n\n  return lines.join(\"\\n\");\n}\n","import type {\n  RunCompletedEvent,\n  RunStartedEvent,\n  StepCompletedEvent,\n  StepStartedEvent,\n  TraceCorrelationMetadata,\n  TraceEvent,\n  TraceMetadataStatus,\n} from \"./types.js\";\nimport { buildRunSummary } from \"./trace-metadata.js\";\nimport { formatDuration } from \"./utils.js\";\n\nexport interface RunWhatSummary {\n  runId: string;\n  name?: string;\n  status: TraceMetadataStatus;\n  durationMs?: number;\n  totalSteps: number;\n  llmSteps: number;\n  toolSteps: number;\n  logicSteps: number;\n  errorSteps: number;\n  maxDepth: number;\n  longestStep?: {\n    name: string;\n    durationMs: number;\n    type: string;\n  };\n  totalTokens?: {\n    input: number;\n    output: number;\n    total?: number;\n    cached?: number;\n    cacheWrite?: number;\n    reasoning?: number;\n  };\n  correlation?: TraceCorrelationMetadata;\n  failedStepNames: string[];\n  runErrorMessage?: string;\n}\n\nfunction pickCorrelation(\n  metadata: Record<string, unknown> | undefined,\n): TraceCorrelationMetadata | undefined {\n  if (!metadata) return undefined;\n  const out: TraceCorrelationMetadata = {};\n  for (const key of [\n    \"correlationId\",\n    \"requestId\",\n    \"decisionId\",\n    \"groupId\",\n  ] as const) {\n    const value = metadata[key];\n    if (typeof value === \"string\" && value.trim() !== \"\") {\n      out[key] = value;\n    }\n  }\n  return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction stepMixLine(summary: RunWhatSummary): string {\n  const parts: string[] = [];\n  if (summary.llmSteps > 0) parts.push(`${summary.llmSteps} LLM`);\n  if (summary.toolSteps > 0) parts.push(`${summary.toolSteps} tool`);\n  if (summary.logicSteps > 0) parts.push(`${summary.logicSteps} logic`);\n  return parts.length > 0 ? parts.join(\", \") : \"none\";\n}\n\nfunction outcomeLine(summary: RunWhatSummary): string {\n  if (summary.status === \"success\") {\n    return summary.errorSteps > 0\n      ? \"Completed with step errors recorded.\"\n      : \"Completed successfully.\";\n  }\n  if (summary.status === \"error\") {\n    if (summary.failedStepNames.length > 0) {\n      const names = summary.failedStepNames.slice(0, 3).join(\", \");\n      const suffix =\n        summary.failedStepNames.length > 3\n          ? ` (+${summary.failedStepNames.length - 3} more)`\n          : \"\";\n      return `Failed at step(s): ${names}${suffix}.`;\n    }\n    if (summary.runErrorMessage) {\n      return `Run failed: ${summary.runErrorMessage}`;\n    }\n    return \"Run failed.\";\n  }\n  if (summary.status === \"running\") {\n    return \"Run is still in progress (no run_completed).\";\n  }\n  return \"Outcome unknown — inspect events may be incomplete.\";\n}\n\n/**\n * Build a concise inspection summary for `what` / report workflows.\n * Read-only over in-memory v0.1 {@link TraceEvent} rows.\n */\nexport function buildRunWhatSummary(events: TraceEvent[]): RunWhatSummary {\n  const base = buildRunSummary(events);\n  const started = events.find(\n    (e): e is RunStartedEvent => e.event === \"run_started\",\n  );\n  const completed = events.filter(\n    (e): e is RunCompletedEvent => e.event === \"run_completed\",\n  );\n  const lastCompleted = completed[completed.length - 1];\n\n  const failedStepNames: string[] = [];\n  const stepNames = new Map<string, string>();\n  for (const e of events) {\n    if (e.event === \"step_started\") {\n      const s = e as StepStartedEvent;\n      stepNames.set(s.stepId, s.name);\n    }\n  }\n  for (const e of events) {\n    if (e.event === \"step_completed\") {\n      const sc = e as StepCompletedEvent;\n      if (sc.status === \"error\") {\n        failedStepNames.push(stepNames.get(sc.stepId) ?? sc.stepId);\n      }\n    }\n  }\n\n  return {\n    runId: base.runId,\n    name: base.name,\n    status: base.status,\n    durationMs: base.durationMs,\n    totalSteps: base.totalSteps,\n    llmSteps: base.llmSteps,\n    toolSteps: base.toolSteps,\n    logicSteps: base.logicSteps,\n    errorSteps: base.errorSteps,\n    maxDepth: base.maxDepth,\n    longestStep: base.longestStep,\n    totalTokens: base.totalTokens,\n    correlation: pickCorrelation(started?.metadata),\n    failedStepNames,\n    runErrorMessage: lastCompleted?.error?.message,\n  };\n}\n\nexport interface RenderWhatOptions {\n  /** Include correlation ids when present (default true). */\n  correlation?: boolean;\n}\n\n/**\n * Render a human-readable `what` summary (plain text, no ANSI).\n */\nexport function renderRunWhat(\n  summary: RunWhatSummary,\n  options: RenderWhatOptions = {},\n): string {\n  const showCorrelation = options.correlation !== false;\n  const lines: string[] = [];\n  const label = summary.name ?? summary.runId;\n  lines.push(`What: ${label}`);\n\n  const duration =\n    summary.durationMs !== undefined ? formatDuration(summary.durationMs) : \"—\";\n  lines.push(\n    `Status: ${summary.status} · Duration: ${duration} · Steps: ${summary.totalSteps} (${stepMixLine(summary)})`,\n  );\n\n  if (summary.totalTokens) {\n    const tokenParts = [\n      `${summary.totalTokens.input} in`,\n      `${summary.totalTokens.output} out`,\n    ];\n    if (summary.totalTokens.total !== undefined) {\n      tokenParts.push(`${summary.totalTokens.total} total`);\n    }\n    if (summary.totalTokens.cached !== undefined) {\n      tokenParts.push(`${summary.totalTokens.cached} cached`);\n    }\n    if (summary.totalTokens.cacheWrite !== undefined) {\n      tokenParts.push(`${summary.totalTokens.cacheWrite} cache-write`);\n    }\n    if (summary.totalTokens.reasoning !== undefined) {\n      tokenParts.push(`${summary.totalTokens.reasoning} reasoning`);\n    }\n    lines.push(`Tokens: ${tokenParts.join(\" / \")}`);\n  }\n\n  if (showCorrelation && summary.correlation) {\n    const parts: string[] = [];\n    if (summary.correlation.correlationId) {\n      parts.push(`correlationId=${summary.correlation.correlationId}`);\n    }\n    if (summary.correlation.requestId) {\n      parts.push(`requestId=${summary.correlation.requestId}`);\n    }\n    if (summary.correlation.decisionId) {\n      parts.push(`decisionId=${summary.correlation.decisionId}`);\n    }\n    if (summary.correlation.groupId) {\n      parts.push(`groupId=${summary.correlation.groupId}`);\n    }\n    if (parts.length > 0) {\n      lines.push(`Correlation: ${parts.join(\", \")}`);\n    }\n  }\n\n  lines.push(`Outcome: ${outcomeLine(summary)}`);\n\n  if (summary.longestStep && summary.totalSteps > 0) {\n    lines.push(\n      `Slowest: ${summary.longestStep.name} (${formatDuration(summary.longestStep.durationMs)}, ${summary.longestStep.type})`,\n    );\n  }\n\n  if (summary.maxDepth > 0) {\n    lines.push(`Max depth: ${summary.maxDepth}`);\n  }\n\n  return lines.join(\"\\n\");\n}\n","/**\n * Conservative first-causal-failure analysis (v6.11+).\n *\n * @experimental Available through `agent-inspect/advanced`.\n */\nimport { extractOutcomesFromTraceEvents } from \"./outcomes/extract.js\";\nimport { buildRunTimeline } from \"./timeline.js\";\nimport type { StepCompletedEvent, StepStartedEvent, TraceEvent } from \"./types.js\";\n\nexport type CausalFailureKind =\n  | \"explicit_error_event\"\n  | \"failed_observed_outcome\"\n  | \"contract_failure\"\n  | \"failed_ancestor_or_child\"\n  | \"none\";\n\nexport interface CausalContractFindingInput {\n  ruleId: string;\n  status: \"fail\" | \"pass\" | \"warning\" | string;\n  /** Linked event/step ids from check evidence. */\n  evidenceIds?: string[];\n  message?: string;\n}\n\nexport interface FirstCausalFailure {\n  kind: CausalFailureKind;\n  /** Stable evidence ids (stepId / outcomeId / event-linked ids). No raw paths. */\n  evidenceIds: string[];\n  rationale: string;\n  /** 1–4 when matched; 0 when none. */\n  orderIndex: 0 | 1 | 2 | 3 | 4;\n  runId?: string;\n  primary?: {\n    stepId?: string;\n    outcomeId?: string;\n    ruleId?: string;\n    name?: string;\n  };\n  relationship?: {\n    role: \"self\" | \"ancestor\" | \"child\";\n    relatedIds: string[];\n  };\n  engine: \"conservative-causal-v1\";\n}\n\nexport interface FindFirstCausalFailureOptions {\n  /** Optional contract/check failures (step 3). Omitted → skip contract stage. */\n  contractFindings?: readonly CausalContractFindingInput[];\n}\n\nfunction runIdFromEvents(events: readonly TraceEvent[]): string | undefined {\n  for (const event of events) {\n    if (\"runId\" in event && typeof event.runId === \"string\") return event.runId;\n  }\n  return undefined;\n}\n\nfunction noneResult(runId: string | undefined, rationale: string): FirstCausalFailure {\n  return {\n    kind: \"none\",\n    evidenceIds: [],\n    rationale,\n    orderIndex: 0,\n    runId,\n    engine: \"conservative-causal-v1\",\n  };\n}\n\n/**\n * Find the first causal failure using the locked conservative order.\n * Does not infer from timing correlation alone.\n */\nexport function findFirstCausalFailure(\n  events: readonly TraceEvent[],\n  options: FindFirstCausalFailureOptions = {},\n): FirstCausalFailure {\n  const runId = runIdFromEvents(events);\n\n  // 1. Explicit failed/error event (timeline isError / step_completed error / run error)\n  const timeline = buildRunTimeline(events);\n  const firstError = timeline.entries.find((entry) => entry.isError);\n  if (firstError) {\n    return {\n      kind: \"explicit_error_event\",\n      evidenceIds: [firstError.stepId],\n      rationale:\n        \"First timeline step with status error (explicit failure; no timing-only inference).\",\n      orderIndex: 1,\n      runId: timeline.runId || runId,\n      primary: {\n        stepId: firstError.stepId,\n        name: firstError.name,\n      },\n      relationship: { role: \"self\", relatedIds: [] },\n      engine: \"conservative-causal-v1\",\n    };\n  }\n\n  const runCompletedError = events.find(\n    (event): event is Extract<TraceEvent, { event: \"run_completed\" }> =>\n      event.event === \"run_completed\" && event.status === \"error\",\n  );\n  if (runCompletedError) {\n    return {\n      kind: \"explicit_error_event\",\n      evidenceIds: [runCompletedError.runId],\n      rationale: \"Run completed with status error and no earlier errored step.\",\n      orderIndex: 1,\n      runId: runCompletedError.runId,\n      primary: { name: \"run\", stepId: runCompletedError.runId },\n      relationship: { role: \"self\", relatedIds: [] },\n      engine: \"conservative-causal-v1\",\n    };\n  }\n\n  // 2. Failed observed outcome\n  const outcomes = extractOutcomesFromTraceEvents(events);\n  const failedOutcome = outcomes.find((outcome) => outcome.status === \"failed\");\n  if (failedOutcome) {\n    const evidenceIds = [failedOutcome.outcomeId];\n    if (failedOutcome.parentId) evidenceIds.push(failedOutcome.parentId);\n    return {\n      kind: \"failed_observed_outcome\",\n      evidenceIds,\n      rationale: \"First observed outcome with status failed.\",\n      orderIndex: 2,\n      runId: failedOutcome.runId || runId,\n      primary: {\n        outcomeId: failedOutcome.outcomeId,\n        stepId: failedOutcome.parentId,\n        name: failedOutcome.name,\n      },\n      relationship: failedOutcome.parentId\n        ? { role: \"child\", relatedIds: [failedOutcome.parentId] }\n        : { role: \"self\", relatedIds: [] },\n      engine: \"conservative-causal-v1\",\n    };\n  }\n\n  // 3. Contract failure linked to an event\n  const contractFail = (options.contractFindings ?? []).find(\n    (finding) => finding.status === \"fail\" && (finding.evidenceIds?.length ?? 0) > 0,\n  );\n  if (contractFail) {\n    const evidenceIds = [...(contractFail.evidenceIds ?? [])];\n    return {\n      kind: \"contract_failure\",\n      evidenceIds,\n      rationale:\n        contractFail.message ??\n        `Contract rule ${contractFail.ruleId} failed with linked evidence ids.`,\n      orderIndex: 3,\n      runId,\n      primary: {\n        ruleId: contractFail.ruleId,\n        stepId: evidenceIds[0],\n        name: contractFail.ruleId,\n      },\n      relationship: { role: \"self\", relatedIds: [] },\n      engine: \"conservative-causal-v1\",\n    };\n  }\n\n  // 4. Nearest failed ancestor/child — only when we have structural parent links\n  // among completed steps that somehow weren't marked isError (defensive) or\n  // when a success parent wraps a failed child already handled above.\n  // If no explicit error steps exist, look for parent/child pairs where a child\n  // completed with error relative to a parent (already covered by step 1).\n  // Here: if any step has a parent that also completed with error, prefer the\n  // child tip — but step 1 would have caught any error step. So this stage\n  // only fires when contractFindings lacked event links but we can still find\n  // parent/child error adjacency from raw events that timeline missed.\n  const completed = events.filter(\n    (event): event is StepCompletedEvent => event.event === \"step_completed\",\n  );\n  const started = events.filter(\n    (event): event is StepStartedEvent => event.event === \"step_started\",\n  );\n  const parentByStep = new Map<string, string | undefined>();\n  for (const start of started) {\n    parentByStep.set(start.stepId, start.parentId);\n  }\n  const errorSteps = completed.filter((event) => event.status === \"error\");\n  if (errorSteps.length > 0) {\n    // Prefer deepest error (has parent that is also error or any parent)\n    const sorted = [...errorSteps].sort((a, b) => {\n      const depth = (id: string): number => {\n        let d = 0;\n        let cur: string | undefined = id;\n        const seen = new Set<string>();\n        while (cur && parentByStep.has(cur) && !seen.has(cur)) {\n          seen.add(cur);\n          const parent = parentByStep.get(cur);\n          if (!parent) break;\n          d += 1;\n          cur = parent;\n        }\n        return d;\n      };\n      return depth(b.stepId) - depth(a.stepId);\n    });\n    const tip = sorted[0]!;\n    const parentId = parentByStep.get(tip.stepId);\n    const relatedIds = parentId ? [parentId] : [];\n    return {\n      kind: \"failed_ancestor_or_child\",\n      evidenceIds: [tip.stepId, ...relatedIds],\n      rationale: parentId\n        ? \"Deepest explicit error step with parent link (nearest ancestor relationship).\"\n        : \"Explicit error step used as structural tip (no parent id).\",\n      orderIndex: 4,\n      runId: tip.runId || runId,\n      primary: { stepId: tip.stepId, name: started.find((s) => s.stepId === tip.stepId)?.name },\n      relationship: {\n        role: parentId ? \"child\" : \"self\",\n        relatedIds,\n      },\n      engine: \"conservative-causal-v1\",\n    };\n  }\n\n  // 5. No timing-only inference\n  return noneResult(\n    runId,\n    \"No explicit error event, failed outcome, or linked contract failure; refusing timing-only inference.\",\n  );\n}\n","import { Redactor } from \"./logs/redactor.js\";\nimport { resolveRedactionProfile } from \"./redaction-profiles.js\";\nimport type { RedactionProfile } from \"./types.js\";\nimport type { InspectNode, InspectRunTree } from \"./types/inspect-event.js\";\n\nexport type ExplainMode = \"dry-run\" | \"local\";\n\nexport interface ExplainFact {\n  id: string;\n  label: string;\n  value: unknown;\n  source: \"trace\";\n  confidence: \"observed\";\n}\n\nexport interface ExplainInference {\n  id: string;\n  label: string;\n  text: string;\n  evidence: string[];\n  confidence: \"deterministic\";\n}\n\nexport interface ExplainResult {\n  mode: ExplainMode;\n  runId: string;\n  name?: string;\n  status?: string;\n  redactionProfile: RedactionProfile;\n  facts: ExplainFact[];\n  inferences: ExplainInference[];\n  notes: string[];\n}\n\nexport interface ExplainOptions {\n  mode?: ExplainMode;\n  redactionProfile?: RedactionProfile;\n}\n\ninterface FlatNode {\n  node: InspectNode;\n  index: number;\n}\n\n/**\n * Maps the reader run-tree status vocabulary (\"ok\"/\"error\"/\"running\") to the\n * user-facing status vocabulary that list/view/stats report (\"success\"/...),\n * so explain agrees with the other commands for the same run.\n */\nfunction toDisplayStatus(status: InspectRunTree[\"status\"] | undefined): string {\n  if (status === \"ok\") return \"success\";\n  if (status === \"error\") return \"error\";\n  if (status === \"running\") return \"running\";\n  return \"unknown\";\n}\n\nfunction flatten(nodes: InspectNode[], out: FlatNode[] = []): FlatNode[] {\n  for (const node of nodes) {\n    out.push({ node, index: out.length + 1 });\n    flatten(node.children, out);\n  }\n  return out;\n}\n\nfunction redactValue(\n  redactor: Redactor,\n  key: string,\n  value: unknown,\n): unknown {\n  return redactor.redactValue(key, value);\n}\n\nfunction fact(\n  id: string,\n  label: string,\n  value: unknown,\n  redactor: Redactor,\n): ExplainFact {\n  return {\n    id,\n    label,\n    value: redactValue(redactor, id.split(\".\").at(-1) ?? id, value),\n    source: \"trace\",\n    confidence: \"observed\",\n  };\n}\n\nfunction topKinds(run: InspectRunTree): string[] {\n  return Object.entries(run.metadata.kinds)\n    .filter(([, count]) => count > 0)\n    .sort((a, b) => {\n      if (b[1] !== a[1]) return b[1] - a[1];\n      return a[0].localeCompare(b[0]);\n    })\n    .slice(0, 5)\n    .map(([kind, count]) => `${kind}:${count}`);\n}\n\nfunction countErrorNodes(nodes: FlatNode[]): number {\n  return nodes.filter((entry) => entry.node.event.status === \"error\").length;\n}\n\nfunction slowestNode(nodes: FlatNode[]): FlatNode | undefined {\n  return nodes\n    .filter(\n      (entry) =>\n        entry.node.event.durationMs !== undefined &&\n        // The RUN boundary spans the whole run, so its duration always dominates\n        // and shadows every real step. Rank actual work nodes only, matching the\n        // stats slowest-step ranking, which never counts the run envelope.\n        entry.node.event.kind !== \"RUN\",\n    )\n    .sort((a, b) => {\n      const delta = (b.node.event.durationMs ?? 0) - (a.node.event.durationMs ?? 0);\n      return delta !== 0 ? delta : a.index - b.index;\n    })[0];\n}\n\nfunction attributeFacts(nodes: FlatNode[], redactor: Redactor): ExplainFact[] {\n  const facts: ExplainFact[] = [];\n  for (const entry of nodes) {\n    const attrs = entry.node.event.attributes;\n    if (attrs === undefined) continue;\n    for (const key of Object.keys(attrs).sort()) {\n      facts.push({\n        id: `node.${entry.index}.attributes.${key}`,\n        label: `${entry.node.event.name} attribute ${key}`,\n        value: redactValue(redactor, key, attrs[key]),\n        source: \"trace\",\n        confidence: \"observed\",\n      });\n      if (facts.length >= 8) return facts;\n    }\n  }\n  return facts;\n}\n\nfunction buildFacts(run: InspectRunTree, redactor: Redactor): ExplainFact[] {\n  const nodes = flatten(run.children);\n  const facts = [\n    fact(\"run.id\", \"Run id\", run.runId, redactor),\n    fact(\"run.name\", \"Run name\", run.name ?? run.runId, redactor),\n    fact(\"run.status\", \"Run status\", toDisplayStatus(run.status), redactor),\n    fact(\"run.totalEvents\", \"Total events\", run.metadata.totalEvents, redactor),\n    fact(\"run.stepCount\", \"Top-level step count\", run.children.length, redactor),\n    fact(\"run.nodeCount\", \"Total node count\", nodes.length, redactor),\n    fact(\"run.errorNodeCount\", \"Error node count\", countErrorNodes(nodes), redactor),\n    fact(\"run.kinds\", \"Observed kind mix\", topKinds(run), redactor),\n  ];\n  if (run.durationMs !== undefined) {\n    facts.push(fact(\"run.durationMs\", \"Run duration milliseconds\", run.durationMs, redactor));\n  }\n  const slowest = slowestNode(nodes);\n  if (slowest !== undefined) {\n    facts.push(\n      fact(\"run.slowestNode\", \"Slowest observed node\", {\n        name: slowest.node.event.name,\n        kind: slowest.node.event.kind,\n        durationMs: slowest.node.event.durationMs,\n      }, redactor),\n    );\n  }\n  facts.push(...attributeFacts(nodes, redactor));\n  return facts;\n}\n\nfunction buildInferences(run: InspectRunTree, facts: ExplainFact[]): ExplainInference[] {\n  const inferences: ExplainInference[] = [];\n  const errorFact = facts.find((item) => item.id === \"run.errorNodeCount\");\n  const kindFact = facts.find((item) => item.id === \"run.kinds\");\n  const durationFact = facts.find((item) => item.id === \"run.durationMs\");\n  const errorNodeCount =\n    typeof errorFact?.value === \"number\" ? errorFact.value : 0;\n\n  if (run.status === \"error\" || errorNodeCount > 0) {\n    inferences.push({\n      id: \"outcome.error\",\n      label: \"Outcome\",\n      text: \"The run recorded an error status or at least one error node.\",\n      evidence: [\"run.status\", \"run.errorNodeCount\"],\n      confidence: \"deterministic\",\n    });\n  } else if (run.status === \"ok\") {\n    inferences.push({\n      id: \"outcome.success\",\n      label: \"Outcome\",\n      text: \"The run completed without observed error nodes.\",\n      evidence: [\"run.status\", \"run.errorNodeCount\"],\n      confidence: \"deterministic\",\n    });\n  }\n\n  if (kindFact !== undefined) {\n    inferences.push({\n      id: \"shape.kind-mix\",\n      label: \"Trace shape\",\n      text: \"The explanation is based on the observed event kind mix, not generated content.\",\n      evidence: [kindFact.id],\n      confidence: \"deterministic\",\n    });\n  }\n\n  if (durationFact !== undefined) {\n    inferences.push({\n      id: \"timing.duration\",\n      label: \"Timing\",\n      text: \"Timing claims are limited to persisted duration fields in the trace.\",\n      evidence: [durationFact.id],\n      confidence: \"deterministic\",\n    });\n  }\n\n  return inferences;\n}\n\n/**\n * Build a local, deterministic explanation payload from a reader-selected run.\n *\n * This helper performs no network I/O and does not call a model provider.\n */\nexport function buildLocalExplanation(\n  run: InspectRunTree,\n  options: ExplainOptions = {},\n): ExplainResult {\n  const redactionProfile = options.redactionProfile ?? \"local\";\n  const resolved = resolveRedactionProfile(redactionProfile);\n  const redactor = new Redactor({ extraKeys: resolved.extraKeys });\n  const mode = options.mode ?? \"local\";\n  const facts = buildFacts(run, redactor);\n  return {\n    mode,\n    runId: String(redactValue(redactor, \"runId\", run.runId)),\n    ...(run.name !== undefined ? { name: String(redactValue(redactor, \"name\", run.name)) } : {}),\n    ...(run.status !== undefined ? { status: toDisplayStatus(run.status) } : {}),\n    redactionProfile,\n    facts,\n    inferences: mode === \"dry-run\" ? [] : buildInferences(run, facts),\n    notes: [\n      \"Generated locally without provider or network calls.\",\n      \"Facts are observed from normalized trace data; inferences are deterministic labels.\",\n    ],\n  };\n}\n","import type { StepCompletedEvent, StepStartedEvent, TraceEvent } from \"./types.js\";\nimport { extractMetadata } from \"./trace-metadata.js\";\nimport { filterTraces as filterTraceMetas } from \"./trace-filter.js\";\nimport { readTraceEventsFromFile } from \"./storage.js\";\nimport type { TraceMetadata, StepType } from \"./types.js\";\nimport { parseDuration } from \"./utils/duration.js\";\nimport {\n  extractOutcomesFromTraceEvents,\n  parseObservationFilter,\n} from \"./outcomes/index.js\";\n\nexport interface TraceSearchOptions {\n  traceDir: string;\n  since?: string;\n  status?: \"success\" | \"error\" | \"running\" | \"unknown\";\n  kind?: string;\n  type?: string;\n  name?: string;\n  tool?: string;\n  duration?: string;\n  limit?: number;\n  session?: string;\n  correlateGroup?: boolean;\n  observation?: string;\n}\n\nexport interface TraceSearchResult {\n  runId: string;\n  runName?: string;\n  runStatus: string;\n  stepId?: string;\n  stepName?: string;\n  stepType?: string;\n  timestamp?: number;\n  durationMs?: number;\n  matchReason: string;\n  matchedFields: string[];\n  filePath: string;\n  sessionId?: string;\n}\n\nexport interface ParsedDurationFilter {\n  op: \">\" | \">=\" | \"<\" | \"<=\";\n  ms: number;\n}\n\nexport function parseDurationFilter(expr: string): ParsedDurationFilter {\n  const raw = expr.trim();\n  const m = raw.match(/^(>=|<=|>|<)\\s*(.+)$/);\n  if (!m) {\n    throw new Error(\n      `Invalid --duration \"${expr}\". Use forms like >5s, >=500ms, <2m.`,\n    );\n  }\n  const op = m[1] as ParsedDurationFilter[\"op\"];\n  const ms = parseDuration(m[2].trim());\n  return { op, ms };\n}\n\nfunction durationMatches(\n  valueMs: number | undefined,\n  filter: ParsedDurationFilter,\n): boolean {\n  if (valueMs === undefined || !Number.isFinite(valueMs)) return false;\n  switch (filter.op) {\n    case \">\":\n      return valueMs > filter.ms;\n    case \">=\":\n      return valueMs >= filter.ms;\n    case \"<\":\n      return valueMs < filter.ms;\n    case \"<=\":\n      return valueMs <= filter.ms;\n    default:\n      return false;\n  }\n}\n\nfunction normalizeStepTypeFilter(kind?: string, type?: string): string | undefined {\n  const v = (kind ?? type)?.trim().toLowerCase();\n  return v && v !== \"\" ? v : undefined;\n}\n\nfunction nameMatches(hay: string, needle: string): boolean {\n  return hay.toLowerCase().includes(needle.toLowerCase());\n}\n\nexport async function searchTraces(\n  metas: TraceMetadata[],\n  options: TraceSearchOptions,\n): Promise<TraceSearchResult[]> {\n  let filtered = filterTraceMetas(metas, { since: options.since });\n  const stepTypeFilter = normalizeStepTypeFilter(options.kind, options.type);\n  const nameQuery = options.name?.trim();\n  const toolQuery = options.tool?.trim();\n  let durationFilter: ParsedDurationFilter | undefined;\n  if (options.duration) {\n    durationFilter = parseDurationFilter(options.duration);\n  }\n  const limit = options.limit ?? 50;\n  const sessionId = options.session?.trim();\n  const observationStatus = parseObservationFilter(options.observation);\n\n  const hasContentFilter = Boolean(\n    options.status ||\n      stepTypeFilter ||\n      nameQuery ||\n      toolQuery ||\n      durationFilter ||\n      observationStatus,\n  );\n\n  const results: TraceSearchResult[] = [];\n  const sessionLabel = sessionId && sessionId !== \"\" ? sessionId : undefined;\n\n  if (!hasContentFilter) {\n    for (const m of filtered) {\n      results.push({\n        runId: m.runId,\n        runName: m.name,\n        runStatus: m.status,\n        timestamp: m.startedAt,\n        durationMs: m.durationMs,\n        matchReason: sessionLabel\n          ? `trace in session ${sessionLabel}`\n          : \"trace in directory\",\n        matchedFields: sessionLabel ? [\"run\", \"session\"] : [\"run\"],\n        filePath: m.filePath,\n        ...(sessionLabel ? { sessionId: sessionLabel } : {}),\n      });\n    }\n    results.sort((a, b) => {\n      const ta = a.timestamp ?? 0;\n      const tb = b.timestamp ?? 0;\n      if (ta !== tb) return tb - ta;\n      return a.runId.localeCompare(b.runId);\n    });\n    return results.slice(0, limit);\n  }\n\n  for (const m of filtered) {\n    if (options.status && m.status !== options.status) continue;\n\n    let events: TraceEvent[] = [];\n    try {\n      events = await readTraceEventsFromFile(m.filePath);\n    } catch {\n      continue;\n    }\n    if (events.length === 0) continue;\n\n    const runMatches = matchRunLevel(m, {\n      stepTypeFilter,\n      nameQuery,\n      toolQuery,\n      durationFilter,\n      statusFilter: options.status,\n    });\n    results.push(...runMatches);\n\n    const stepMatches = matchStepLevel(m, events, {\n      stepTypeFilter,\n      nameQuery,\n      toolQuery,\n      durationFilter,\n      statusFilter: options.status,\n    });\n    results.push(...stepMatches);\n\n    if (observationStatus) {\n      const outcomes = extractOutcomesFromTraceEvents(events);\n      const matched = outcomes.filter((outcome) => outcome.status === observationStatus);\n      for (const outcome of matched) {\n        results.push({\n          runId: m.runId,\n          runName: m.name,\n          runStatus: m.status,\n          stepName: outcome.name,\n          timestamp: outcome.observedAt,\n          matchReason: `observation status=${outcome.status}`,\n          matchedFields: [\"outcome.status\", \"outcome.name\"],\n          filePath: m.filePath,\n        });\n      }\n    }\n  }\n\n  results.sort((a, b) => {\n    const ta = a.timestamp ?? 0;\n    const tb = b.timestamp ?? 0;\n    // Newest-first so --limit keeps the most recent matches.\n    if (ta !== tb) return tb - ta;\n    const runCmp = a.runId.localeCompare(b.runId);\n    if (runCmp !== 0) return runCmp;\n    return (a.stepName ?? \"\").localeCompare(b.stepName ?? \"\");\n  });\n\n  return results.slice(0, limit);\n}\n\nfunction matchRunLevel(\n  m: TraceMetadata,\n  opts: {\n    stepTypeFilter?: string;\n    nameQuery?: string;\n    toolQuery?: string;\n    durationFilter?: ParsedDurationFilter;\n    statusFilter?: string;\n  },\n): TraceSearchResult[] {\n  // Step-oriented filters are handled only by matchStepLevel.\n  if (opts.stepTypeFilter || opts.toolQuery) return [];\n\n  // Structured run filters are conjunctive: every supplied filter must match.\n  // Previously status/name/duration were OR'd via field accumulation, so\n  // `--name missing --status error` could still emit a status-only run hit (#323).\n  if (opts.statusFilter && m.status !== opts.statusFilter) return [];\n  if (opts.nameQuery && !nameMatches(m.name ?? m.runId, opts.nameQuery)) {\n    return [];\n  }\n  if (\n    opts.durationFilter &&\n    !durationMatches(m.durationMs, opts.durationFilter)\n  ) {\n    return [];\n  }\n\n  const fields: string[] = [];\n  if (opts.statusFilter) fields.push(\"run.status\");\n  if (opts.nameQuery) fields.push(\"run.name\");\n  if (opts.durationFilter) fields.push(\"run.durationMs\");\n  if (fields.length === 0) return [];\n\n  return [\n    {\n      runId: m.runId,\n      runName: m.name,\n      runStatus: m.status,\n      timestamp: m.startedAt,\n      durationMs: m.durationMs,\n      matchReason: `run match: ${fields.join(\", \")}`,\n      matchedFields: fields,\n      filePath: m.filePath,\n    },\n  ];\n}\n\nfunction matchStepLevel(\n  m: TraceMetadata,\n  events: TraceEvent[],\n  opts: {\n    stepTypeFilter?: string;\n    nameQuery?: string;\n    toolQuery?: string;\n    durationFilter?: ParsedDurationFilter;\n    statusFilter?: string;\n  },\n): TraceSearchResult[] {\n  const out: TraceSearchResult[] = [];\n  const started = new Map<string, StepStartedEvent>();\n\n  for (const e of events) {\n    if (e.event === \"step_started\") {\n      started.set((e as StepStartedEvent).stepId, e as StepStartedEvent);\n    }\n  }\n\n  for (const e of events) {\n    if (e.event !== \"step_completed\") continue;\n    const c = e as StepCompletedEvent;\n    const s = started.get(c.stepId);\n    if (!s) continue;\n\n    const fields: string[] = [];\n    const stepType = s.type as StepType;\n\n    if (opts.stepTypeFilter && stepType !== opts.stepTypeFilter) {\n      continue;\n    }\n\n    const hasStepFilters =\n      opts.stepTypeFilter ||\n      opts.nameQuery ||\n      opts.toolQuery ||\n      opts.durationFilter ||\n      opts.statusFilter === \"error\" ||\n      opts.statusFilter === \"success\";\n\n    if (!hasStepFilters) continue;\n\n    if (opts.statusFilter === \"error\" && c.status === \"error\") {\n      fields.push(\"step.status\");\n    } else if (opts.statusFilter === \"success\" && c.status === \"success\") {\n      fields.push(\"step.status\");\n    } else if (opts.statusFilter === \"error\" || opts.statusFilter === \"success\") {\n      continue;\n    }\n\n    if (opts.nameQuery) {\n      if (!nameMatches(s.name, opts.nameQuery)) continue;\n      fields.push(\"step.name\");\n    }\n    if (opts.toolQuery) {\n      const toolName =\n        typeof s.metadata?.toolName === \"string\"\n          ? s.metadata.toolName\n          : s.name;\n      if (!nameMatches(toolName, opts.toolQuery)) continue;\n      fields.push(\"step.tool\");\n    }\n    if (opts.durationFilter) {\n      if (!durationMatches(c.durationMs, opts.durationFilter)) continue;\n      fields.push(\"step.durationMs\");\n    }\n    if (opts.stepTypeFilter) {\n      fields.push(\"step.type\");\n    }\n\n    if (fields.length === 0) continue;\n\n    out.push({\n      runId: m.runId,\n      runName: m.name,\n      runStatus: m.status,\n      stepId: c.stepId,\n      stepName: s.name,\n      stepType,\n      timestamp: s.startTime ?? s.timestamp,\n      durationMs: c.durationMs,\n      matchReason: `step match: ${fields.join(\", \")}`,\n      matchedFields: fields,\n      filePath: m.filePath,\n    });\n  }\n\n  return out;\n}\n\nexport async function loadTraceMetadataList(\n  _traceDir: string,\n  fileNames: string[],\n  getPath: (fileName: string) => string,\n): Promise<TraceMetadata[]> {\n  const metas: TraceMetadata[] = [];\n  for (const fileName of fileNames) {\n    try {\n      const filePath = getPath(fileName);\n      const meta = await extractMetadata(filePath);\n      metas.push(meta);\n    } catch {\n      /* skip */\n    }\n  }\n  return metas;\n}\n","import type { SessionWorkflowMetadata } from \"./types.js\";\n\nfunction isNonEmptyString(value: unknown): value is string {\n  return typeof value === \"string\" && value.trim() !== \"\";\n}\n\nfunction finitePositiveInt(value: unknown): number | undefined {\n  if (typeof value !== \"number\" || !Number.isFinite(value) || value < 1) {\n    return undefined;\n  }\n  return Math.trunc(value);\n}\n\n/** Extracts session/workflow metadata from a run metadata or attributes bag. */\nexport function extractSessionWorkflowMetadata(\n  record: Record<string, unknown> | undefined,\n): SessionWorkflowMetadata | undefined {\n  if (!record) return undefined;\n\n  const out: SessionWorkflowMetadata = {};\n  let found = false;\n\n  const assignString = (\n    key: Exclude<keyof SessionWorkflowMetadata, \"attempt\" | \"attemptNumber\">,\n    value: unknown,\n  ): void => {\n    if (isNonEmptyString(value)) {\n      out[key] = value.trim();\n      found = true;\n    }\n  };\n\n  assignString(\"sessionId\", record.sessionId);\n  assignString(\"conversationId\", record.conversationId);\n  assignString(\"groupId\", record.groupId);\n  assignString(\"parentGroupId\", record.parentGroupId);\n  assignString(\"retryOf\", record.retryOf);\n  assignString(\"retryReason\", record.retryReason);\n  assignString(\"handoffFrom\", record.handoffFrom);\n  assignString(\"handoffTo\", record.handoffTo);\n  assignString(\"subAgentId\", record.subAgentId);\n  assignString(\"subAgentName\", record.subAgentName);\n  assignString(\"jobId\", record.jobId);\n  assignString(\"queueName\", record.queueName);\n  assignString(\"workflowName\", record.workflowName);\n  assignString(\"workflowStep\", record.workflowStep);\n  assignString(\"toolCallId\", record.toolCallId);\n  assignString(\"mcpToolCallId\", record.mcpToolCallId);\n  assignString(\"linkedStepId\", record.linkedStepId);\n  assignString(\"operationId\", record.operationId);\n  assignString(\"attemptId\", record.attemptId);\n  assignString(\"fallbackOf\", record.fallbackOf);\n  assignString(\"idempotencyKey\", record.idempotencyKey);\n  assignString(\"correlationId\", record.correlationId);\n  assignString(\"requestId\", record.requestId);\n  assignString(\"decisionId\", record.decisionId);\n\n  const attempt = finitePositiveInt(record.attempt);\n  if (attempt !== undefined) {\n    out.attempt = attempt;\n    found = true;\n  }\n  const attemptNumber = finitePositiveInt(record.attemptNumber);\n  if (attemptNumber !== undefined) {\n    out.attemptNumber = attemptNumber;\n    found = true;\n  }\n\n  return found ? out : undefined;\n}\n\nexport function sessionKeyForRun(\n  meta: SessionWorkflowMetadata | undefined,\n  options?: { correlateByGroupId?: boolean },\n): string | undefined {\n  if (meta?.sessionId) return meta.sessionId;\n  if (options?.correlateByGroupId && meta?.groupId) {\n    return `group:${meta.groupId}`;\n  }\n  return undefined;\n}\n","import { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type {\n  EnrichSessionSummaryOptions,\n  SessionCheckSummary,\n  SessionLastError,\n  SessionRunRecord,\n  SessionStatus,\n  SessionSummary,\n} from \"./types.js\";\n\nconst DEFAULT_STALE_THRESHOLD_MS = 86_400_000;\n\nconst EXPLICIT_STATUS_PRIORITY: Record<string, number> = {\n  error: 5,\n  waiting_input: 4,\n  idle: 3,\n  stale: 2,\n  completed: 1,\n};\n\nconst EXPLICIT_SESSION_STATUSES = new Set<string>([\n  \"running\",\n  \"waiting_input\",\n  \"idle\",\n  \"completed\",\n  \"error\",\n  \"stale\",\n  \"unknown\",\n]);\n\nfunction isExplicitSessionStatus(value: unknown): value is SessionStatus {\n  return typeof value === \"string\" && EXPLICIT_SESSION_STATUSES.has(value);\n}\n\nfunction activityMs(run: SessionRunRecord): number {\n  return run.endedAt ?? run.startedAt ?? 0;\n}\n\nfunction latestActivityMs(runs: readonly SessionRunRecord[]): number {\n  let latest = 0;\n  for (const run of runs) {\n    const ms = activityMs(run);\n    if (ms > latest) latest = ms;\n  }\n  return latest;\n}\n\nfunction earliestStart(runs: readonly SessionRunRecord[]): number | undefined {\n  let earliest: number | undefined;\n  for (const run of runs) {\n    if (run.startedAt === undefined) continue;\n    if (earliest === undefined || run.startedAt < earliest) {\n      earliest = run.startedAt;\n    }\n  }\n  return earliest;\n}\n\nfunction latestEndWhenAllEnded(runs: readonly SessionRunRecord[]): number | undefined {\n  if (runs.length === 0) return undefined;\n  let latest: number | undefined;\n  for (const run of runs) {\n    if (run.endedAt === undefined) return undefined;\n    if (latest === undefined || run.endedAt > latest) latest = run.endedAt;\n  }\n  return latest;\n}\n\nfunction pickExplicitStatus(runs: readonly SessionRunRecord[]): SessionStatus | undefined {\n  let best: SessionStatus | undefined;\n  let bestPriority = 0;\n  for (const run of runs) {\n    const raw = run.metadata?.sessionStatus;\n    if (!isExplicitSessionStatus(raw)) continue;\n    const priority = EXPLICIT_STATUS_PRIORITY[raw] ?? 0;\n    if (priority > bestPriority) {\n      bestPriority = priority;\n      best = raw;\n    }\n  }\n  return best;\n}\n\nfunction deriveLastError(runs: readonly SessionRunRecord[]): SessionLastError | undefined {\n  const errorRuns = runs\n    .filter((run) => run.status === \"error\")\n    .sort((a, b) => activityMs(b) - activityMs(a));\n  const latest = errorRuns[0];\n  if (!latest) return undefined;\n\n  const meta = latest.metadata ?? {};\n  const message =\n    typeof meta.errorMessage === \"string\" && meta.errorMessage.trim() !== \"\"\n      ? meta.errorMessage.trim()\n      : (latest.name ?? latest.runId);\n  const code =\n    typeof meta.errorCode === \"string\" && meta.errorCode.trim() !== \"\"\n      ? meta.errorCode.trim()\n      : undefined;\n\n  return { runId: latest.runId, message, code };\n}\n\nfunction deriveCheckSummary(\n  runs: readonly SessionRunRecord[],\n): SessionCheckSummary | undefined {\n  let pass = 0;\n  let fail = 0;\n  let warn = 0;\n  let found = false;\n\n  for (const run of runs) {\n    const summary = run.metadata?.checkSummary;\n    if (!summary || typeof summary !== \"object\") continue;\n    const record = summary as Record<string, unknown>;\n    if (typeof record.pass === \"number\") {\n      pass += record.pass;\n      found = true;\n    }\n    if (typeof record.fail === \"number\") {\n      fail += record.fail;\n      found = true;\n    }\n    if (typeof record.warn === \"number\") {\n      warn += record.warn;\n      found = true;\n    }\n  }\n\n  return found ? { pass, fail, warn } : undefined;\n}\n\nfunction deriveObservationSummary(runs: readonly SessionRunRecord[]): string | undefined {\n  for (const run of [...runs].sort((a, b) => activityMs(b) - activityMs(a))) {\n    const value = run.metadata?.observationSummary;\n    if (typeof value === \"string\" && value.trim() !== \"\") {\n      return value.trim();\n    }\n  }\n  return undefined;\n}\n\n/** Derives session status from run records per the v4.2 RFC (no timestamp-only causality). */\nexport function deriveSessionStatus(\n  runs: readonly SessionRunRecord[],\n  options: EnrichSessionSummaryOptions = {},\n): SessionStatus {\n  if (runs.length === 0) return \"unknown\";\n\n  if (runs.some((run) => run.status === \"running\")) return \"running\";\n\n  const explicit = pickExplicitStatus(runs);\n  if (explicit && explicit !== \"running\") return explicit;\n\n  if (runs.some((run) => run.status === \"error\")) return \"error\";\n\n  if (runs.every((run) => run.status === \"success\")) return \"completed\";\n\n  const nowMs = options.nowMs ?? Date.now();\n  const staleThresholdMs = options.staleThresholdMs ?? DEFAULT_STALE_THRESHOLD_MS;\n  const lastMs = latestActivityMs(runs);\n  if (lastMs > 0 && nowMs - lastMs > staleThresholdMs) return \"stale\";\n\n  return \"unknown\";\n}\n\n/**\n * Enriches a session summary with v4.2 derived fields (status, timing, errors).\n * Pure function; does not read trace files.\n */\nexport function enrichSessionSummary(\n  summary: Omit<\n    SessionSummary,\n    | \"status\"\n    | \"lastActivity\"\n    | \"retryCount\"\n    | \"startedAt\"\n    | \"endedAt\"\n    | \"durationMs\"\n    | \"correlationId\"\n    | \"jobId\"\n    | \"workflowId\"\n    | \"lastError\"\n    | \"observationSummary\"\n    | \"checkSummary\"\n  >,\n  runs: readonly SessionRunRecord[],\n  options: EnrichSessionSummaryOptions = {},\n): SessionSummary {\n  const sessionRuns = runs\n    .filter((run) => summary.runIds.includes(run.runId))\n    .sort((a, b) => a.runId.localeCompare(b.runId));\n\n  const startedAt = earliestStart(sessionRuns);\n  const endedAt = latestEndWhenAllEnded(sessionRuns);\n  const durationMs =\n    startedAt !== undefined && endedAt !== undefined ? endedAt - startedAt : undefined;\n\n  let correlationId: string | undefined;\n  let jobId: string | undefined;\n  let workflowId: string | undefined;\n  for (const run of sessionRuns) {\n    const meta = extractSessionWorkflowMetadata(run.metadata);\n    if (!correlationId && meta?.correlationId) correlationId = meta.correlationId;\n    if (!jobId && meta?.jobId) jobId = meta.jobId;\n    if (!workflowId && meta?.workflowName) workflowId = meta.workflowName;\n    else if (!workflowId && meta?.workflowStep) workflowId = meta.workflowStep;\n  }\n\n  const lastMs = latestActivityMs(sessionRuns);\n  const lastActivity =\n    lastMs > 0 ? new Date(lastMs).toISOString() : new Date(0).toISOString();\n\n  const retryCount = summary.retries.filter(\n    (retry) => retry.retryOf !== undefined || (retry.attempt ?? 0) > 1,\n  ).length;\n\n  return {\n    ...summary,\n    status: deriveSessionStatus(sessionRuns, options),\n    startedAt,\n    endedAt,\n    durationMs,\n    correlationId,\n    jobId,\n    workflowId,\n    lastError: deriveLastError(sessionRuns),\n    lastActivity,\n    retryCount,\n    observationSummary: deriveObservationSummary(sessionRuns),\n    checkSummary: deriveCheckSummary(sessionRuns),\n  };\n}\n","import type {\n  ActivityEntry,\n  ActivitySummary,\n  BuildActivitySummaryOptions,\n  SessionIndex,\n  SessionStatus,\n  SessionSummary,\n} from \"./types.js\";\n\nfunction statusLine(session: SessionSummary): string {\n  const name =\n    session.workflowId ??\n    session.correlationId ??\n    session.sessionId;\n  const status = session.status;\n  if (session.lastError) {\n    return `${name} session ${session.sessionId} failed at ${session.lastError.message}`;\n  }\n  if (session.observationSummary) {\n    return `${name} session ${session.sessionId} ${status} with observation warning`;\n  }\n  return `${name} session ${session.sessionId} ${status}`;\n}\n\nfunction parseSinceMs(since: string | undefined, nowMs: number): number {\n  if (!since || since.trim() === \"\") return nowMs - 7 * 86_400_000;\n  const trimmed = since.trim().toLowerCase();\n  const match = /^(\\d+)([smhd])$/.exec(trimmed);\n  if (!match) return nowMs - 7 * 86_400_000;\n  const amount = Number.parseInt(match[1]!, 10);\n  const unit = match[2];\n  const mult =\n    unit === \"s\" ? 1000 : unit === \"m\" ? 60_000 : unit === \"h\" ? 3_600_000 : 86_400_000;\n  return nowMs - amount * mult;\n}\n\nfunction isFailed(status: SessionStatus): boolean {\n  return status === \"error\";\n}\n\nfunction isStale(status: SessionStatus): boolean {\n  return status === \"stale\";\n}\n\nfunction guardrailWarnings(session: SessionSummary): number {\n  const summary = session.checkSummary;\n  if (!summary) return 0;\n  return summary.warn;\n}\n\n/**\n * Builds a deterministic activity summary from a session index (v4.2).\n * Read-only; does not mutate traces or invent relationships.\n */\nexport function buildActivitySummary(\n  index: SessionIndex,\n  options: BuildActivitySummaryOptions = {},\n): ActivitySummary {\n  const nowMs = options.nowMs ?? Date.now();\n  const sinceMs = parseSinceMs(options.since, nowMs);\n  const sinceIso = new Date(sinceMs).toISOString();\n  const limit =\n    Number.isInteger(options.limit) && options.limit! > 0 ? options.limit! : 20;\n\n  const inWindow = index.sessions.filter((session) => {\n    const activityMs = Date.parse(session.lastActivity);\n    return Number.isFinite(activityMs) && activityMs >= sinceMs;\n  });\n\n  const entries: ActivityEntry[] = [...inWindow]\n    .sort((a, b) => Date.parse(b.lastActivity) - Date.parse(a.lastActivity))\n    .slice(0, limit)\n    .map((session) => ({\n      sessionId: session.sessionId,\n      status: session.status,\n      summary: statusLine(session),\n      lastActivity: session.lastActivity,\n      runCount: session.runIds.length,\n    }));\n\n  let failed = 0;\n  let stale = 0;\n  let guardrailWarningTotal = 0;\n  for (const session of inWindow) {\n    if (isFailed(session.status)) failed += 1;\n    if (isStale(session.status)) stale += 1;\n    guardrailWarningTotal += guardrailWarnings(session);\n  }\n\n  return {\n    since: sinceIso,\n    sessions: inWindow.length,\n    failed,\n    stale,\n    guardrailWarnings: guardrailWarningTotal,\n    entries,\n  };\n}\n\n/** Renders a human activity summary for terminal output. */\nexport function renderActivitySummaryHuman(\n  summary: ActivitySummary,\n  options?: { nowMs?: number },\n): string {\n  const lines: string[] = [];\n  const nowMs = options?.nowMs ?? Date.now();\n  const todayStart = new Date(nowMs);\n  todayStart.setHours(0, 0, 0, 0);\n  const todayMs = todayStart.getTime();\n\n  const today = summary.entries.filter(\n    (entry) => Date.parse(entry.lastActivity) >= todayMs,\n  );\n  if (today.length > 0) {\n    lines.push(\"Today\");\n    for (const entry of today) {\n      lines.push(`  ${entry.summary}`);\n    }\n    lines.push(\"\");\n  }\n\n  lines.push(`Since ${summary.since}`);\n  lines.push(`  ${summary.sessions} sessions`);\n  lines.push(`  ${summary.failed} failed`);\n  lines.push(`  ${summary.stale} stale`);\n  lines.push(`  ${summary.guardrailWarnings} guardrail warnings`);\n\n  return lines.join(\"\\n\");\n}\n","import type { TraceMetadataStatus } from \"../types.js\";\n\n/** Known session/workflow metadata keys (v2.4 RFC). */\nexport const SESSION_WORKFLOW_KEYS = [\n  \"sessionId\",\n  \"conversationId\",\n  \"groupId\",\n  \"parentGroupId\",\n  \"attempt\",\n  \"retryOf\",\n  \"retryReason\",\n  \"handoffFrom\",\n  \"handoffTo\",\n  \"subAgentId\",\n  \"subAgentName\",\n  \"jobId\",\n  \"queueName\",\n  \"workflowName\",\n  \"workflowStep\",\n  \"toolCallId\",\n  \"mcpToolCallId\",\n  \"linkedStepId\",\n  \"operationId\",\n  \"attemptId\",\n  \"attemptNumber\",\n  \"fallbackOf\",\n  \"idempotencyKey\",\n  \"correlationId\",\n  \"requestId\",\n  \"decisionId\",\n] as const;\n\nexport type SessionWorkflowKey = (typeof SESSION_WORKFLOW_KEYS)[number];\n\nexport type SessionConfidence = \"explicit\" | \"correlated\" | \"heuristic\" | \"unknown\";\n\nexport type SessionEdgeSource =\n  | \"manual\"\n  | \"adapter\"\n  | \"json-log\"\n  | \"log4js\"\n  | \"mcp-client\"\n  | \"inferred\";\n\nexport interface SessionWorkflowMetadata {\n  sessionId?: string;\n  conversationId?: string;\n  groupId?: string;\n  parentGroupId?: string;\n  attempt?: number;\n  retryOf?: string;\n  retryReason?: string;\n  handoffFrom?: string;\n  handoffTo?: string;\n  subAgentId?: string;\n  subAgentName?: string;\n  jobId?: string;\n  queueName?: string;\n  workflowName?: string;\n  workflowStep?: string;\n  toolCallId?: string;\n  mcpToolCallId?: string;\n  linkedStepId?: string;\n  operationId?: string;\n  attemptId?: string;\n  attemptNumber?: number;\n  fallbackOf?: string;\n  idempotencyKey?: string;\n  correlationId?: string;\n  requestId?: string;\n  decisionId?: string;\n}\n\nexport interface SessionRunRecord {\n  runId: string;\n  name?: string;\n  status?: TraceMetadataStatus;\n  startedAt?: number;\n  endedAt?: number;\n  durationMs?: number;\n  filePath?: string;\n  metadata?: Record<string, unknown>;\n}\n\nexport interface SessionWarning {\n  code: string;\n  message: string;\n  runId?: string;\n  sessionId?: string;\n}\n\nexport interface HandoffEdge {\n  from: string;\n  to: string;\n  source: SessionEdgeSource;\n  confidence: SessionConfidence;\n}\n\nexport interface RetryLink {\n  runId: string;\n  retryOf?: string;\n  attempt?: number;\n  source: SessionEdgeSource;\n  confidence: SessionConfidence;\n}\n\nexport interface SessionGroup {\n  groupId: string;\n  parentGroupId?: string;\n  runIds: string[];\n}\n\nexport interface CriticalPathStep {\n  runId: string;\n  name?: string;\n  startedAt?: number;\n  durationMs?: number;\n  source: SessionEdgeSource;\n  confidence: SessionConfidence;\n}\n\n/** Session lifecycle status (v4.2 RFC). */\nexport type SessionStatus =\n  | \"running\"\n  | \"waiting_input\"\n  | \"idle\"\n  | \"completed\"\n  | \"error\"\n  | \"stale\"\n  | \"unknown\";\n\nexport interface SessionLastError {\n  runId: string;\n  message: string;\n  code?: string;\n}\n\nexport interface SessionCheckSummary {\n  pass: number;\n  fail: number;\n  warn: number;\n}\n\nexport interface EnrichSessionSummaryOptions {\n  /** Reference clock for staleness (default Date.now()). */\n  nowMs?: number;\n  /** Inactivity threshold before marking a session stale (default 24h). */\n  staleThresholdMs?: number;\n}\n\nexport interface ActivityEntry {\n  sessionId: string;\n  status: SessionStatus;\n  summary: string;\n  lastActivity: string;\n  runCount: number;\n}\n\nexport interface ActivitySummary {\n  since: string;\n  sessions: number;\n  failed: number;\n  stale: number;\n  guardrailWarnings: number;\n  entries: ActivityEntry[];\n}\n\nexport interface BuildActivitySummaryOptions {\n  /** Duration window (e.g. 7d, 24h). Default 7d. */\n  since?: string;\n  /** Reference clock (default Date.now()). */\n  nowMs?: number;\n  /** Max entries returned (default 20). */\n  limit?: number;\n}\n\nexport interface SessionSummary {\n  sessionId: string;\n  runIds: string[];\n  groups: SessionGroup[];\n  handoffs: HandoffEdge[];\n  retries: RetryLink[];\n  criticalPath: CriticalPathStep[];\n  /** Derived session status (v4.2+). */\n  status: SessionStatus;\n  /** Earliest run start time in the session. */\n  startedAt?: number;\n  /** Latest run end time when all runs have ended. */\n  endedAt?: number;\n  /** endedAt - startedAt when both are present. */\n  durationMs?: number;\n  correlationId?: string;\n  jobId?: string;\n  workflowId?: string;\n  lastError?: SessionLastError;\n  /** ISO-8601 timestamp of the most recent run activity. */\n  lastActivity: string;\n  retryCount: number;\n  observationSummary?: string;\n  checkSummary?: SessionCheckSummary;\n}\n\nexport interface SessionIndex {\n  runs: SessionRunRecord[];\n  sessions: SessionSummary[];\n  unscopedRunIds: string[];\n  warnings: SessionWarning[];\n}\n\nexport interface BuildSessionIndexOptions {\n  /** When true, group runs that share only `groupId` under a synthetic session key. */\n  correlateByGroupId?: boolean;\n  /** Reference clock for session staleness (v4.2+). */\n  nowMs?: number;\n  /** Inactivity threshold before marking a session stale (v4.2+, default 24h). */\n  staleThresholdMs?: number;\n}\n","import { readTraceEventsFromFile } from \"../storage.js\";\nimport type { TraceMetadata } from \"../types.js\";\nimport type { SessionRunRecord } from \"./types.js\";\n\n/** Enriches trace metadata with run_started metadata for session indexing. */\nexport async function enrichSessionRunRecord(\n  meta: TraceMetadata,\n): Promise<SessionRunRecord> {\n  let metadata: Record<string, unknown> | undefined;\n  try {\n    const events = await readTraceEventsFromFile(meta.filePath);\n    for (const event of events) {\n      if (event.event !== \"run_started\") continue;\n      if (event.metadata && typeof event.metadata === \"object\") {\n        metadata = event.metadata as Record<string, unknown>;\n      }\n      break;\n    }\n  } catch {\n    /* skip */\n  }\n\n  return {\n    runId: meta.runId,\n    name: meta.name,\n    status: meta.status,\n    startedAt: meta.startedAt,\n    endedAt: meta.endedAt,\n    durationMs: meta.durationMs,\n    filePath: meta.filePath,\n    metadata,\n  };\n}\n\n/** Builds session run records from extracted trace metadata rows. */\nexport async function loadSessionRunRecords(\n  metas: readonly TraceMetadata[],\n): Promise<SessionRunRecord[]> {\n  const out: SessionRunRecord[] = [];\n  for (const meta of metas) {\n    out.push(await enrichSessionRunRecord(meta));\n  }\n  return out;\n}\n","import type { TraceMetadata } from \"../types.js\";\nimport { buildSessionIndex } from \"./index.js\";\nimport { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type { SessionRunRecord, SessionWarning } from \"./types.js\";\n\nexport interface SessionScopeOptions {\n  sessionId?: string;\n  groupId?: string;\n  correlateByGroupId?: boolean;\n}\n\nexport interface SessionScopeResult {\n  metas: TraceMetadata[];\n  scopeLabel: string;\n  scopeKind: \"session\" | \"group\";\n  runIds: string[];\n  warnings: SessionWarning[];\n  notFound: boolean;\n}\n\nfunction metaToSessionRunRecord(meta: TraceMetadata): SessionRunRecord {\n  return {\n    runId: meta.runId,\n    name: meta.name,\n    status: meta.status,\n    startedAt: meta.startedAt,\n    endedAt: meta.endedAt,\n    durationMs: meta.durationMs,\n    filePath: meta.filePath,\n    metadata: undefined,\n  };\n}\n\n/** Filters trace metadata rows to runs in a session or group scope. */\nexport function filterMetasBySessionScope(\n  metas: readonly TraceMetadata[],\n  records: readonly SessionRunRecord[],\n  options: SessionScopeOptions,\n): SessionScopeResult {\n  const sessionId = options.sessionId?.trim();\n  const groupId = options.groupId?.trim();\n  const warnings: SessionWarning[] = [];\n\n  if (sessionId) {\n    const index = buildSessionIndex(records, {\n      correlateByGroupId: options.correlateByGroupId === true,\n    });\n    warnings.push(...index.warnings);\n    const session = index.sessions.find((item) => item.sessionId === sessionId);\n    if (!session) {\n      return {\n        metas: [],\n        scopeLabel: sessionId,\n        scopeKind: \"session\",\n        runIds: [],\n        warnings,\n        notFound: true,\n      };\n    }\n    const runIdSet = new Set(session.runIds);\n    const filtered = metas.filter((meta) => runIdSet.has(meta.runId));\n    return {\n      metas: filtered,\n      scopeLabel: sessionId,\n      scopeKind: \"session\",\n      runIds: session.runIds,\n      warnings,\n      notFound: false,\n    };\n  }\n\n  if (groupId) {\n    const runIds = records\n      .filter((run) => extractSessionWorkflowMetadata(run.metadata)?.groupId === groupId)\n      .map((run) => run.runId)\n      .sort();\n    if (runIds.length === 0) {\n      return {\n        metas: [],\n        scopeLabel: groupId,\n        scopeKind: \"group\",\n        runIds: [],\n        warnings,\n        notFound: true,\n      };\n    }\n    const runIdSet = new Set(runIds);\n    return {\n      metas: metas.filter((meta) => runIdSet.has(meta.runId)),\n      scopeLabel: groupId,\n      scopeKind: \"group\",\n      runIds,\n      warnings,\n      notFound: false,\n    };\n  }\n\n  return {\n    metas: [...metas],\n    scopeLabel: \"\",\n    scopeKind: \"session\",\n    runIds: [],\n    warnings,\n    notFound: false,\n  };\n}\n\n/** Lightweight metadata rows for scope resolution when run_started metadata is absent. */\nexport function traceMetasToSessionRunRecords(\n  metas: readonly TraceMetadata[],\n): SessionRunRecord[] {\n  return metas.map(metaToSessionRunRecord);\n}\n","import { buildSessionIndex } from \"./index.js\";\nimport { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type { BuildSessionIndexOptions, SessionRunRecord } from \"./types.js\";\n\nexport type SessionCohortKind = \"session\" | \"group\";\n\nexport interface SessionCohort {\n  key: string;\n  kind: SessionCohortKind;\n  runIds: string[];\n}\n\nexport interface GroupSessionCohortsOptions extends BuildSessionIndexOptions {\n  groupBy?: \"session\" | \"group\";\n}\n\n/**\n * Groups runs into session or group cohort buckets for local search/check aggregation.\n * Deterministic; does not infer causality from timestamps.\n */\nexport function groupSessionCohorts(\n  runs: readonly SessionRunRecord[],\n  options: GroupSessionCohortsOptions = {},\n): SessionCohort[] {\n  const groupBy = options.groupBy ?? \"session\";\n  const cohorts: SessionCohort[] = [];\n\n  if (groupBy === \"session\") {\n    const index = buildSessionIndex(runs, options);\n    for (const session of index.sessions) {\n      cohorts.push({\n        key: session.sessionId,\n        kind: \"session\",\n        runIds: [...session.runIds],\n      });\n    }\n    if (index.unscopedRunIds.length > 0) {\n      cohorts.push({\n        key: \"__unscoped__\",\n        kind: \"session\",\n        runIds: [...index.unscopedRunIds],\n      });\n    }\n    return cohorts.sort((a, b) => a.key.localeCompare(b.key));\n  }\n\n  const byGroup = new Map<string, string[]>();\n  const unscoped: string[] = [];\n\n  for (const run of runs) {\n    const groupId = extractSessionWorkflowMetadata(run.metadata)?.groupId;\n    if (!groupId) {\n      unscoped.push(run.runId);\n      continue;\n    }\n    const bucket = byGroup.get(groupId) ?? [];\n    bucket.push(run.runId);\n    byGroup.set(groupId, bucket);\n  }\n\n  for (const [key, runIds] of [...byGroup.entries()].sort(([a], [b]) =>\n    a.localeCompare(b),\n  )) {\n    cohorts.push({\n      key,\n      kind: \"group\",\n      runIds: runIds.sort(),\n    });\n  }\n\n  if (unscoped.length > 0) {\n    cohorts.push({\n      key: \"__unscoped__\",\n      kind: \"group\",\n      runIds: unscoped.sort(),\n    });\n  }\n\n  return cohorts;\n}\n","import type {\n  TraceCheckDiagnostic,\n  TraceCheckFinding,\n  TraceCheckResult,\n  TraceCheckRuleExecution,\n  TraceCheckStatus,\n  TraceCheckSummary,\n} from \"../checks/index.js\";\nimport type { SessionWarning } from \"./types.js\";\n\nexport interface TraceSessionCheckResult extends TraceCheckResult {\n  scopeKind: \"session\" | \"group\";\n  scopeLabel: string;\n  runIds: string[];\n  runResults: Array<{ runId: string; status: TraceCheckStatus }>;\n  sessionWarnings?: SessionWarning[];\n}\n\nfunction emptySummary(): TraceCheckSummary {\n  return { passed: 0, failed: 0, warnings: 0, errors: 0, rulesEvaluated: 0 };\n}\n\nfunction mergeSummary(\n  target: TraceCheckSummary,\n  source: TraceCheckSummary,\n): TraceCheckSummary {\n  return {\n    passed: target.passed + source.passed,\n    failed: target.failed + source.failed,\n    warnings: target.warnings + source.warnings,\n    errors: target.errors + source.errors,\n    rulesEvaluated: target.rulesEvaluated + source.rulesEvaluated,\n  };\n}\n\nfunction sessionDiagnostic(\n  code: \"AI_CHECK_INVALID_ARGUMENTS\" | \"AI_CHECK_TRACE_UNREADABLE\",\n  message: string,\n): TraceCheckDiagnostic {\n  return { code, message, severity: \"error\" };\n}\n\n/** Aggregates per-run check results for a session or group scope. */\nexport function aggregateSessionCheckResults(\n  perRun: readonly TraceCheckResult[],\n  scope: {\n    scopeKind: \"session\" | \"group\";\n    scopeLabel: string;\n    runIds: string[];\n    sessionWarnings?: SessionWarning[];\n    notFound?: boolean;\n    empty?: boolean;\n  },\n): TraceSessionCheckResult {\n  if (scope.notFound) {\n    return {\n      ok: false,\n      status: \"error\",\n      format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n      scopeKind: scope.scopeKind,\n      scopeLabel: scope.scopeLabel,\n      runIds: [],\n      runResults: [],\n      summary: { ...emptySummary(), errors: 1 },\n      findings: [],\n      diagnostics: [\n        sessionDiagnostic(\n          \"AI_CHECK_INVALID_ARGUMENTS\",\n          `${scope.scopeKind} not found: ${scope.scopeLabel}`,\n        ),\n      ],\n      ruleExecutions: [],\n      ...(scope.sessionWarnings?.length\n        ? { sessionWarnings: [...scope.sessionWarnings] }\n        : {}),\n    };\n  }\n\n  if (scope.empty || perRun.length === 0) {\n    return {\n      ok: false,\n      status: \"error\",\n      format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n      scopeKind: scope.scopeKind,\n      scopeLabel: scope.scopeLabel,\n      runIds: scope.runIds,\n      runResults: [],\n      summary: { ...emptySummary(), errors: 1 },\n      findings: [],\n      diagnostics: [\n        sessionDiagnostic(\n          \"AI_CHECK_TRACE_UNREADABLE\",\n          `No readable traces in ${scope.scopeKind}: ${scope.scopeLabel}`,\n        ),\n      ],\n      ruleExecutions: [],\n      ...(scope.sessionWarnings?.length\n        ? { sessionWarnings: [...scope.sessionWarnings] }\n        : {}),\n    };\n  }\n\n  let summary = emptySummary();\n  const findings: TraceCheckFinding[] = [];\n  const diagnostics: TraceCheckDiagnostic[] = [];\n  const ruleExecutions: TraceCheckRuleExecution[] = [];\n  const runResults: Array<{ runId: string; status: TraceCheckStatus }> = [];\n\n  for (const result of perRun) {\n    summary = mergeSummary(summary, result.summary);\n    findings.push(...result.findings);\n    diagnostics.push(...result.diagnostics);\n    ruleExecutions.push(...(result.ruleExecutions ?? []));\n    if (result.runId) {\n      runResults.push({ runId: result.runId, status: result.status });\n    }\n  }\n\n  runResults.sort((a, b) => a.runId.localeCompare(b.runId));\n  findings.sort((a, b) => {\n    const runCmp = (a.evidence[0]?.runId ?? \"\").localeCompare(\n      b.evidence[0]?.runId ?? \"\",\n    );\n    if (runCmp !== 0) return runCmp;\n    return a.ruleId.localeCompare(b.ruleId);\n  });\n  ruleExecutions.sort((a, b) => {\n    const runCmp = (a.runId ?? \"\").localeCompare(b.runId ?? \"\");\n    if (runCmp !== 0) return runCmp;\n    return a.ruleId.localeCompare(b.ruleId);\n  });\n\n  const hasErrors = diagnostics.some((item) => item.severity === \"error\");\n  const status: TraceCheckStatus = hasErrors\n    ? \"error\"\n    : summary.failed > 0\n      ? \"fail\"\n      : \"pass\";\n\n  return {\n    ok: status === \"pass\",\n    status,\n    format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n    scopeKind: scope.scopeKind,\n    scopeLabel: scope.scopeLabel,\n    runIds: scope.runIds,\n    runResults,\n    summary,\n    findings,\n    diagnostics,\n    ruleExecutions,\n    ...(scope.sessionWarnings?.length\n      ? { sessionWarnings: [...scope.sessionWarnings] }\n      : {}),\n  };\n}\n","import {\n  extractSessionWorkflowMetadata,\n  sessionKeyForRun,\n} from \"./metadata.js\";\nimport { enrichSessionSummary } from \"./status.js\";\nimport type {\n  BuildSessionIndexOptions,\n  CriticalPathStep,\n  HandoffEdge,\n  RetryLink,\n  SessionGroup,\n  SessionIndex,\n  SessionRunRecord,\n  SessionSummary,\n  SessionWarning,\n  SessionWorkflowMetadata,\n} from \"./types.js\";\n\nfunction compareRuns(a: SessionRunRecord, b: SessionRunRecord): number {\n  const aStart = a.startedAt ?? 0;\n  const bStart = b.startedAt ?? 0;\n  if (aStart !== bStart) return aStart - bStart;\n  return a.runId.localeCompare(b.runId);\n}\n\nfunction buildGroups(\n  runIds: string[],\n  metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n): SessionGroup[] {\n  const byGroup = new Map<string, SessionGroup>();\n\n  for (const runId of runIds) {\n    const groupId = metaByRunId.get(runId)?.groupId;\n    if (!groupId) continue;\n    const existing = byGroup.get(groupId);\n    if (existing) {\n      existing.runIds.push(runId);\n    } else {\n      byGroup.set(groupId, {\n        groupId,\n        parentGroupId: metaByRunId.get(runId)?.parentGroupId,\n        runIds: [runId],\n      });\n    }\n  }\n\n  return [...byGroup.values()].map((group) => ({\n    ...group,\n    runIds: [...group.runIds].sort((a, b) => a.localeCompare(b)),\n  }));\n}\n\nfunction buildHandoffs(\n  runIds: string[],\n  metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n  warnings: SessionWarning[],\n  sessionId: string,\n): HandoffEdge[] {\n  const edges: HandoffEdge[] = [];\n  const seen = new Set<string>();\n\n  const pushEdge = (edge: HandoffEdge): void => {\n    const key = `${edge.from}->${edge.to}:${edge.confidence}`;\n    if (seen.has(key)) return;\n    seen.add(key);\n    edges.push(edge);\n  };\n\n  for (const runId of runIds) {\n    const meta = metaByRunId.get(runId);\n    if (!meta) continue;\n\n    if (meta.handoffFrom && meta.handoffTo) {\n      pushEdge({\n        from: meta.handoffFrom,\n        to: meta.handoffTo,\n        source: \"manual\",\n        confidence: \"explicit\",\n      });\n      continue;\n    }\n\n    if (meta.handoffFrom) {\n      pushEdge({\n        from: meta.handoffFrom,\n        to: runId,\n        source: \"manual\",\n        confidence: \"explicit\",\n      });\n    }\n\n    if (meta.handoffTo) {\n      pushEdge({\n        from: runId,\n        to: meta.handoffTo,\n        source: \"manual\",\n        confidence: \"explicit\",\n      });\n    }\n\n    if (\n      meta.subAgentId &&\n      meta.parentGroupId &&\n      !meta.handoffFrom &&\n      !meta.handoffTo\n    ) {\n      pushEdge({\n        from: meta.parentGroupId,\n        to: meta.subAgentId,\n        source: \"inferred\",\n        confidence: \"correlated\",\n      });\n      warnings.push({\n        code: \"ambiguous-handoff-endpoints\",\n        message:\n          \"Handoff inferred from parentGroupId and subAgentId without explicit handoffFrom/handoffTo.\",\n        runId,\n        sessionId,\n      });\n    }\n  }\n\n  return edges.sort((a, b) => {\n    const from = a.from.localeCompare(b.from);\n    if (from !== 0) return from;\n    return a.to.localeCompare(b.to);\n  });\n}\n\nfunction buildRetries(\n  runIds: string[],\n  metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n  warnings: SessionWarning[],\n  sessionId: string,\n): RetryLink[] {\n  const retries: RetryLink[] = [];\n\n  for (const runId of runIds) {\n    const meta = metaByRunId.get(runId);\n    if (!meta) continue;\n\n    if (meta.retryOf) {\n      retries.push({\n        runId,\n        retryOf: meta.retryOf,\n        attempt: meta.attempt,\n        source: \"manual\",\n        confidence: \"explicit\",\n      });\n      continue;\n    }\n\n    if (meta.attempt !== undefined && meta.attempt > 1) {\n      retries.push({\n        runId,\n        attempt: meta.attempt,\n        source: \"inferred\",\n        confidence: \"correlated\",\n      });\n      warnings.push({\n        code: \"ambiguous-retry-link\",\n        message: \"attempt > 1 without retryOf; retry link is correlated only.\",\n        runId,\n        sessionId,\n      });\n    }\n  }\n\n  return retries.sort((a, b) => a.runId.localeCompare(b.runId));\n}\n\nfunction buildCriticalPath(\n  runs: SessionRunRecord[],\n  handoffs: HandoffEdge[],\n): CriticalPathStep[] {\n  const runById = new Map(runs.map((run) => [run.runId, run]));\n  const explicitTargets = new Set(\n    handoffs\n      .filter((edge) => edge.confidence === \"explicit\")\n      .map((edge) => edge.to),\n  );\n  const explicitSources = new Set(\n    handoffs\n      .filter((edge) => edge.confidence === \"explicit\")\n      .map((edge) => edge.from),\n  );\n\n  const ordered = [...runs].sort(compareRuns);\n  const path: CriticalPathStep[] = [];\n  const visited = new Set<string>();\n\n  const pushRun = (\n    run: SessionRunRecord,\n    confidence: CriticalPathStep[\"confidence\"],\n    source: CriticalPathStep[\"source\"],\n  ): void => {\n    if (visited.has(run.runId)) return;\n    visited.add(run.runId);\n    path.push({\n      runId: run.runId,\n      name: run.name,\n      startedAt: run.startedAt,\n      durationMs: run.durationMs,\n      confidence,\n      source,\n    });\n  };\n\n  for (const edge of handoffs) {\n    if (edge.confidence !== \"explicit\") continue;\n    const fromRun = [...runById.values()].find(\n      (run) =>\n        run.runId === edge.from ||\n        metaRunIdMatches(run, edge.from, runById),\n    );\n    const toRun = [...runById.values()].find(\n      (run) =>\n        run.runId === edge.to || metaRunIdMatches(run, edge.to, runById),\n    );\n    if (fromRun) pushRun(fromRun, \"explicit\", \"manual\");\n    if (toRun) pushRun(toRun, \"explicit\", \"manual\");\n  }\n\n  for (const run of ordered) {\n    if (visited.has(run.runId)) continue;\n    const confidence =\n      explicitTargets.has(run.runId) || explicitSources.has(run.runId)\n        ? \"explicit\"\n        : \"correlated\";\n    pushRun(run, confidence, confidence === \"explicit\" ? \"manual\" : \"inferred\");\n  }\n\n  return path;\n}\n\nfunction metaRunIdMatches(\n  run: SessionRunRecord,\n  token: string,\n  runById: Map<string, SessionRunRecord>,\n): boolean {\n  const meta = extractSessionWorkflowMetadata(run.metadata);\n  return (\n    meta?.subAgentId === token ||\n    meta?.groupId === token ||\n    runById.has(token)\n  );\n}\n\n/**\n * Builds a deterministic session index from local run records and metadata.\n * Does not read files or infer causality from timestamps alone.\n */\nexport function buildSessionIndex(\n  inputRuns: readonly SessionRunRecord[],\n  options: BuildSessionIndexOptions = {},\n): SessionIndex {\n  const warnings: SessionWarning[] = [];\n  const runs = [...inputRuns].sort(compareRuns);\n  const metaByRunId = new Map<string, SessionWorkflowMetadata | undefined>();\n\n  for (const run of runs) {\n    metaByRunId.set(run.runId, extractSessionWorkflowMetadata(run.metadata));\n  }\n\n  const sessionsByKey = new Map<string, SessionRunRecord[]>();\n  const unscopedRunIds: string[] = [];\n\n  for (const run of runs) {\n    const meta = metaByRunId.get(run.runId);\n    const key = sessionKeyForRun(meta, {\n      correlateByGroupId: options.correlateByGroupId === true,\n    });\n    if (!key) {\n      unscopedRunIds.push(run.runId);\n      continue;\n    }\n    const bucket = sessionsByKey.get(key) ?? [];\n    bucket.push(run);\n    sessionsByKey.set(key, bucket);\n  }\n\n  const sessions: SessionSummary[] = [...sessionsByKey.entries()]\n    .sort(([a], [b]) => a.localeCompare(b))\n    .map(([sessionId, sessionRuns]) => {\n      const runIds = sessionRuns.map((run) => run.runId).sort();\n      const handoffs = buildHandoffs(runIds, metaByRunId, warnings, sessionId);\n      const retries = buildRetries(runIds, metaByRunId, warnings, sessionId);\n      const groups = buildGroups(runIds, metaByRunId);\n      const criticalPath = buildCriticalPath(sessionRuns, handoffs);\n\n      const confidences = new Set(handoffs.map((edge) => edge.confidence));\n      if (confidences.has(\"explicit\") && confidences.has(\"correlated\")) {\n        warnings.push({\n          code: \"mixed-confidence-group\",\n          message: \"Session aggregates explicit and correlated handoff edges.\",\n          sessionId,\n        });\n      }\n\n      return enrichSessionSummary(\n        {\n          sessionId,\n          runIds,\n          groups,\n          handoffs,\n          retries,\n          criticalPath,\n        },\n        runs,\n        {\n          nowMs: options.nowMs,\n          staleThresholdMs: options.staleThresholdMs,\n        },\n      );\n    });\n\n  if (sessions.length === 0 && runs.length > 0) {\n    warnings.push({\n      code: \"missing-session-id\",\n      message: \"No sessionId (or correlated groupId) found on input runs.\",\n    });\n  }\n\n  warnings.sort((a, b) => {\n    const code = a.code.localeCompare(b.code);\n    if (code !== 0) return code;\n    return (a.runId ?? \"\").localeCompare(b.runId ?? \"\");\n  });\n\n  return {\n    runs,\n    sessions,\n    unscopedRunIds: unscopedRunIds.sort(),\n    warnings,\n  };\n}\n\nexport { extractSessionWorkflowMetadata, sessionKeyForRun } from \"./metadata.js\";\nexport { deriveSessionStatus, enrichSessionSummary } from \"./status.js\";\nexport {\n  buildActivitySummary,\n  renderActivitySummaryHuman,\n} from \"./activity.js\";\nexport type {\n  ActivityEntry,\n  ActivitySummary,\n  BuildActivitySummaryOptions,\n  BuildSessionIndexOptions,\n  CriticalPathStep,\n  EnrichSessionSummaryOptions,\n  HandoffEdge,\n  RetryLink,\n  SessionCheckSummary,\n  SessionConfidence,\n  SessionEdgeSource,\n  SessionGroup,\n  SessionIndex,\n  SessionLastError,\n  SessionRunRecord,\n  SessionStatus,\n  SessionSummary,\n  SessionWarning,\n  SessionWorkflowMetadata,\n  SessionWorkflowKey,\n} from \"./types.js\";\nexport { SESSION_WORKFLOW_KEYS } from \"./types.js\";\nexport { enrichSessionRunRecord, loadSessionRunRecords } from \"./load.js\";\nexport {\n  filterMetasBySessionScope,\n  traceMetasToSessionRunRecords,\n  type SessionScopeOptions,\n  type SessionScopeResult,\n} from \"./scope.js\";\nexport {\n  groupSessionCohorts,\n  type GroupSessionCohortsOptions,\n  type SessionCohort,\n  type SessionCohortKind,\n} from \"./cohort.js\";\nexport {\n  aggregateSessionCheckResults,\n  type TraceSessionCheckResult,\n} from \"./checks.js\";\n","import { createReadStream } from \"node:fs\";\nimport { createInterface } from \"node:readline\";\n\nimport { isTraceEvent } from \"./types.js\";\n\nconst KNOWN_EVENTS = new Set([\n  \"run_started\",\n  \"run_completed\",\n  \"step_started\",\n  \"step_completed\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction safeParse(line: string): unknown | undefined {\n  try {\n    return JSON.parse(line) as unknown;\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * Safety check for cleanup workflows: returns true only when the file appears to be an AgentInspect trace.\n * This should be conservative: false positives are more dangerous than false negatives.\n */\nexport async function isAgentInspectTrace(filePath: string): Promise<boolean> {\n  try {\n    const rl = createInterface({\n      input: createReadStream(filePath, { encoding: \"utf8\" }),\n      crlfDelay: Infinity,\n    });\n\n    let checked = 0;\n    for await (const line of rl) {\n      const trimmed = line.trim();\n      if (trimmed === \"\") continue;\n      const parsed = safeParse(trimmed);\n      if (!parsed) continue;\n      if (!isRecord(parsed)) continue;\n\n      checked += 1;\n\n      // Strong signal: a valid TraceEvent (schemaVersion 0.1 + known shape).\n      if (isTraceEvent(parsed)) return true;\n\n      // Secondary signal: recognizable event name + runId.\n      const ev = parsed.event;\n      const runId = parsed.runId;\n      if (typeof ev === \"string\" && KNOWN_EVENTS.has(ev) && typeof runId === \"string\") {\n        return true;\n      }\n\n      // If we found valid JSON objects but none look like AgentInspect, keep scanning a bit.\n      if (checked >= 20) break;\n    }\n\n    return false;\n  } catch {\n    return false;\n  }\n}\n\n","import { parseDuration } from \"../utils/duration.js\";\nimport type { SessionIndex, SessionRunRecord } from \"../sessions/types.js\";\nimport type { BundleResolveOptions, BundleResolveResult } from \"./types.js\";\n\nfunction parseSinceCutoff(since: string): number {\n  const trimmed = since.trim();\n  if (trimmed === \"\") {\n    throw new Error(\"--since requires a non-empty duration (e.g. 24h, 7d).\");\n  }\n  return Date.now() - parseDuration(trimmed);\n}\n\nfunction runActivityMs(run: SessionRunRecord): number | undefined {\n  if (run.startedAt !== undefined && Number.isFinite(run.startedAt)) return run.startedAt;\n  if (run.endedAt !== undefined && Number.isFinite(run.endedAt)) return run.endedAt;\n  return undefined;\n}\n\nfunction runsInSinceWindow(\n  runs: readonly SessionRunRecord[],\n  since: string,\n): string[] {\n  const cutoff = parseSinceCutoff(since);\n  const ids: string[] = [];\n  for (const run of runs) {\n    const activity = runActivityMs(run);\n    if (activity !== undefined && activity >= cutoff) {\n      ids.push(run.runId);\n    }\n  }\n  return ids.sort((a, b) => a.localeCompare(b));\n}\n\nfunction findSession(index: SessionIndex, sessionId: string) {\n  return index.sessions.find((session) => session.sessionId === sessionId);\n}\n\n/**\n * Resolves which run ids belong in a bundle.\n *\n * @throws when target mode is missing, ambiguous, or yields zero runs.\n */\nexport function resolveBundleRunIds(\n  index: SessionIndex,\n  runs: readonly SessionRunRecord[],\n  options: BundleResolveOptions,\n): BundleResolveResult {\n  const runId = options.runId?.trim();\n  const sessionId = options.sessionId?.trim();\n  const since = options.since?.trim();\n\n  const modes = [runId ? 1 : 0, sessionId ? 1 : 0, since ? 1 : 0].reduce((a, b) => a + b, 0);\n  if (modes === 0) {\n    throw new Error(\n      \"bundle requires a run id, --session <sessionId>, or --since <duration>.\",\n    );\n  }\n  if (modes > 1) {\n    throw new Error(\n      \"bundle accepts only one target: a run id, --session, or --since (not combined).\",\n    );\n  }\n\n  if (runId) {\n    const known = runs.some((run) => run.runId === runId);\n    if (!known) {\n      throw new Error(`Run \"${runId}\" was not found in the trace directory.`);\n    }\n    return { runIds: [runId] };\n  }\n\n  if (sessionId) {\n    const session = findSession(index, sessionId);\n    if (!session) {\n      throw new Error(`Session \"${sessionId}\" was not found.`);\n    }\n    if (session.runIds.length === 0) {\n      throw new Error(`Session \"${sessionId}\" has no runs to bundle.`);\n    }\n    return {\n      runIds: [...session.runIds].sort((a, b) => a.localeCompare(b)),\n      sessionId,\n    };\n  }\n\n  const runIds = runsInSinceWindow(runs, since!);\n  if (runIds.length === 0) {\n    throw new Error(`No runs matched --since ${since}.`);\n  }\n  return { runIds, since };\n}\n","import type { BundleSafeStatus, BundleSafeStatusMetadata } from \"./types.js\";\n\nexport function aggregateBundleSafeStatus(statuses: readonly BundleSafeStatus[]): BundleSafeStatus {\n  if (statuses.length === 0) return \"UNKNOWN\";\n  if (statuses.some((status) => status === \"UNSAFE\")) return \"UNSAFE\";\n  if (statuses.some((status) => status === \"UNKNOWN\")) return \"UNKNOWN\";\n  if (statuses.some((status) => status === \"SAFE WITH WARNINGS\")) return \"SAFE WITH WARNINGS\";\n  return \"SAFE\";\n}\n\nexport function toMetadataSafeStatus(status: BundleSafeStatus): BundleSafeStatusMetadata {\n  if (status === \"SAFE WITH WARNINGS\") return \"SAFE_WITH_WARNINGS\";\n  return status;\n}\n\nexport function bundleFailsOnSafety(\n  status: BundleSafeStatus,\n  allowUnsafe: boolean,\n): boolean {\n  if (allowUnsafe) return false;\n  return status === \"UNSAFE\" || status === \"UNKNOWN\";\n}\n","import { aggregateBundleSafeStatus, toMetadataSafeStatus } from \"./safety-status.js\";\nimport type {\n  BundleCheckResults,\n  BundleMetadata,\n  BundlePlaceholderArtifact,\n  BundleRedactionProfile,\n  BundleResolveResult,\n} from \"./types.js\";\n\nconst BUNDLE_NOTE =\n  \"Generated locally by AgentInspect. Bundles are derived copies for review — not compliance or security certification. Review before sharing.\";\n\nconst PLACEHOLDER_NOTE =\n  \"No eval or performance artifacts were requested for this bundle.\";\n\nexport function buildBundleMetadata(parts: {\n  agentInspectVersion: string;\n  profile: BundleRedactionProfile;\n  resolve: BundleResolveResult;\n  checks: BundleCheckResults;\n  files: string[];\n  createdAt?: string;\n}): BundleMetadata {\n  const aggregate = aggregateBundleSafeStatus(\n    parts.checks.runs.map((run) => run.status),\n  );\n  return {\n    createdAt: parts.createdAt ?? new Date().toISOString(),\n    agentInspectVersion: parts.agentInspectVersion,\n    redactionProfile: parts.profile,\n    sourceTraceCount: parts.resolve.runIds.length,\n    runIds: [...parts.resolve.runIds],\n    safeStatus: toMetadataSafeStatus(aggregate),\n    files: [...parts.files].sort((a, b) => a.localeCompare(b)),\n    note: BUNDLE_NOTE,\n    ...(parts.resolve.sessionId !== undefined ? { sessionId: parts.resolve.sessionId } : {}),\n    ...(parts.resolve.since !== undefined ? { since: parts.resolve.since } : {}),\n  };\n}\n\nexport function buildPlaceholderArtifact(): BundlePlaceholderArtifact {\n  return {\n    status: \"not_requested\",\n    note: PLACEHOLDER_NOTE,\n  };\n}\n","import type { BundleCheckResults, BundleMetadata, BundleRedactionReport } from \"./types.js\";\n\nfunction markdownTable(rows: readonly [string, string | number | undefined][]): string {\n  const lines = [\"| Field | Value |\", \"| --- | --- |\"];\n  for (const [key, value] of rows) {\n    lines.push(`| ${key} | ${value ?? \"unknown\"} |`);\n  }\n  return lines.join(\"\\n\");\n}\n\n/**\n * Builds a human-readable bundle summary for `summary.md`.\n */\nexport function buildBundleSummaryMarkdown(parts: {\n  metadata: BundleMetadata;\n  checks: BundleCheckResults;\n  redaction: BundleRedactionReport;\n}): string {\n  const { metadata, checks, redaction } = parts;\n  const lines: string[] = [\n    \"# AgentInspect trace bundle\",\n    \"\",\n    metadata.note,\n    \"\",\n    \"## Overview\",\n    \"\",\n    markdownTable([\n      [\"Created\", metadata.createdAt],\n      [\"AgentInspect\", metadata.agentInspectVersion],\n      [\"Redaction profile\", metadata.redactionProfile],\n      [\"Safe status\", metadata.safeStatus],\n      [\"Source traces\", metadata.sourceTraceCount],\n      [\"Runs\", metadata.runIds.join(\", \")],\n      ...(metadata.sessionId ? [[\"Session\", metadata.sessionId] as [string, string]] : []),\n      ...(metadata.since ? [[\"Since\", metadata.since] as [string, string]] : []),\n    ]),\n    \"\",\n    \"## Safety checks\",\n    \"\",\n    `Aggregate: **${checks.aggregateStatus}**`,\n    \"\",\n  ];\n\n  for (const run of checks.runs) {\n    const source =\n      run.sourceStatus !== undefined && run.sourceStatus !== run.status\n        ? `; source ${run.sourceStatus}`\n        : \"\";\n    lines.push(\n      `- \\`${run.runId}\\`: artifact ${run.status}${source} (${run.findings} finding(s), ${run.errors} error(s), ${run.warnings} warning(s))`,\n    );\n  }\n\n  lines.push(\"\", \"## Redaction\", \"\", `Total findings: ${redaction.totalFindings}`, \"\");\n  for (const run of redaction.runs) {\n    const detectors = run.detectors.length > 0 ? run.detectors.join(\", \") : \"none\";\n    lines.push(`- \\`${run.runId}\\`: ${run.findings} finding(s); detectors: ${detectors}`);\n  }\n\n  lines.push(\n    \"\",\n    \"## Files\",\n    \"\",\n    ...metadata.files.map((file) => `- \\`${file}\\``),\n    \"\",\n    \"_Review every generated artifact before sharing outside your team._\",\n    \"\",\n  );\n\n  return lines.join(\"\\n\");\n}\n","import path from \"node:path\";\n\n/**\n * Sanitizes a run id for bundle directory and asset filenames.\n * Strips path segments and replaces unsafe characters.\n */\nexport function sanitizeBundleRunId(runId: string): string {\n  let safe =\n    typeof runId === \"string\" && runId.trim() !== \"\" ? runId.trim() : \"run_unknown\";\n  safe = path.basename(safe);\n  safe = safe.replace(/[^a-zA-Z0-9._-]+/g, \"_\");\n  if (safe === \"\" || safe === \".\" || safe === \"..\") {\n    safe = \"run_unknown\";\n  }\n  return safe;\n}\n\n/**\n * Relative POSIX path for a run asset inside a bundle directory.\n */\nexport function bundleRunAssetRelativePath(runId: string, extension: string): string {\n  const safe = sanitizeBundleRunId(runId);\n  const ext = extension.startsWith(\".\") ? extension : `.${extension}`;\n  return path.posix.join(\"assets\", \"runs\", `${safe}${ext}`);\n}\n\n/**\n * Ensures a relative bundle path resolves inside the output directory.\n */\nexport function assertBundlePathContained(\n  outputDir: string,\n  relativePath: string,\n): string {\n  const base = path.resolve(outputDir);\n  const resolved = path.resolve(base, relativePath);\n  if (resolved !== base && !resolved.startsWith(base + path.sep)) {\n    throw new Error(`Bundle path escapes output directory: ${relativePath}`);\n  }\n  return resolved;\n}\n\n/**\n * Normalizes bundle output path.\n * For directory/html modes, strips a trailing `.zip` suffix (folder-first).\n * Pass `preserveZipExtension: true` for `--format zip`.\n */\nexport function normalizeBundleOutputPath(\n  out: string,\n  options?: { preserveZipExtension?: boolean },\n): string {\n  const trimmed = out.trim();\n  if (trimmed === \"\") {\n    throw new Error(\"--out requires a non-empty path.\");\n  }\n  const resolved = path.resolve(trimmed);\n  if (\n    options?.preserveZipExtension !== true &&\n    resolved.toLowerCase().endsWith(\".zip\")\n  ) {\n    return resolved.slice(0, -4);\n  }\n  return resolved;\n}\n\n/**\n * Default bundle directory when --out is omitted.\n */\nexport function defaultBundleOutputPath(runIds: readonly string[]): string {\n  const label =\n    runIds.length === 1 ? sanitizeBundleRunId(runIds[0]!) : `multi-${runIds.length}`;\n  const stamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n  return path.resolve(`agent-inspect-bundle-${label}-${stamp}`);\n}\n","export type {\n  BundleCheckResults,\n  BundleCheckRunResult,\n  BundleMetadata,\n  BundlePlaceholderArtifact,\n  BundleRedactionProfile,\n  BundleRedactionReport,\n  BundleRedactionReportRun,\n  BundleResolveOptions,\n  BundleResolveResult,\n  BundleSafeStatus,\n  BundleSafeStatusMetadata,\n} from \"./types.js\";\n\nexport { resolveBundleRunIds } from \"./resolve.js\";\nexport { buildBundleMetadata, buildPlaceholderArtifact } from \"./manifest.js\";\nexport { buildBundleSummaryMarkdown } from \"./summary.js\";\nexport {\n  aggregateBundleSafeStatus,\n  bundleFailsOnSafety,\n  toMetadataSafeStatus,\n} from \"./safety-status.js\";\nexport { defaultBundleOutputPath, normalizeBundleOutputPath, sanitizeBundleRunId, bundleRunAssetRelativePath, assertBundlePathContained } from \"./paths.js\";\n","/** Portable Evidence v2 (`evidenceFormatVersion`) — independent of trace schema. */\n\nexport type EvidenceFormatVersion = \"1.0\";\n\nexport type EvidenceSafeStatus = \"SAFE\" | \"SAFE WITH WARNINGS\" | \"UNSAFE\" | \"UNKNOWN\";\n\nexport type EvidenceRedactionProfile = \"local\" | \"share\" | \"strict\";\n\nexport type EvidenceVerificationPolicy = \"development\" | \"local\" | \"share\" | \"strict\";\n\nexport type EvidenceFileRole =\n  | \"report\"\n  | \"redacted-trace\"\n  | \"checks\"\n  | \"contract\"\n  | \"redaction-report\"\n  | \"summary\"\n  | \"other\";\n\n/** How a packaged contract/preset was supplied (6.28+). */\nexport type EvidenceContractBindingSource =\n  | \"file\"\n  | \"inline\"\n  | \"preset\"\n  | \"cli-shorthand\"\n  | \"programmatic\";\n\n/** Reproducibility honesty for contract binding (6.28+). */\nexport type EvidenceContractBindingStatus = \"complete\" | \"partial\" | \"unavailable\";\n\n/**\n * Optional Evidence v2 contract binding (6.28+).\n * Additive; older readers ignore unknown fields. Not a signature or trusted-time claim.\n */\nexport interface EvidenceContractBinding {\n  status: EvidenceContractBindingStatus;\n  source: EvidenceContractBindingSource;\n  contractId?: string;\n  contractVersion?: string;\n  canonicalizationVersion: \"1\";\n  engineVersion: string;\n  /** Relative packaged path (typically `contract.resolved.json`). */\n  path?: string;\n  /** SHA-256 of the packaged resolved-contract bytes. */\n  sha256?: string;\n  ruleIds: string[];\n  unsupportedRuleIds?: string[];\n  note?: string;\n}\n\n/**\n * Optional fields embedded in `check-results.json` to bind results to a contract digest.\n */\nexport interface EvidenceCheckContractBinding {\n  contractDigest?: string;\n  canonicalizationVersion?: \"1\";\n  engineVersion?: string;\n  evaluatedRuleIds?: string[];\n  bindingStatus?: EvidenceContractBindingStatus;\n  unsupportedRuleIds?: string[];\n  origin?: {\n    source: EvidenceContractBindingSource;\n    preset?: string;\n    path?: string;\n  };\n  selectedScope?: Record<string, unknown>;\n  selectedAlternativeBranch?: string;\n}\n\nexport interface EvidenceSourceHash {\n  runId: string;\n  algorithm: \"sha256\";\n  hash: string;\n}\n\nexport interface EvidenceFileEntry {\n  path: string;\n  sha256: string;\n  role?: EvidenceFileRole;\n}\n\nexport interface EvidenceManifest {\n  evidenceFormatVersion: EvidenceFormatVersion;\n  generator: {\n    name: string;\n    version: string;\n  };\n  createdAt?: string;\n  source: {\n    runIds: string[];\n    traceSchemaVersions: string[];\n    sourceHashes: EvidenceSourceHash[];\n  };\n  policy: {\n    redactionProfile: EvidenceRedactionProfile;\n    verificationPolicy: EvidenceVerificationPolicy;\n  };\n  assessment: {\n    status: EvidenceSafeStatus;\n    sourceStatus?: EvidenceSafeStatus;\n    note?: string;\n  };\n  /**\n   * Optional TraceFacts / logical-projection summary (6.14+).\n   * Additive; older readers ignore unknown fields.\n   */\n  semantics?: EvidenceSemantics;\n  /**\n   * Optional resolved-contract binding (6.28+).\n   * Additive; older readers ignore unknown fields.\n   */\n  contract?: EvidenceContractBinding;\n  files: EvidenceFileEntry[];\n}\n\n/**\n * Bounded semantic summary embedded in Evidence v2 (mirrors check parity summary).\n * Does not embed raw events or prompts.\n */\nexport interface EvidenceSemantics {\n  projectionVersion?: string;\n  rawEventCount?: number;\n  logicalEventCount?: number;\n  runningLogicalCount?: number;\n  finishedToolCount?: number;\n  finishedToolNames?: string[];\n  pairedCount?: number;\n  parentRemapCount?: number;\n  contractStatus?: \"pass\" | \"fail\" | \"error\";\n  /**\n   * Bounded derived failure role counts (6.19+). IDs and error bodies omitted.\n   *\n   * @experimental\n   */\n  failureRoleCounts?: {\n    transient: number;\n    recovered: number;\n    terminal: number;\n    unknown: number;\n  };\n}\n\nexport interface EvidencePackagedFile {\n  /** Relative POSIX path inside the evidence/bundle directory. */\n  path: string;\n  /** Exact bytes that will be / were written. */\n  content: string | Uint8Array;\n  role?: EvidenceFileRole;\n}\n\nexport const EVIDENCE_FORMAT_VERSION: EvidenceFormatVersion = \"1.0\";\n\nexport const EVIDENCE_ASSESSMENT_NOTE =\n  \"Best-effort local safety verification only; not a compliance certification.\";\n\nexport const EVIDENCE_MANIFEST_FILENAME = \"evidence.json\";\n\n/** Packaged resolved TraceContract / check-preset snapshot (6.28+). */\nexport const EVIDENCE_RESOLVED_CONTRACT_FILENAME = \"contract.resolved.json\";\n","import { createHash } from \"node:crypto\";\n\nconst SHA256_RE = /^[a-f0-9]{64}$/i;\n\n/**\n * SHA-256 hex digest of exact bytes (UTF-8 when `data` is a string).\n */\nexport function sha256Hex(data: string | Uint8Array): string {\n  const hash = createHash(\"sha256\");\n  if (typeof data === \"string\") {\n    hash.update(data, \"utf8\");\n  } else {\n    hash.update(data);\n  }\n  return hash.digest(\"hex\");\n}\n\nexport function isSha256Hex(value: string): boolean {\n  return SHA256_RE.test(value);\n}\n\n/**\n * Constant-time-ish equality for hex digests (length-checked; not for secrets).\n */\nexport function sha256Equals(expected: string, actual: string): boolean {\n  if (!isSha256Hex(expected) || !isSha256Hex(actual)) {\n    return false;\n  }\n  const a = expected.toLowerCase();\n  const b = actual.toLowerCase();\n  if (a.length !== b.length) return false;\n  let mismatch = 0;\n  for (let i = 0; i < a.length; i += 1) {\n    mismatch |= a.charCodeAt(i) ^ b.charCodeAt(i);\n  }\n  return mismatch === 0;\n}\n","import path from \"node:path\";\n\n/**\n * Validates a relative evidence/bundle path: no absolute paths, no `..`, POSIX separators.\n * Returns the normalized POSIX relative path.\n */\nexport function assertEvidenceRelativePath(relativePath: string): string {\n  if (typeof relativePath !== \"string\" || relativePath.trim() === \"\") {\n    throw new Error(\"Evidence file path must be a non-empty relative path.\");\n  }\n  const trimmed = relativePath.trim().replaceAll(\"\\\\\", \"/\");\n  if (path.isAbsolute(trimmed) || trimmed.startsWith(\"/\")) {\n    throw new Error(`Evidence file path must be relative: ${relativePath}`);\n  }\n  const parts = trimmed.split(\"/\").filter((part) => part !== \"\");\n  if (parts.length === 0) {\n    throw new Error(`Evidence file path must be relative: ${relativePath}`);\n  }\n  for (const part of parts) {\n    if (part === \".\" || part === \"..\") {\n      throw new Error(`Evidence file path must not contain \".\" or \"..\": ${relativePath}`);\n    }\n  }\n  return parts.join(\"/\");\n}\n","import { sha256Hex } from \"./hash.js\";\nimport { assertEvidenceRelativePath } from \"./paths.js\";\nimport {\n  EVIDENCE_ASSESSMENT_NOTE,\n  EVIDENCE_FORMAT_VERSION,\n  EVIDENCE_MANIFEST_FILENAME,\n  type EvidenceFileEntry,\n  type EvidenceFileRole,\n  type EvidenceManifest,\n  type EvidencePackagedFile,\n  type EvidenceRedactionProfile,\n  type EvidenceSafeStatus,\n  type EvidenceSourceHash,\n  type EvidenceVerificationPolicy,\n} from \"./types.js\";\n\nfunction stable(value: unknown): unknown {\n  if (Array.isArray(value)) return value.map(stable);\n  if (value === null || typeof value !== \"object\") return value;\n  const record = value as Record<string, unknown>;\n  return Object.fromEntries(\n    Object.keys(record)\n      .sort((a, b) => a.localeCompare(b))\n      .map((key) => [key, stable(record[key])]),\n  );\n}\n\n/**\n * Deterministic JSON serialization used for evidence manifests (trailing newline).\n */\nexport function serializeEvidenceManifest(manifest: EvidenceManifest): string {\n  return `${JSON.stringify(stable(manifest), null, 2)}\\n`;\n}\n\nexport function inferEvidenceFileRole(relativePath: string): EvidenceFileRole {\n  const normalized = assertEvidenceRelativePath(relativePath);\n  const base = normalized.includes(\"/\")\n    ? normalized.slice(normalized.lastIndexOf(\"/\") + 1)\n    : normalized;\n  if (base === \"evidence.html\" || base === \"trace.html\" || base.endsWith(\".html\")) {\n    return \"report\";\n  }\n  if (base === \"trace.jsonl\" || base.endsWith(\".jsonl\")) {\n    return \"redacted-trace\";\n  }\n  if (base === \"check-results.json\") {\n    return \"checks\";\n  }\n  if (base === \"contract.resolved.json\") {\n    return \"contract\";\n  }\n  if (base === \"redaction-report.json\") {\n    return \"redaction-report\";\n  }\n  if (base === \"summary.md\") {\n    return \"summary\";\n  }\n  return \"other\";\n}\n\n/**\n * Hash packaged file bytes into Evidence `files[]` entries (sorted by path).\n * Rejects `evidence.json` itself (manifest is not self-hashed).\n */\nexport function buildEvidenceFileEntries(\n  files: readonly EvidencePackagedFile[],\n): EvidenceFileEntry[] {\n  const byPath = new Map<string, EvidenceFileEntry>();\n  for (const file of files) {\n    const relativePath = assertEvidenceRelativePath(file.path);\n    if (relativePath === EVIDENCE_MANIFEST_FILENAME) {\n      throw new Error(\n        `Do not include ${EVIDENCE_MANIFEST_FILENAME} in packaged file hashes (self-hash is undefined).`,\n      );\n    }\n    if (byPath.has(relativePath)) {\n      throw new Error(`Duplicate evidence file path: ${relativePath}`);\n    }\n    byPath.set(relativePath, {\n      path: relativePath,\n      sha256: sha256Hex(file.content),\n      role: file.role ?? inferEvidenceFileRole(relativePath),\n    });\n  }\n  return [...byPath.values()].sort((a, b) => a.path.localeCompare(b.path));\n}\n\nexport function buildEvidenceManifest(parts: {\n  generatorVersion: string;\n  generatorName?: string;\n  runIds: readonly string[];\n  traceSchemaVersions: readonly string[];\n  sourceHashes: readonly EvidenceSourceHash[];\n  redactionProfile: EvidenceRedactionProfile;\n  verificationPolicy?: EvidenceVerificationPolicy;\n  assessmentStatus: EvidenceSafeStatus;\n  sourceStatus?: EvidenceSafeStatus;\n  files: readonly EvidencePackagedFile[];\n  createdAt?: string;\n  note?: string;\n  semantics?: EvidenceManifest[\"semantics\"];\n  contract?: EvidenceManifest[\"contract\"];\n}): EvidenceManifest {\n  const runIds = [...parts.runIds];\n  if (runIds.length === 0) {\n    throw new Error(\"Evidence manifest requires at least one run id.\");\n  }\n  for (const item of parts.sourceHashes) {\n    if (!runIds.includes(item.runId)) {\n      throw new Error(`sourceHashes runId \"${item.runId}\" is not listed in source.runIds.`);\n    }\n    if (item.algorithm !== \"sha256\") {\n      throw new Error(`Unsupported source hash algorithm: ${item.algorithm}`);\n    }\n  }\n\n  const assessment: EvidenceManifest[\"assessment\"] = {\n    status: parts.assessmentStatus,\n    note: parts.note ?? EVIDENCE_ASSESSMENT_NOTE,\n  };\n  if (parts.sourceStatus !== undefined) {\n    assessment.sourceStatus = parts.sourceStatus;\n  }\n\n  return {\n    evidenceFormatVersion: EVIDENCE_FORMAT_VERSION,\n    generator: {\n      name: parts.generatorName ?? \"agent-inspect\",\n      version: parts.generatorVersion,\n    },\n    createdAt: parts.createdAt ?? new Date().toISOString(),\n    source: {\n      runIds,\n      traceSchemaVersions: [...parts.traceSchemaVersions].sort((a, b) => a.localeCompare(b)),\n      sourceHashes: [...parts.sourceHashes].sort((a, b) => a.runId.localeCompare(b.runId)),\n    },\n    policy: {\n      redactionProfile: parts.redactionProfile,\n      verificationPolicy: parts.verificationPolicy ?? parts.redactionProfile,\n    },\n    assessment,\n    ...(parts.semantics !== undefined ? { semantics: { ...parts.semantics } } : {}),\n    ...(parts.contract !== undefined ? { contract: { ...parts.contract } } : {}),\n    files: buildEvidenceFileEntries(parts.files),\n  };\n}\n\n/**\n * Minimal structural validation for a parsed evidence manifest object.\n * Unknown fields are preserved by returning the cast value after checks.\n */\nexport function validateEvidenceManifest(value: unknown): EvidenceManifest {\n  if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n    throw new Error(\"Evidence manifest must be a JSON object.\");\n  }\n  const record = value as Record<string, unknown>;\n  if (record.evidenceFormatVersion !== EVIDENCE_FORMAT_VERSION) {\n    throw new Error(\n      `Unsupported evidenceFormatVersion: ${String(record.evidenceFormatVersion)}`,\n    );\n  }\n  const generator = record.generator;\n  if (\n    generator === null ||\n    typeof generator !== \"object\" ||\n    Array.isArray(generator) ||\n    typeof (generator as { name?: unknown }).name !== \"string\" ||\n    typeof (generator as { version?: unknown }).version !== \"string\"\n  ) {\n    throw new Error(\"Evidence manifest requires generator.name and generator.version.\");\n  }\n  const source = record.source;\n  if (source === null || typeof source !== \"object\" || Array.isArray(source)) {\n    throw new Error(\"Evidence manifest requires source.\");\n  }\n  const sourceRecord = source as {\n    runIds?: unknown;\n    traceSchemaVersions?: unknown;\n    sourceHashes?: unknown;\n  };\n  if (!Array.isArray(sourceRecord.runIds) || sourceRecord.runIds.length === 0) {\n    throw new Error(\"Evidence manifest source.runIds must be a non-empty array.\");\n  }\n  if (!Array.isArray(sourceRecord.traceSchemaVersions)) {\n    throw new Error(\"Evidence manifest source.traceSchemaVersions must be an array.\");\n  }\n  if (!Array.isArray(sourceRecord.sourceHashes)) {\n    throw new Error(\"Evidence manifest source.sourceHashes must be an array.\");\n  }\n  const policy = record.policy;\n  if (policy === null || typeof policy !== \"object\" || Array.isArray(policy)) {\n    throw new Error(\"Evidence manifest requires policy.\");\n  }\n  const assessment = record.assessment;\n  if (\n    assessment === null ||\n    typeof assessment !== \"object\" ||\n    Array.isArray(assessment) ||\n    typeof (assessment as { status?: unknown }).status !== \"string\"\n  ) {\n    throw new Error(\"Evidence manifest requires assessment.status.\");\n  }\n  if (!Array.isArray(record.files) || record.files.length === 0) {\n    throw new Error(\"Evidence manifest files must be a non-empty array.\");\n  }\n  for (const file of record.files) {\n    if (file === null || typeof file !== \"object\" || Array.isArray(file)) {\n      throw new Error(\"Evidence manifest file entries must be objects.\");\n    }\n    const entry = file as { path?: unknown; sha256?: unknown };\n    if (typeof entry.path !== \"string\") {\n      throw new Error(\"Evidence file entry requires path.\");\n    }\n    assertEvidenceRelativePath(entry.path);\n    if (typeof entry.sha256 !== \"string\" || !/^[a-f0-9]{64}$/i.test(entry.sha256)) {\n      throw new Error(`Evidence file entry requires sha256 hex for ${entry.path}.`);\n    }\n  }\n  return value as EvidenceManifest;\n}\n\nexport function parseEvidenceManifestJson(text: string): EvidenceManifest {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(text) as unknown;\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    throw new Error(`Evidence manifest is not valid JSON: ${message}`);\n  }\n  return validateEvidenceManifest(parsed);\n}\n\n/**\n * Collect unique `schemaVersion` values from agent-inspect JSONL text.\n */\nexport function collectTraceSchemaVersions(jsonl: string): string[] {\n  const versions = new Set<string>();\n  for (const line of jsonl.split(/\\r?\\n/)) {\n    const trimmed = line.trim();\n    if (trimmed === \"\") continue;\n    try {\n      const row = JSON.parse(trimmed) as { schemaVersion?: unknown };\n      if (typeof row.schemaVersion === \"string\" && row.schemaVersion.trim() !== \"\") {\n        versions.add(row.schemaVersion.trim());\n      }\n    } catch {\n      // skip malformed lines — hashing still covers the raw bytes separately\n    }\n  }\n  return [...versions].sort((a, b) => a.localeCompare(b));\n}\n","/**\n * Stable programmatic diagnostic codes for readers / TraceFacts / TraceContract.\n *\n * Lowercase `TraceReadError.code` values remain the published reader error codes.\n * These `AI_*` identifiers appear in messages and catalogs for actionable remediation.\n *\n * @experimental Additive in 6.15.0; do not replace published lowercase reader codes.\n */\n\nexport type ProgrammaticDiagnosticCode =\n  | \"AI_TRACE_INPUT_INVALID\"\n  | \"AI_TRACE_FORMAT_UNSUPPORTED\"\n  | \"AI_TRACE_FORMAT_AMBIGUOUS\"\n  | \"AI_TRACE_FACTS_INPUT_NOT_NORMALIZED\"\n  | \"AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED\"\n  | \"AI_TRACE_RELATIONSHIP_SELF_PARENT\"\n  | \"AI_TRACE_RELATIONSHIP_CYCLE\";\n\nexport interface ProgrammaticDiagnosticSpec {\n  readonly code: ProgrammaticDiagnosticCode;\n  /** Short problem statement (without the code prefix). */\n  readonly summary: string;\n  /** Actionable remediation hint (always included in formatted messages). */\n  readonly remediation: string;\n  /** Related published / capture codes that must remain valid. */\n  readonly relatedCodes?: readonly string[];\n}\n\nexport const PROGRAMMATIC_DIAGNOSTIC_SPECS: Readonly<\n  Record<ProgrammaticDiagnosticCode, ProgrammaticDiagnosticSpec>\n> = Object.freeze({\n  AI_TRACE_INPUT_INVALID: {\n    code: \"AI_TRACE_INPUT_INVALID\",\n    summary:\n      'Expected { type: \"file\", path }, { type: \"directory\", path }, { type: \"string\", content }, { type: \"buffer\", content }, or { type: \"stdin\" }.',\n    remediation: \"For a file path, use openTraceFile(path).\",\n    relatedCodes: [\"invalid_input\"],\n  },\n  AI_TRACE_FORMAT_UNSUPPORTED: {\n    code: \"AI_TRACE_FORMAT_UNSUPPORTED\",\n    summary: \"No trace reader could detect the input format.\",\n    remediation:\n      \"Pass an AgentInspect JSONL file via openTraceFile, or set options.format to a registered reader.\",\n    relatedCodes: [\"unsupported_format\"],\n  },\n  AI_TRACE_FORMAT_AMBIGUOUS: {\n    code: \"AI_TRACE_FORMAT_AMBIGUOUS\",\n    summary: \"Multiple trace readers matched the input with equal confidence.\",\n    remediation: \"Set options.format explicitly to disambiguate the reader.\",\n    relatedCodes: [\"ambiguous_format\"],\n  },\n  AI_TRACE_FACTS_INPUT_NOT_NORMALIZED: {\n    code: \"AI_TRACE_FACTS_INPUT_NOT_NORMALIZED\",\n    summary: \"TraceFacts requires TraceReadResult or PersistedInspectEvent[].\",\n    remediation: \"Use openTraceFile() to normalize a JSONL trace first.\",\n  },\n  AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED: {\n    code: \"AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED\",\n    summary: \"Multiple runs are available; select a run before executing checks.\",\n    remediation: \"Pass options.runId or TraceCheckInput.selectedRun.\",\n    relatedCodes: [\"AI_CHECK_RUN_SELECTION_REQUIRED\"],\n  },\n  AI_TRACE_RELATIONSHIP_SELF_PARENT: {\n    code: \"AI_TRACE_RELATIONSHIP_SELF_PARENT\",\n    summary: \"A parentId equals its own event/step id.\",\n    remediation:\n      \"Reject at capture (AI_LANGGRAPH_SELF_PARENT_REJECTED) or drop via logical projection; do not invent replacement parents.\",\n    relatedCodes: [\n      \"AI_LANGGRAPH_SELF_PARENT_REJECTED\",\n      \"AI_LOGICAL_SELF_PARENT_REMOVED\",\n    ],\n  },\n  AI_TRACE_RELATIONSHIP_CYCLE: {\n    code: \"AI_TRACE_RELATIONSHIP_CYCLE\",\n    summary: \"Trace contains a parentId cycle.\",\n    remediation:\n      \"Use visibility-first tree linking for legacy fixtures; prefer acyclic capture for new adapter output.\",\n    relatedCodes: [\"structure.cycle\"],\n  },\n});\n\n/**\n * Format `CODE: summary Remediation: …` for thrown errors and diagnostics.\n */\nexport function formatProgrammaticDiagnostic(\n  code: ProgrammaticDiagnosticCode,\n  detail?: string,\n): string {\n  const spec = PROGRAMMATIC_DIAGNOSTIC_SPECS[code];\n  const summary = detail?.trim() ? detail.trim() : spec.summary;\n  return `${code}: ${summary} Remediation: ${spec.remediation}`;\n}\n","/**\n * Logical lifecycle projection for trace checks.\n *\n * Projects raw persisted rows (including v0.1 start/complete bridges) into\n * completed lifecycle events for semantic/structure rules. Does not mutate\n * input; does not replace public experimental `events` (raw rows).\n *\n * @experimental Available through `agent-inspect/checks`; may evolve.\n */\n\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport { formatProgrammaticDiagnostic } from \"../diagnostics/programmatic.js\";\n\n/**\n * Diagnostic emitted while projecting logical lifecycle events.\n *\n * @experimental\n */\nexport interface LogicalProjectionDiagnostic {\n  code:\n    | \"AI_LOGICAL_PAIR_AMBIGUOUS\"\n    | \"AI_LOGICAL_PAIR_UNMATCHED_START\"\n    | \"AI_LOGICAL_PAIR_UNMATCHED_COMPLETE\"\n    | \"AI_LOGICAL_PARENT_REMAPPED\"\n    | \"AI_LOGICAL_PARENT_UNRESOLVED\"\n    | \"AI_LOGICAL_SELF_PARENT_REMOVED\";\n  message: string;\n  eventIds?: readonly string[];\n}\n\n/**\n * A persisted event after lifecycle pairing and parent normalization.\n * Compatible with rule helpers that read PersistedInspectEvent fields.\n *\n * @experimental\n */\nexport type LogicalTraceEvent = PersistedInspectEvent & {\n  /** Raw event ids merged into this logical row (start first when paired). */\n  readonly sourceEventIds: readonly string[];\n  readonly projection: {\n    readonly paired: boolean;\n    readonly absorbedEventIds: readonly string[];\n    readonly parentNormalized: boolean;\n    readonly originalParentId?: string;\n  };\n};\n\nexport interface ProjectLogicalEventsResult {\n  readonly logicalEvents: readonly LogicalTraceEvent[];\n  readonly diagnostics: readonly LogicalProjectionDiagnostic[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction legacyEvent(event: PersistedInspectEvent): string | undefined {\n  const value = event.attributes?.legacyEvent;\n  return typeof value === \"string\" ? value : undefined;\n}\n\nfunction stepIdOf(event: PersistedInspectEvent): string | undefined {\n  const value = event.attributes?.stepId;\n  if (typeof value === \"string\" && value.trim() !== \"\") return value;\n  return undefined;\n}\n\nfunction cloneEvent(event: PersistedInspectEvent): PersistedInspectEvent {\n  return {\n    ...event,\n    ...(event.attributes !== undefined\n      ? { attributes: { ...event.attributes } }\n      : {}),\n    ...(event.error !== undefined ? { error: { ...event.error } } : {}),\n    ...(event.tokenUsage !== undefined\n      ? { tokenUsage: { ...event.tokenUsage } }\n      : {}),\n    ...(event.source !== undefined ? { source: { ...event.source } } : {}),\n  };\n}\n\nfunction mergeAttributes(\n  start: PersistedInspectEvent,\n  complete: PersistedInspectEvent,\n): Record<string, unknown> | undefined {\n  const merged: Record<string, unknown> = {\n    ...(isRecord(complete.attributes) ? complete.attributes : {}),\n    ...(isRecord(start.attributes) ? start.attributes : {}),\n  };\n  // Prefer start kind/name identity; keep completion markers for debugging.\n  merged.legacyEvent = start.attributes?.legacyEvent ?? complete.attributes?.legacyEvent;\n  merged.legacyCompleteEvent = complete.attributes?.legacyEvent;\n  if (complete.attributes?.errorStack !== undefined) {\n    merged.errorStack = complete.attributes.errorStack;\n  }\n  return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction pairStartComplete(\n  start: PersistedInspectEvent,\n  complete: PersistedInspectEvent,\n): LogicalTraceEvent {\n  const attributes = mergeAttributes(start, complete);\n  const paired: PersistedInspectEvent = {\n    ...cloneEvent(start),\n    status: complete.status,\n    timestamp: complete.timestamp ?? start.timestamp,\n    ...(complete.endedAt !== undefined ? { endedAt: complete.endedAt } : {}),\n    ...(complete.durationMs !== undefined\n      ? { durationMs: complete.durationMs }\n      : {}),\n    ...(complete.error !== undefined ? { error: { ...complete.error } } : {}),\n    ...(complete.tokenUsage !== undefined && start.tokenUsage === undefined\n      ? { tokenUsage: { ...complete.tokenUsage } }\n      : {}),\n    ...(attributes !== undefined ? { attributes } : {}),\n  };\n\n  return {\n    ...paired,\n    sourceEventIds: Object.freeze([start.eventId, complete.eventId]),\n    projection: {\n      paired: true,\n      absorbedEventIds: Object.freeze([complete.eventId]),\n      parentNormalized: false,\n      ...(start.parentId !== undefined\n        ? { originalParentId: start.parentId }\n        : {}),\n    },\n  };\n}\n\nfunction asLogical(\n  event: PersistedInspectEvent,\n  extras?: { parentNormalized?: boolean; originalParentId?: string },\n): LogicalTraceEvent {\n  return {\n    ...cloneEvent(event),\n    sourceEventIds: Object.freeze([event.eventId]),\n    projection: {\n      paired: false,\n      absorbedEventIds: Object.freeze([]),\n      parentNormalized: extras?.parentNormalized === true,\n      ...(extras?.originalParentId !== undefined\n        ? { originalParentId: extras.originalParentId }\n        : {}),\n    },\n  };\n}\n\n/**\n * Pair v0.1 run/step start+complete rows and normalize parent references.\n *\n * - Keeps start kind/name; applies terminal status/timing/error from complete.\n * - Absorbs matching complete rows (not emitted as separate logical events).\n * - Remaps parentId from stepId or absorbed complete eventId → logical eventId.\n */\nexport function projectLogicalEvents(\n  events: readonly PersistedInspectEvent[],\n): ProjectLogicalEventsResult {\n  const diagnostics: LogicalProjectionDiagnostic[] = [];\n  const byRun = new Map<string, PersistedInspectEvent[]>();\n  for (const event of events) {\n    const list = byRun.get(event.runId) ?? [];\n    list.push(event);\n    byRun.set(event.runId, list);\n  }\n\n  const absorbedIds = new Set<string>();\n  const logicalByRawId = new Map<string, LogicalTraceEvent>();\n  const stepIdToLogicalId = new Map<string, string>();\n  const logical: LogicalTraceEvent[] = [];\n\n  const orderedRuns = [...byRun.keys()].sort((a, b) => a.localeCompare(b));\n  for (const runId of orderedRuns) {\n    const runEvents = byRun.get(runId) ?? [];\n    const starts: PersistedInspectEvent[] = [];\n    const completes: PersistedInspectEvent[] = [];\n    const others: PersistedInspectEvent[] = [];\n\n    for (const event of runEvents) {\n      const legacy = legacyEvent(event);\n      if (\n        legacy === \"step_started\" ||\n        (legacy === \"run_started\" && event.status === \"running\")\n      ) {\n        starts.push(event);\n      } else if (legacy === \"step_completed\" || legacy === \"run_completed\") {\n        completes.push(event);\n      } else {\n        others.push(event);\n      }\n    }\n\n    const usedCompletes = new Set<string>();\n\n    for (const start of starts) {\n      const stepId = stepIdOf(start);\n      let match: PersistedInspectEvent | undefined;\n\n      if (legacyEvent(start) === \"run_started\") {\n        const candidates = completes.filter(\n          (c) =>\n            !usedCompletes.has(c.eventId) && legacyEvent(c) === \"run_completed\",\n        );\n        if (candidates.length > 1) {\n          diagnostics.push({\n            code: \"AI_LOGICAL_PAIR_AMBIGUOUS\",\n            message: `Multiple run_completed rows for run ${runId}; using first by eventId.`,\n            eventIds: candidates.map((c) => c.eventId),\n          });\n          candidates.sort((a, b) => a.eventId.localeCompare(b.eventId));\n        }\n        match = candidates[0];\n      } else if (stepId) {\n        const candidates = completes.filter(\n          (c) =>\n            !usedCompletes.has(c.eventId) &&\n            legacyEvent(c) === \"step_completed\" &&\n            stepIdOf(c) === stepId,\n        );\n        if (candidates.length > 1) {\n          diagnostics.push({\n            code: \"AI_LOGICAL_PAIR_AMBIGUOUS\",\n            message: `Multiple step_completed rows for stepId ${stepId}; using first by eventId.`,\n            eventIds: candidates.map((c) => c.eventId),\n          });\n          candidates.sort((a, b) => a.eventId.localeCompare(b.eventId));\n        }\n        match = candidates[0];\n      }\n\n      if (match) {\n        usedCompletes.add(match.eventId);\n        absorbedIds.add(match.eventId);\n        const paired = pairStartComplete(start, match);\n        logical.push(paired);\n        logicalByRawId.set(start.eventId, paired);\n        logicalByRawId.set(match.eventId, paired);\n        if (stepId) stepIdToLogicalId.set(`${runId}:${stepId}`, paired.eventId);\n      } else {\n        diagnostics.push({\n          code: \"AI_LOGICAL_PAIR_UNMATCHED_START\",\n          message: `No matching complete for start ${start.eventId}.`,\n          eventIds: [start.eventId],\n        });\n        const alone = asLogical(start);\n        logical.push(alone);\n        logicalByRawId.set(start.eventId, alone);\n        if (stepId) stepIdToLogicalId.set(`${runId}:${stepId}`, alone.eventId);\n      }\n    }\n\n    for (const complete of completes) {\n      if (usedCompletes.has(complete.eventId)) continue;\n      diagnostics.push({\n        code: \"AI_LOGICAL_PAIR_UNMATCHED_COMPLETE\",\n        message: `No matching start for complete ${complete.eventId}.`,\n        eventIds: [complete.eventId],\n      });\n      const alone = asLogical(complete);\n      logical.push(alone);\n      logicalByRawId.set(complete.eventId, alone);\n      const stepId = stepIdOf(complete);\n      if (stepId && !stepIdToLogicalId.has(`${runId}:${stepId}`)) {\n        stepIdToLogicalId.set(`${runId}:${stepId}`, alone.eventId);\n      }\n    }\n\n    for (const event of others) {\n      const alone = asLogical(event);\n      logical.push(alone);\n      logicalByRawId.set(event.eventId, alone);\n      const stepId = stepIdOf(event);\n      if (stepId && !stepIdToLogicalId.has(`${runId}:${stepId}`)) {\n        stepIdToLogicalId.set(`${runId}:${stepId}`, alone.eventId);\n      }\n    }\n  }\n\n  // Parent / forest normalization over the logical set.\n  const logicalById = new Map(logical.map((e) => [e.eventId, e]));\n  const normalized: LogicalTraceEvent[] = [];\n\n  for (const event of logical) {\n    const originalParentId = event.parentId;\n    if (!originalParentId) {\n      normalized.push(event);\n      continue;\n    }\n\n    let nextParent = originalParentId;\n    let remapped = false;\n\n    // Absorbed complete eventId → paired start eventId\n    const viaAbsorbed = logicalByRawId.get(originalParentId);\n    if (viaAbsorbed && viaAbsorbed.eventId !== originalParentId) {\n      nextParent = viaAbsorbed.eventId;\n      remapped = true;\n    } else if (!logicalById.has(originalParentId)) {\n      // Treat parentId as stepId within the same run\n      const viaStep = stepIdToLogicalId.get(`${event.runId}:${originalParentId}`);\n      if (viaStep) {\n        nextParent = viaStep;\n        remapped = true;\n      }\n    }\n\n    if (!remapped) {\n      if (originalParentId === event.eventId) {\n        diagnostics.push({\n          code: \"AI_LOGICAL_SELF_PARENT_REMOVED\",\n          message: formatProgrammaticDiagnostic(\n            \"AI_TRACE_RELATIONSHIP_SELF_PARENT\",\n            `Removed self-parent edge on ${event.eventId}.`,\n          ),\n          eventIds: [event.eventId],\n        });\n        const { parentId: _drop, ...rest } = event;\n        normalized.push({\n          ...rest,\n          projection: {\n            ...event.projection,\n            parentNormalized: true,\n            originalParentId,\n          },\n        });\n        continue;\n      }\n      if (!logicalById.has(originalParentId) && !logicalByRawId.has(originalParentId)) {\n        const mapping = event.attributes?.parentMapping;\n        const unresolved =\n          mapping === \"unresolved\" ||\n          event.attributes?.parentUnresolved === true ||\n          event.attributes?.unresolvedParent === true ||\n          // LangGraph/framework scaffolding sentinel labels are not event ids.\n          /^LangGraph$/i.test(originalParentId) ||\n          originalParentId.startsWith(\"unresolved:\");\n        if (!unresolved) {\n          diagnostics.push({\n            code: \"AI_LOGICAL_PARENT_UNRESOLVED\",\n            message: `Parent ${originalParentId} unresolved for ${event.eventId}.`,\n            eventIds: [event.eventId],\n          });\n        }\n      }\n      normalized.push(event);\n      continue;\n    }\n\n    if (nextParent === event.eventId) {\n      diagnostics.push({\n        code: \"AI_LOGICAL_SELF_PARENT_REMOVED\",\n        message: formatProgrammaticDiagnostic(\n          \"AI_TRACE_RELATIONSHIP_SELF_PARENT\",\n          `Removed self-parent edge on ${event.eventId} (was ${originalParentId}).`,\n        ),\n        eventIds: [event.eventId],\n      });\n      const { parentId: _drop, ...rest } = event;\n      normalized.push({\n        ...rest,\n        projection: {\n          ...event.projection,\n          parentNormalized: true,\n          originalParentId,\n        },\n      });\n      continue;\n    }\n\n    diagnostics.push({\n      code: \"AI_LOGICAL_PARENT_REMAPPED\",\n      message: `Remapped parent ${originalParentId} → ${nextParent} for ${event.eventId}.`,\n      eventIds: [event.eventId],\n    });\n\n    normalized.push({\n      ...event,\n      parentId: nextParent,\n      projection: {\n        ...event.projection,\n        parentNormalized: true,\n        originalParentId,\n      },\n    });\n  }\n\n  // Stable order: original raw encounter order by first source event index.\n  const rawIndex = new Map(events.map((e, i) => [e.eventId, i]));\n  normalized.sort((a, b) => {\n    const ai = rawIndex.get(a.sourceEventIds[0]!) ?? 0;\n    const bi = rawIndex.get(b.sourceEventIds[0]!) ?? 0;\n    return ai - bi || a.eventId.localeCompare(b.eventId);\n  });\n\n  return {\n    logicalEvents: Object.freeze(normalized),\n    diagnostics: Object.freeze(diagnostics),\n  };\n}\n\n/**\n * Resolve a human-meaningful tool name from a (logical or raw) event.\n * Precedence: toolName → tool → metadata.toolName → metadata.tool → name prefixes.\n *\n * @experimental\n */\nexport function resolveCanonicalToolName(event: PersistedInspectEvent): string {\n  const attrs = event.attributes;\n  const direct = pickString(attrs, [\"toolName\", \"tool\"]);\n  if (direct) return direct;\n\n  const metadata = attrs?.metadata;\n  if (isRecord(metadata)) {\n    const nested = pickString(metadata, [\"toolName\", \"tool\"]);\n    if (nested) return nested;\n  }\n\n  for (const prefix of [\"tool:\", \"function:\", \"mcp-tools:\"] as const) {\n    if (event.name.startsWith(prefix)) return event.name.slice(prefix.length);\n  }\n  return event.name;\n}\n\nfunction pickString(\n  record: Record<string, unknown> | undefined,\n  keys: readonly string[],\n): string | undefined {\n  if (!record) return undefined;\n  for (const key of keys) {\n    const value = record[key];\n    if (typeof value === \"string\" && value.trim() !== \"\") return value.trim();\n  }\n  return undefined;\n}\n","/**\n * Read-time derived failure roles for TraceFacts (6.19).\n *\n * Failure roles classify recorded error events using explicit or conservatively\n * correlated retry/recovery relationships. They never rewrite persisted status.\n *\n * @experimental Available through `agent-inspect/checks`.\n */\n\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport {\n  resolveCanonicalToolName,\n  type LogicalTraceEvent,\n} from \"./logical-events.js\";\n\n/**\n * Derived classification of a recorded failure.\n *\n * @experimental\n */\nexport type DerivedFailureRole =\n  | \"transient\"\n  | \"recovered\"\n  | \"terminal\"\n  | \"unknown\";\n\n/**\n * Confidence for a derived failure classification.\n *\n * @experimental\n */\nexport type DerivedFailureConfidence =\n  | \"explicit\"\n  | \"correlated\"\n  | \"unknown\";\n\n/**\n * One derived failure fact over a logical error event.\n *\n * @experimental\n */\nexport interface DerivedFailureFact {\n  readonly eventId: string;\n  readonly runId: string;\n  readonly name: string;\n  readonly kind: LogicalTraceEvent[\"kind\"];\n  readonly role: DerivedFailureRole;\n  readonly confidence: DerivedFailureConfidence;\n  readonly basis: readonly string[];\n  readonly recoveryEventIds: readonly string[];\n  readonly retryRunIds: readonly string[];\n}\n\n/**\n * Bounded role counts for MCP / Evidence parity.\n *\n * @experimental\n */\nexport interface FailureRoleCounts {\n  readonly transient: number;\n  readonly recovered: number;\n  readonly terminal: number;\n  readonly unknown: number;\n}\n\ninterface RunContext {\n  runId: string;\n  name: string;\n  status?: PersistedInspectEvent[\"status\"];\n  retryOf?: string;\n  attempt?: number;\n  sessionId?: string;\n  groupId?: string;\n  parentGroupId?: string;\n  fallbackOf?: string;\n}\n\ninterface LinkCandidate {\n  event: LogicalTraceEvent;\n  basis: string;\n  confidence: DerivedFailureConfidence;\n  viaRunId?: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction pickString(\n  record: Record<string, unknown> | undefined,\n  keys: readonly string[],\n): string | undefined {\n  if (!record) return undefined;\n  for (const key of keys) {\n    const value = record[key];\n    if (typeof value === \"string\" && value.trim() !== \"\") return value;\n  }\n  return undefined;\n}\n\nfunction pickNumber(\n  record: Record<string, unknown> | undefined,\n  keys: readonly string[],\n): number | undefined {\n  if (!record) return undefined;\n  for (const key of keys) {\n    const value = record[key];\n    if (typeof value === \"number\" && Number.isFinite(value) && value > 0) {\n      return value;\n    }\n  }\n  return undefined;\n}\n\nfunction eventMetadata(event: PersistedInspectEvent): Record<string, unknown> {\n  const attrs = isRecord(event.attributes) ? event.attributes : undefined;\n  const nested = attrs !== undefined && isRecord(attrs.metadata) ? attrs.metadata : undefined;\n  return {\n    ...(attrs ?? {}),\n    ...(nested ?? {}),\n  };\n}\n\nfunction canonicalName(event: PersistedInspectEvent): string {\n  if (event.kind === \"TOOL\") return resolveCanonicalToolName(event);\n  return event.name;\n}\n\nfunction linkKeys(event: PersistedInspectEvent): string[] {\n  const meta = eventMetadata(event);\n  const keys: string[] = [];\n  for (const key of [\"linkedStepId\", \"toolCallId\", \"mcpToolCallId\"] as const) {\n    const value = pickString(meta, [key]);\n    if (value !== undefined) keys.push(`${key}:${value}`);\n  }\n  const stepId = pickString(meta, [\"stepId\"]);\n  if (stepId !== undefined) keys.push(`stepId:${stepId}`);\n  return keys;\n}\n\nfunction buildRunContexts(\n  logicalEvents: readonly LogicalTraceEvent[],\n): Map<string, RunContext> {\n  const byRun = new Map<string, RunContext>();\n\n  for (const event of logicalEvents) {\n    const existing = byRun.get(event.runId) ?? {\n      runId: event.runId,\n      name: event.name,\n    };\n    const meta = eventMetadata(event);\n\n    if (event.kind === \"RUN\" || existing.name === event.runId) {\n      existing.name = event.name || existing.name;\n    }\n    if (event.kind === \"RUN\" && event.status !== undefined && event.status !== \"running\") {\n      existing.status = event.status;\n    }\n    existing.retryOf ??= pickString(meta, [\"retryOf\"]);\n    existing.attempt ??= pickNumber(meta, [\"attempt\", \"retryAttempt\", \"retryCount\"]);\n    existing.sessionId ??= pickString(meta, [\"sessionId\", \"conversationId\"]);\n    existing.groupId ??= pickString(meta, [\"groupId\"]);\n    existing.parentGroupId ??= pickString(meta, [\"parentGroupId\"]);\n    existing.fallbackOf ??= pickString(meta, [\"fallbackOf\", \"fallbackFrom\"]);\n    byRun.set(event.runId, existing);\n  }\n\n  return byRun;\n}\n\nfunction sameCorrelationScope(a: RunContext, b: RunContext): boolean {\n  if (a.sessionId && b.sessionId && a.sessionId === b.sessionId) return true;\n  if (a.groupId && b.groupId && a.groupId === b.groupId) return true;\n  if (a.parentGroupId && b.parentGroupId && a.parentGroupId === b.parentGroupId) {\n    return true;\n  }\n  return false;\n}\n\nfunction isSuccessful(event: LogicalTraceEvent): boolean {\n  return event.status === \"ok\";\n}\n\nfunction isFailure(event: LogicalTraceEvent): boolean {\n  return event.status === \"error\";\n}\n\nfunction compareEventOrder(a: LogicalTraceEvent, b: LogicalTraceEvent): number {\n  const byTime = a.timestamp.localeCompare(b.timestamp);\n  if (byTime !== 0) return byTime;\n  return a.eventId.localeCompare(b.eventId);\n}\n\nfunction collectCandidates(\n  failure: LogicalTraceEvent,\n  logicalEvents: readonly LogicalTraceEvent[],\n  runs: ReadonlyMap<string, RunContext>,\n): LinkCandidate[] {\n  const failureRun = runs.get(failure.runId);\n  const failureLinks = new Set(linkKeys(failure));\n  const failureName = canonicalName(failure);\n  const failureAttempt =\n    pickNumber(eventMetadata(failure), [\"attempt\", \"retryAttempt\", \"retryCount\"]) ??\n    failureRun?.attempt;\n  const candidates: LinkCandidate[] = [];\n\n  for (const event of logicalEvents) {\n    if (event.eventId === failure.eventId) continue;\n    if (event.status === \"running\") continue;\n\n    const eventRun = runs.get(event.runId);\n    const eventMeta = eventMetadata(event);\n    const sameRun = event.runId === failure.runId;\n\n    // Cross-run explicit retry / fallback (may not share timestamps with the failure).\n    if (eventRun?.retryOf === failure.runId) {\n      candidates.push({\n        event,\n        basis: \"retryOf\",\n        confidence: \"explicit\",\n        viaRunId: event.runId,\n      });\n      continue;\n    }\n    if (\n      eventRun?.fallbackOf === failure.runId ||\n      pickString(eventMeta, [\"fallbackOf\", \"fallbackFrom\"]) === failure.runId\n    ) {\n      candidates.push({\n        event,\n        basis: \"fallbackOf\",\n        confidence: \"explicit\",\n        viaRunId: event.runId,\n      });\n      continue;\n    }\n\n    // Same-run successors must appear after the failure in deterministic order.\n    if (sameRun && compareEventOrder(failure, event) >= 0) continue;\n\n    const eventLinks = linkKeys(event);\n    const sharedLink = eventLinks.find((key) => failureLinks.has(key));\n    if (sharedLink !== undefined) {\n      candidates.push({\n        event,\n        basis: sharedLink.split(\":\")[0] ?? \"linkedId\",\n        confidence: \"explicit\",\n      });\n      continue;\n    }\n\n    const eventAttempt =\n      pickNumber(eventMeta, [\"attempt\", \"retryAttempt\", \"retryCount\"]) ??\n      eventRun?.attempt;\n    const sameParent =\n      failure.parentId !== undefined &&\n      event.parentId !== undefined &&\n      failure.parentId === event.parentId;\n    const differentParent =\n      failure.parentId !== undefined &&\n      event.parentId !== undefined &&\n      failure.parentId !== event.parentId;\n    const sessionScoped =\n      failureRun !== undefined &&\n      eventRun !== undefined &&\n      sameCorrelationScope(failureRun, eventRun);\n\n    // Same name alone is insufficient. Attempt progression requires a shared\n    // parent/session/group (or same-run when parents are not both present and conflicting).\n    if (\n      canonicalName(event) === failureName &&\n      failureAttempt !== undefined &&\n      eventAttempt !== undefined &&\n      eventAttempt > failureAttempt &&\n      !differentParent &&\n      (sameParent || sessionScoped || sameRun)\n    ) {\n      candidates.push({\n        event,\n        basis: \"attempt-progression\",\n        confidence: \"correlated\",\n        ...(event.runId !== failure.runId ? { viaRunId: event.runId } : {}),\n      });\n    }\n  }\n\n  const byId = new Map<string, LinkCandidate>();\n  for (const candidate of candidates) {\n    const prev = byId.get(candidate.event.eventId);\n    if (!prev || (prev.confidence !== \"explicit\" && candidate.confidence === \"explicit\")) {\n      byId.set(candidate.event.eventId, candidate);\n    }\n  }\n  return [...byId.values()].sort((a, b) => compareEventOrder(a.event, b.event));\n}\n\nfunction classifyFailure(\n  failure: LogicalTraceEvent,\n  candidates: readonly LinkCandidate[],\n  runs: ReadonlyMap<string, RunContext>,\n  logicalEvents: readonly LogicalTraceEvent[],\n): DerivedFailureFact {\n  const successful = candidates.filter((c) => isSuccessful(c.event));\n  const unsuccessful = candidates.filter((c) => !isSuccessful(c.event));\n  const retryRunIds = Object.freeze(\n    [...new Set(candidates.map((c) => c.viaRunId).filter((id): id is string => id !== undefined))].sort(\n      (a, b) => a.localeCompare(b),\n    ),\n  );\n\n  if (successful.length > 1) {\n    const distinctRuns = new Set(successful.map((c) => c.event.runId));\n    const distinctParents = new Set(\n      successful.map((c) => c.event.parentId ?? \"\").filter((id) => id !== \"\"),\n    );\n    if (distinctRuns.size > 1 || distinctParents.size > 1) {\n      return {\n        eventId: failure.eventId,\n        runId: failure.runId,\n        name: failure.name,\n        kind: failure.kind,\n        role: \"unknown\",\n        confidence: \"unknown\",\n        basis: Object.freeze([\"ambiguous-recovery-candidates\"]),\n        recoveryEventIds: Object.freeze(\n          successful.map((c) => c.event.eventId).sort((a, b) => a.localeCompare(b)),\n        ),\n        retryRunIds,\n      };\n    }\n  }\n\n  if (successful.length >= 1) {\n    const best = successful[0]!;\n    return {\n      eventId: failure.eventId,\n      runId: failure.runId,\n      name: failure.name,\n      kind: failure.kind,\n      role: \"recovered\",\n      confidence: best.confidence,\n      basis: Object.freeze([best.basis]),\n      recoveryEventIds: Object.freeze(\n        successful.map((c) => c.event.eventId).sort((a, b) => a.localeCompare(b)),\n      ),\n      retryRunIds,\n    };\n  }\n\n  if (candidates.length > 0) {\n    const best = candidates[0]!;\n    return {\n      eventId: failure.eventId,\n      runId: failure.runId,\n      name: failure.name,\n      kind: failure.kind,\n      role: \"transient\",\n      confidence: best.confidence,\n      basis: Object.freeze([\n        best.basis,\n        unsuccessful.some((c) => c.event.status === undefined)\n          ? \"retry-incomplete\"\n          : \"retry-without-success\",\n      ]),\n      recoveryEventIds: Object.freeze([]),\n      retryRunIds,\n    };\n  }\n\n  // Declared successor run id present on the failure, but missing from selected input.\n  const failureMeta = eventMetadata(failure);\n  const declaredSuccessor = pickString(failureMeta, [\n    \"retriedBy\",\n    \"nextRetryRunId\",\n    \"retryRunId\",\n  ]);\n  if (declaredSuccessor !== undefined && !runs.has(declaredSuccessor)) {\n    return {\n      eventId: failure.eventId,\n      runId: failure.runId,\n      name: failure.name,\n      kind: failure.kind,\n      role: \"transient\",\n      confidence: \"explicit\",\n      basis: Object.freeze([\"retry-declared\", \"retry-run-missing\"]),\n      recoveryEventIds: Object.freeze([]),\n      retryRunIds: Object.freeze([declaredSuccessor]),\n    };\n  }\n\n  // Declared retryOf successor missing from selected input.\n  for (const run of runs.values()) {\n    if (run.retryOf === failure.runId) {\n      return {\n        eventId: failure.eventId,\n        runId: failure.runId,\n        name: failure.name,\n        kind: failure.kind,\n        role: \"transient\",\n        confidence: \"explicit\",\n        basis: Object.freeze([\"retryOf\", \"retry-run-missing-or-empty\"]),\n        recoveryEventIds: Object.freeze([]),\n        retryRunIds: Object.freeze([run.runId]),\n      };\n    }\n  }\n\n  // Terminal: final unrecovered member of an explicit retry chain when enclosing run is error.\n  const failureRun = runs.get(failure.runId);\n  const hasSuccessorDeclared = [...runs.values()].some((run) => run.retryOf === failure.runId);\n  const isFinalInChain =\n    failureRun !== undefined &&\n    !hasSuccessorDeclared &&\n    (failureRun.retryOf !== undefined ||\n      (failureRun.attempt !== undefined && failureRun.attempt > 1) ||\n      pickNumber(eventMetadata(failure), [\"attempt\"]) !== undefined);\n\n  if (\n    isFinalInChain &&\n    failureRun?.status === \"error\" &&\n    !logicalEvents.some(\n      (event) =>\n        event.runId === failure.runId &&\n        event.eventId !== failure.eventId &&\n        isSuccessful(event) &&\n        canonicalName(event) === canonicalName(failure),\n    )\n  ) {\n    return {\n      eventId: failure.eventId,\n      runId: failure.runId,\n      name: failure.name,\n      kind: failure.kind,\n      role: \"terminal\",\n      confidence: failureRun.retryOf !== undefined ? \"explicit\" : \"correlated\",\n      basis: Object.freeze([\"final-retry-chain-member\", \"enclosing-run-error\"]),\n      recoveryEventIds: Object.freeze([]),\n      retryRunIds: Object.freeze(\n        failureRun.retryOf !== undefined ? [failureRun.retryOf] : [],\n      ),\n    };\n  }\n\n  return {\n    eventId: failure.eventId,\n    runId: failure.runId,\n    name: failure.name,\n    kind: failure.kind,\n    role: \"unknown\",\n    confidence: \"unknown\",\n    basis: Object.freeze([\"no-explicit-or-correlated-recovery\"]),\n    recoveryEventIds: Object.freeze([]),\n    retryRunIds: Object.freeze([]),\n  };\n}\n\n/**\n * Derive conservative failure roles over logical events.\n *\n * @experimental\n */\nexport function deriveFailureFacts(\n  logicalEvents: readonly LogicalTraceEvent[],\n): {\n  failureFacts: readonly DerivedFailureFact[];\n  failuresByRole: ReadonlyMap<DerivedFailureRole, readonly DerivedFailureFact[]>;\n  failureRoleCounts: FailureRoleCounts;\n} {\n  const runs = buildRunContexts(logicalEvents);\n  const failures = logicalEvents\n    .filter((event) => isFailure(event))\n    .sort(compareEventOrder);\n\n  const failureFacts = failures.map((failure) =>\n    classifyFailure(failure, collectCandidates(failure, logicalEvents, runs), runs, logicalEvents),\n  );\n\n  const byRole = new Map<DerivedFailureRole, DerivedFailureFact[]>([\n    [\"transient\", []],\n    [\"recovered\", []],\n    [\"terminal\", []],\n    [\"unknown\", []],\n  ]);\n  for (const fact of failureFacts) {\n    byRole.get(fact.role)!.push(fact);\n  }\n  for (const [role, list] of byRole) {\n    byRole.set(\n      role,\n      Object.freeze(\n        [...list].sort((a, b) => {\n          const byRun = a.runId.localeCompare(b.runId);\n          if (byRun !== 0) return byRun;\n          return a.eventId.localeCompare(b.eventId);\n        }),\n      ) as DerivedFailureFact[],\n    );\n  }\n\n  const failureRoleCounts: FailureRoleCounts = {\n    transient: byRole.get(\"transient\")!.length,\n    recovered: byRole.get(\"recovered\")!.length,\n    terminal: byRole.get(\"terminal\")!.length,\n    unknown: byRole.get(\"unknown\")!.length,\n  };\n\n  return {\n    failureFacts: Object.freeze(failureFacts) as readonly DerivedFailureFact[],\n    failuresByRole: byRole,\n    failureRoleCounts,\n  };\n}\n","/**\n * Read-time typed relationship facts (6.22).\n *\n * Facts never rewrite parent hierarchy. Confidence is explicit or correlated only —\n * never inferred from timestamps alone.\n *\n * @experimental Available through `agent-inspect/checks`.\n */\n\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport { extractSessionWorkflowMetadata } from \"../sessions/metadata.js\";\n\nexport type TraceRelationshipType =\n  | \"parent-child\"\n  | \"source-lineage\"\n  | \"attempt-of\"\n  | \"retry-of\"\n  | \"fallback-of\"\n  | \"remediation-of\"\n  | \"evidence-for\"\n  | \"accepted-by\"\n  | \"supersedes\";\n\nexport type TraceRelationshipConfidence = \"explicit\" | \"correlated\" | \"unknown\";\n\n/**\n * Bounded relationship edge derived at read time.\n *\n * @experimental\n */\nexport interface TraceRelationship {\n  type: TraceRelationshipType;\n  fromEventId: string;\n  toEventId?: string;\n  externalRef?: string;\n  confidence: TraceRelationshipConfidence;\n  basis: readonly string[];\n}\n\nexport interface TraceRelationshipDiagnostic {\n  code: string;\n  message: string;\n  eventId?: string;\n}\n\nfunction attrs(event: PersistedInspectEvent): Record<string, unknown> {\n  return event.attributes && typeof event.attributes === \"object\"\n    ? event.attributes\n    : {};\n}\n\nfunction stringAttr(record: Record<string, unknown>, key: string): string | undefined {\n  const value = record[key];\n  return typeof value === \"string\" && value.trim() !== \"\" ? value.trim() : undefined;\n}\n\n/**\n * Derive typed relationship facts from persisted events without mutating hierarchy.\n */\nexport function deriveRelationshipFacts(\n  events: readonly PersistedInspectEvent[],\n): {\n  relationships: readonly TraceRelationship[];\n  diagnostics: readonly TraceRelationshipDiagnostic[];\n} {\n  const relationships: TraceRelationship[] = [];\n  const diagnostics: TraceRelationshipDiagnostic[] = [];\n  const byId = new Map(events.map((event) => [event.eventId, event]));\n  const seen = new Set<string>();\n\n  const push = (edge: TraceRelationship): void => {\n    const key = `${edge.type}:${edge.fromEventId}:${edge.toEventId ?? \"\"}:${edge.externalRef ?? \"\"}`;\n    if (seen.has(key)) return;\n    seen.add(key);\n    relationships.push(edge);\n  };\n\n  for (const event of events) {\n    if (event.parentId) {\n      push({\n        type: \"parent-child\",\n        fromEventId: event.parentId,\n        toEventId: event.eventId,\n        confidence: byId.has(event.parentId) ? \"explicit\" : \"unknown\",\n        basis: [\"persisted.parentId\"],\n      });\n      if (!byId.has(event.parentId)) {\n        diagnostics.push({\n          code: \"AI_RELATIONSHIP_PARENT_MISSING\",\n          message: `parentId ${event.parentId} is not present in the event set.`,\n          eventId: event.eventId,\n        });\n      }\n    }\n\n    const bag = attrs(event);\n    const meta = extractSessionWorkflowMetadata(bag) ?? {};\n    const nested =\n      bag.metadata && typeof bag.metadata === \"object\"\n        ? extractSessionWorkflowMetadata(bag.metadata as Record<string, unknown>)\n        : undefined;\n    const workflow = { ...meta, ...nested };\n\n    if (workflow.retryOf) {\n      const target = events.find((candidate) => candidate.runId === workflow.retryOf);\n      push({\n        type: \"retry-of\",\n        fromEventId: event.eventId,\n        ...(target ? { toEventId: target.eventId } : {}),\n        externalRef: workflow.retryOf,\n        confidence: target ? \"explicit\" : \"correlated\",\n        basis: [\"attributes.retryOf\"],\n      });\n    }\n\n    const attemptOf = stringAttr(bag, \"attemptOf\") ?? stringAttr(bag, \"operationId\");\n    if (attemptOf && workflow.attempt !== undefined) {\n      push({\n        type: \"attempt-of\",\n        fromEventId: event.eventId,\n        externalRef: attemptOf,\n        confidence: \"explicit\",\n        basis: workflow.attempt !== undefined ? [\"attributes.attempt\", \"attributes.operationId\"] : [\"attributes.operationId\"],\n      });\n    }\n\n    const fallbackOf = stringAttr(bag, \"fallbackOf\");\n    if (fallbackOf) {\n      push({\n        type: \"fallback-of\",\n        fromEventId: event.eventId,\n        externalRef: fallbackOf,\n        confidence: \"explicit\",\n        basis: [\"attributes.fallbackOf\"],\n      });\n    }\n\n    const remediationOf = stringAttr(bag, \"remediationOf\");\n    if (remediationOf) {\n      push({\n        type: \"remediation-of\",\n        fromEventId: event.eventId,\n        externalRef: remediationOf,\n        confidence: \"explicit\",\n        basis: [\"attributes.remediationOf\"],\n      });\n    }\n\n    const evidenceFor = stringAttr(bag, \"evidenceFor\");\n    if (evidenceFor) {\n      push({\n        type: \"evidence-for\",\n        fromEventId: event.eventId,\n        ...(byId.has(evidenceFor) ? { toEventId: evidenceFor } : { externalRef: evidenceFor }),\n        confidence: byId.has(evidenceFor) ? \"explicit\" : \"correlated\",\n        basis: [\"attributes.evidenceFor\"],\n      });\n    }\n\n    const acceptedBy = stringAttr(bag, \"acceptedBy\");\n    if (acceptedBy) {\n      push({\n        type: \"accepted-by\",\n        fromEventId: event.eventId,\n        ...(byId.has(acceptedBy) ? { toEventId: acceptedBy } : { externalRef: acceptedBy }),\n        confidence: byId.has(acceptedBy) ? \"explicit\" : \"correlated\",\n        basis: [\"attributes.acceptedBy\"],\n      });\n    }\n\n    const supersedes = stringAttr(bag, \"supersedes\");\n    if (supersedes) {\n      push({\n        type: \"supersedes\",\n        fromEventId: event.eventId,\n        ...(byId.has(supersedes) ? { toEventId: supersedes } : { externalRef: supersedes }),\n        confidence: byId.has(supersedes) ? \"explicit\" : \"correlated\",\n        basis: [\"attributes.supersedes\"],\n      });\n    }\n\n    const sourceLineage = stringAttr(bag, \"sourceLineage\") ?? stringAttr(bag, \"sourceEventId\");\n    if (sourceLineage) {\n      push({\n        type: \"source-lineage\",\n        fromEventId: event.eventId,\n        externalRef: sourceLineage,\n        confidence: \"explicit\",\n        basis: [\"attributes.sourceLineage\"],\n      });\n    }\n\n    const unsupported = stringAttr(bag, \"relationshipType\");\n    if (\n      unsupported &&\n      unsupported !== \"parent-child\" &&\n      ![\n        \"source-lineage\",\n        \"attempt-of\",\n        \"retry-of\",\n        \"fallback-of\",\n        \"remediation-of\",\n        \"evidence-for\",\n        \"accepted-by\",\n        \"supersedes\",\n      ].includes(unsupported)\n    ) {\n      diagnostics.push({\n        code: \"AI_RELATIONSHIP_UNSUPPORTED_TYPE\",\n        message: `Unsupported relationshipType ${unsupported} was reported without flattening.`,\n        eventId: event.eventId,\n      });\n    }\n  }\n\n  return {\n    relationships: Object.freeze(relationships),\n    diagnostics: Object.freeze(diagnostics),\n  };\n}\n","/**\n * Shared semantic parity summary over logical lifecycle projection.\n *\n * @experimental Available through `agent-inspect/checks`; formal TraceFacts in 6.13.\n */\n\nimport type { TraceReadResult } from \"../readers/index.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport { formatProgrammaticDiagnostic } from \"../diagnostics/programmatic.js\";\nimport {\n  deriveFailureFacts,\n  type DerivedFailureFact,\n  type DerivedFailureRole,\n  type FailureRoleCounts,\n} from \"./derived-failure.js\";\nimport {\n  deriveRelationshipFacts,\n  type TraceRelationship,\n  type TraceRelationshipDiagnostic,\n} from \"./relationship-facts.js\";\nimport {\n  projectLogicalEvents,\n  resolveCanonicalToolName,\n  type LogicalProjectionDiagnostic,\n  type LogicalTraceEvent,\n} from \"./logical-events.js\";\n\nexport type {\n  DerivedFailureConfidence,\n  DerivedFailureFact,\n  DerivedFailureRole,\n  FailureRoleCounts,\n} from \"./derived-failure.js\";\nexport { deriveFailureFacts } from \"./derived-failure.js\";\nexport type {\n  TraceRelationship,\n  TraceRelationshipConfidence,\n  TraceRelationshipDiagnostic,\n  TraceRelationshipType,\n} from \"./relationship-facts.js\";\nexport { deriveRelationshipFacts } from \"./relationship-facts.js\";\n\n/**\n * Bounded semantic counts shared by check / contract / MCP / Evidence consumers.\n *\n * @experimental\n */\nexport interface SemanticParitySummary {\n  readonly rawEventCount: number;\n  readonly logicalEventCount: number;\n  readonly runningLogicalCount: number;\n  readonly finishedToolNames: readonly string[];\n  readonly finishedToolCount: number;\n  readonly pairedCount: number;\n  readonly parentRemapCount: number;\n  readonly diagnostics: readonly LogicalProjectionDiagnostic[];\n  /**\n   * Bounded derived failure role counts (6.19+). Additive; older readers ignore.\n   *\n   * @experimental\n   */\n  readonly failureRoleCounts?: FailureRoleCounts;\n}\n\n/**\n * Summarize logical projection for cross-surface parity assertions.\n *\n * @experimental\n */\nexport function summarizeSemanticParity(\n  events: readonly PersistedInspectEvent[],\n): SemanticParitySummary {\n  const projection = projectLogicalEvents(events);\n  const logical = projection.logicalEvents;\n  const finishedTools = logical.filter(\n    (event) => event.kind === \"TOOL\" && event.status !== \"running\",\n  );\n  const finishedToolNames = Object.freeze(\n    finishedTools.map((event) => resolveCanonicalToolName(event)).sort((a, b) => a.localeCompare(b)),\n  );\n  const derived = deriveFailureFacts(logical);\n  return {\n    rawEventCount: events.length,\n    logicalEventCount: logical.length,\n    runningLogicalCount: logical.filter((event) => event.status === \"running\").length,\n    finishedToolNames,\n    finishedToolCount: finishedTools.length,\n    pairedCount: logical.filter((event) => event.projection.paired).length,\n    parentRemapCount: projection.diagnostics.filter(\n      (item) => item.code === \"AI_LOGICAL_PARENT_REMAPPED\",\n    ).length,\n    diagnostics: projection.diagnostics,\n    failureRoleCounts: derived.failureRoleCounts,\n  };\n}\n\n/**\n * Experimental TraceFacts foundation (6.13): indexes over logical events.\n *\n * Extends the 6.12.2 projection rather than introducing a parallel evaluator.\n *\n * @experimental\n */\nexport interface TraceFacts {\n  readonly rawEvents: readonly PersistedInspectEvent[];\n  readonly logicalEvents: readonly LogicalTraceEvent[];\n  readonly diagnostics: readonly LogicalProjectionDiagnostic[];\n  readonly toolsByName: ReadonlyMap<string, readonly LogicalTraceEvent[]>;\n  readonly llmEvents: readonly LogicalTraceEvent[];\n  readonly outcomeEvents: readonly LogicalTraceEvent[];\n  readonly summary: SemanticParitySummary;\n  /**\n   * Read-time derived failure classifications. Does not rewrite persisted status.\n   *\n   * @experimental Additive in 6.19.\n   */\n  readonly failureFacts: readonly DerivedFailureFact[];\n  /**\n   * Derived failure facts grouped by role.\n   *\n   * @experimental Additive in 6.19.\n   */\n  readonly failuresByRole: ReadonlyMap<\n    DerivedFailureRole,\n    readonly DerivedFailureFact[]\n  >;\n  /**\n   * Read-time typed relationship facts. Does not rewrite parent hierarchy.\n   *\n   * @experimental Additive in 6.22.\n   */\n  readonly relationships: readonly TraceRelationship[];\n  /**\n   * Diagnostics for unsupported or unresolved relationships.\n   *\n   * @experimental Additive in 6.22.\n   */\n  readonly relationshipDiagnostics: readonly TraceRelationshipDiagnostic[];\n}\n\nconst TRACE_FACTS_INPUT_NOT_NORMALIZED = formatProgrammaticDiagnostic(\n  \"AI_TRACE_FACTS_INPUT_NOT_NORMALIZED\",\n);\n\nfunction isTraceReadResult(input: unknown): input is TraceReadResult {\n  if (typeof input !== \"object\" || input === null || Array.isArray(input)) {\n    return false;\n  }\n  const record = input as {\n    events?: unknown;\n    runs?: unknown;\n    format?: unknown;\n    warnings?: unknown;\n  };\n  return (\n    Array.isArray(record.events) &&\n    Array.isArray(record.runs) &&\n    typeof record.format === \"string\" &&\n    Array.isArray(record.warnings)\n  );\n}\n\nfunction looksLikeRawV01TraceEvents(input: unknown): boolean {\n  if (!Array.isArray(input) || input.length === 0) return false;\n  const first = input[0];\n  if (typeof first !== \"object\" || first === null) return false;\n  const row = first as { event?: unknown; schemaVersion?: unknown; eventId?: unknown };\n  return (\n    typeof row.event === \"string\" &&\n    (row.schemaVersion === \"0.1\" || row.eventId === undefined)\n  );\n}\n\nfunction isPersistedInspectEventArray(\n  input: unknown,\n): input is readonly PersistedInspectEvent[] {\n  if (!Array.isArray(input)) return false;\n  if (input.length === 0) return true;\n  const first = input[0];\n  if (typeof first !== \"object\" || first === null) return false;\n  const row = first as { eventId?: unknown; schemaVersion?: unknown; event?: unknown };\n  return (\n    typeof row.eventId === \"string\" &&\n    (row.schemaVersion === \"0.2\" ||\n      row.schemaVersion === \"1.0\" ||\n      row.schemaVersion === \"0.1\") &&\n    typeof row.event !== \"string\"\n  );\n}\n\nfunction resolveTraceFactsEvents(\n  input: TraceReadResult | readonly PersistedInspectEvent[],\n): readonly PersistedInspectEvent[] {\n  if (isTraceReadResult(input)) {\n    return input.events;\n  }\n  if (looksLikeRawV01TraceEvents(input)) {\n    throw new TypeError(TRACE_FACTS_INPUT_NOT_NORMALIZED);\n  }\n  if (isPersistedInspectEventArray(input)) {\n    return input;\n  }\n  throw new TypeError(TRACE_FACTS_INPUT_NOT_NORMALIZED);\n}\n\n/**\n * Build TraceFacts from a TraceReadResult or normalized persisted events.\n *\n * @experimental\n */\nexport function buildTraceFacts(input: TraceReadResult): TraceFacts;\nexport function buildTraceFacts(\n  input: readonly PersistedInspectEvent[],\n): TraceFacts;\nexport function buildTraceFacts(\n  input: TraceReadResult | readonly PersistedInspectEvent[],\n): TraceFacts {\n  const events = resolveTraceFactsEvents(input);\n  const projection = projectLogicalEvents(events);\n  const toolsByName = new Map<string, LogicalTraceEvent[]>();\n  const llmEvents: LogicalTraceEvent[] = [];\n  const outcomeEvents: LogicalTraceEvent[] = [];\n\n  for (const event of projection.logicalEvents) {\n    if (event.kind === \"TOOL\" && event.status !== \"running\") {\n      const name = resolveCanonicalToolName(event);\n      const list = toolsByName.get(name) ?? [];\n      list.push(event);\n      toolsByName.set(name, list);\n    }\n    if (event.kind === \"LLM\" && event.status !== \"running\") {\n      llmEvents.push(event);\n    }\n    if (event.kind === \"OUTCOME\") {\n      outcomeEvents.push(event);\n    }\n  }\n\n  for (const [name, list] of [...toolsByName.entries()]) {\n    toolsByName.set(name, Object.freeze([...list]) as LogicalTraceEvent[]);\n  }\n\n  const derived = deriveFailureFacts(projection.logicalEvents);\n  const relationship = deriveRelationshipFacts(events);\n  const summary = summarizeSemanticParity(events);\n\n  return {\n    rawEvents: Object.freeze([...events]),\n    logicalEvents: projection.logicalEvents,\n    diagnostics: projection.diagnostics,\n    toolsByName,\n    llmEvents: Object.freeze(llmEvents),\n    outcomeEvents: Object.freeze(outcomeEvents),\n    summary: {\n      ...summary,\n      failureRoleCounts: derived.failureRoleCounts,\n    },\n    failureFacts: derived.failureFacts,\n    failuresByRole: derived.failuresByRole,\n    relationships: relationship.relationships,\n    relationshipDiagnostics: relationship.diagnostics,\n  };\n}\n","import type { TraceReadResult, TraceReadWarning } from \"../readers/index.js\";\nimport type {\n  AttributionConfidence,\n  InspectNode,\n  InspectRunTree,\n} from \"../types/inspect-event.js\";\nimport {\n  ATTRIBUTION_CONFIDENCES,\n  ATTRIBUTION_CONFIDENCE_RANK,\n  isAttributionConfidence,\n} from \"../types/inspect-event.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport { formatProgrammaticDiagnostic } from \"../diagnostics/programmatic.js\";\nimport {\n  extractOutcomesFromPersistedEvents,\n  outcomesMatchingStatus,\n  type ObservedOutcomeStatus,\n} from \"../outcomes/index.js\";\nimport {\n  DEFAULT_CREDENTIAL_SENSITIVE_KEYS,\n  isCredentialSensitiveKey,\n} from \"../safety/sensitive-key.js\";\nimport {\n  projectLogicalEvents,\n  resolveCanonicalToolName,\n  type LogicalProjectionDiagnostic,\n  type LogicalTraceEvent,\n} from \"./logical-events.js\";\n\nexport type { LogicalProjectionDiagnostic, LogicalTraceEvent } from \"./logical-events.js\";\nexport { projectLogicalEvents, resolveCanonicalToolName } from \"./logical-events.js\";\nexport type {\n  DerivedFailureConfidence,\n  DerivedFailureFact,\n  DerivedFailureRole,\n  FailureRoleCounts,\n  SemanticParitySummary,\n  TraceFacts,\n  TraceRelationship,\n  TraceRelationshipConfidence,\n  TraceRelationshipDiagnostic,\n  TraceRelationshipType,\n} from \"./trace-facts.js\";\nexport {\n  buildTraceFacts,\n  deriveFailureFacts,\n  deriveRelationshipFacts,\n  summarizeSemanticParity,\n} from \"./trace-facts.js\";\nexport type {\n  ProgrammaticDiagnosticCode,\n  ProgrammaticDiagnosticSpec,\n} from \"../diagnostics/programmatic.js\";\nexport {\n  PROGRAMMATIC_DIAGNOSTIC_SPECS,\n  formatProgrammaticDiagnostic,\n} from \"../diagnostics/programmatic.js\";\nexport {\n  DEFAULT_CREDENTIAL_SENSITIVE_KEYS,\n  isCredentialSensitiveKey,\n  NON_CREDENTIAL_TOKEN_CONFIG_KEYS,\n  normalizeSensitiveKey,\n} from \"../safety/sensitive-key.js\";\n\n/**\n * Experimental trace-check finding severity.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport type TraceCheckSeverity = \"error\" | \"warning\" | \"info\";\n\n/**\n * Experimental trace-check rule category.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport type TraceCheckRuleCategory =\n  | \"run\"\n  | \"tool\"\n  | \"llm\"\n  | \"structure\"\n  | \"baseline\"\n  | \"safety\"\n  | \"reader\";\n\n/**\n * Experimental safety finding taxonomy (additive on `TraceCheckFinding`).\n *\n * Distinct from `TraceCheckRuleCategory` (which classifies rules, not findings).\n *\n * @experimental Available through `agent-inspect/checks`; see `docs/SAFETY-POLICY.md`.\n */\nexport type SafetyFindingCategory =\n  | \"credential\"\n  | \"personal-data\"\n  | \"identifier\"\n  | \"raw-content\"\n  | \"path\"\n  | \"size\"\n  | \"structure\";\n\n/**\n * Experimental detector confidence for safety findings.\n *\n * @experimental Available through `agent-inspect/checks`; see `docs/SAFETY-POLICY.md`.\n */\nexport type SafetyFindingConfidence = \"high\" | \"medium\" | \"low\";\n\n/**\n * Experimental trace-check finding status.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport type TraceCheckFindingStatus = \"pass\" | \"fail\" | \"warning\";\n\n/**\n * Experimental trace-check aggregate status.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport type TraceCheckStatus = \"pass\" | \"fail\" | \"error\";\n\n/**\n * Experimental stable diagnostic code for check execution and input errors.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport type TraceCheckDiagnosticCode =\n  | \"AI_CHECK_INVALID_ARGUMENTS\"\n  | \"AI_CHECK_INVALID_CONFIG\"\n  | \"AI_CHECK_CONFIG_LOAD_FAILED\"\n  | \"AI_CHECK_CONFIG_UNKNOWN_KEY\"\n  | \"AI_CHECK_CONFIG_INVALID_VALUE\"\n  | \"AI_CHECK_CONFIG_NO_EFFECTIVE_RULES\"\n  | \"AI_CHECK_NO_RULES_EVALUATED\"\n  | \"AI_CHECK_TRACE_UNREADABLE\"\n  | \"AI_CHECK_UNSUPPORTED_FORMAT\"\n  | \"AI_CHECK_AMBIGUOUS_FORMAT\"\n  | \"AI_CHECK_RUN_SELECTION_REQUIRED\"\n  | \"AI_CHECK_BASELINE_UNREADABLE\"\n  | \"AI_CHECK_BASELINE_INCOMPATIBLE\"\n  | \"AI_CHECK_RULE_FAILED\"\n  | \"AI_CHECK_INTERNAL_ERROR\";\n\n/**\n * Experimental evidence pointing at trace data relevant to a finding.\n *\n * Evidence intentionally identifies runs/events/spans and bounded paths rather\n * than embedding raw prompts, outputs, request bodies, headers, or tool payloads.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckEvidence {\n  runId?: string;\n  eventId?: string;\n  parentId?: string;\n  traceId?: string;\n  spanId?: string;\n  kind?: string;\n  name?: string;\n  status?: string;\n  path?: string;\n}\n\n/**\n * Experimental finding emitted by a trace-check rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckFinding {\n  ruleId: string;\n  severity: TraceCheckSeverity;\n  status: TraceCheckFindingStatus;\n  message: string;\n  expected?: unknown;\n  actual?: unknown;\n  evidence: TraceCheckEvidence[];\n  /**\n   * Additive safety taxonomy (6.9+). Omitted for non-safety / structural rules.\n   *\n   * @experimental\n   */\n  category?: SafetyFindingCategory;\n  /**\n   * Additive detector confidence (6.9+).\n   *\n   * @experimental\n   */\n  confidence?: SafetyFindingConfidence;\n  /**\n   * Detector id when known (rule id or redaction detector id).\n   *\n   * @experimental\n   */\n  detector?: string;\n  /**\n   * Recommended remediation action (e.g. redact, review, keep).\n   *\n   * @experimental\n   */\n  action?: string;\n}\n\n/**\n * Experimental diagnostic emitted when check execution cannot complete normally.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckDiagnostic {\n  code: TraceCheckDiagnosticCode;\n  message: string;\n  severity: TraceCheckSeverity;\n  ruleId?: string;\n}\n\n/**\n * Experimental input projection for trace checks.\n *\n * The `read` value must come from `agent-inspect/readers` or an equivalent\n * already-normalized `TraceReadResult`. The checks engine does not read files\n * or reparse source payloads.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckInput {\n  read: TraceReadResult;\n  selectedRun?: InspectRunTree;\n  sourceLabel?: string;\n}\n\n/**\n * Experimental normalized facts available to trace-check rules.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckFacts {\n  format: string;\n  runs: readonly InspectRunTree[];\n  /**\n   * Raw persisted rows (public experimental contract; unchanged meaning).\n   */\n  events: readonly PersistedInspectEvent[];\n  /**\n   * Lifecycle-paired projection for built-in semantic/structure rules.\n   *\n   * @experimental Additive in 6.12.2; formal TraceFacts land in 6.13.\n   */\n  logicalEvents: readonly LogicalTraceEvent[];\n  /**\n   * Non-fatal projection notes (ambiguous pairs, remapped parents, etc.).\n   *\n   * @experimental\n   */\n  logicalProjectionDiagnostics: readonly LogicalProjectionDiagnostic[];\n  readerWarnings: readonly TraceReadWarning[];\n  unsupportedFields: readonly string[];\n  sourceFiles: readonly string[];\n  nodesByEventId: ReadonlyMap<string, InspectNode>;\n  childrenByParentId: ReadonlyMap<string, readonly InspectNode[]>;\n  rootNodes: readonly InspectNode[];\n}\n\n/**\n * Experimental rule evaluation context.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckContext extends TraceCheckFacts {\n  selectedRun?: InspectRunTree;\n  sourceLabel?: string;\n}\n\n/**\n * Experimental trace-check rule definition.\n *\n * Rules are synchronous and pure: they receive normalized facts and return\n * findings without reading files, mutating input, or performing network I/O.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckRule {\n  id: string;\n  category: TraceCheckRuleCategory;\n  defaultSeverity: TraceCheckSeverity;\n  evaluate(context: TraceCheckContext): readonly TraceCheckFinding[];\n}\n\n/**\n * Experimental options for `runTraceChecks`.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface RunTraceChecksOptions {\n  rules?: readonly TraceCheckRule[];\n  select?: readonly string[];\n  runId?: string;\n}\n\n/**\n * Experimental options for the built-in run status rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface RunStatusRuleOptions {\n  expected?: \"ok\" | \"error\" | \"running\";\n  allowIncomplete?: boolean;\n}\n\n/**\n * Experimental options for the built-in run duration rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface RunDurationRuleOptions {\n  maxDurationMs: number;\n}\n\n/**\n * Experimental options for the built-in max step duration rule.\n */\nexport interface MaxStepDurationRuleOptions {\n  maxDurationMs: number;\n}\n\n/**\n * Experimental options for stall detection (running / incomplete events).\n */\nexport interface StallDetectionRuleOptions {\n  /** When true, events with startedAt but no endedAt also fail. */\n  requireEndedAt?: boolean;\n}\n\n/**\n * Experimental options for the built-in event count rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface RunEventCountRuleOptions {\n  kind?: PersistedInspectEvent[\"kind\"];\n  min?: number;\n  max?: number;\n}\n\n/**\n * Experimental options for the built-in run depth rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface RunDepthRuleOptions {\n  maxDepth: number;\n}\n\n/**\n * Experimental options for the built-in tool usage rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface ToolUsageRuleOptions {\n  required?: readonly string[];\n  forbidden?: readonly string[];\n  allowed?: readonly string[];\n  minCount?: number;\n  maxCount?: number;\n}\n\n/** Kind-aware endpoint for typed step ordering (TOOL / LLM). */\nexport type StepOrderingKind = \"TOOL\" | \"LLM\";\n\n/**\n * Named step endpoint with an explicit event kind.\n *\n * @experimental Available through `agent-inspect/checks`.\n */\nexport interface StepOrderingEndpoint {\n  kind: StepOrderingKind;\n  name: string;\n}\n\n/**\n * Experimental options for kind-aware step ordering (cross-kind TOOL↔LLM).\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface StepOrderingRuleOptions {\n  before: StepOrderingEndpoint;\n  after: StepOrderingEndpoint;\n  /**\n   * Explicit rule id. Defaults to `step.order`. TraceContract-generated\n   * relations use unique ids such as `contract.step.orderRelation.0`.\n   */\n  id?: string;\n  /**\n   * Ordering semantics. `first-occurrence` preserves first-occurrence encounter\n   * ordering, `happens-before` requires the first before event to finish before\n   * the first after event starts, and `all-occurrences` applies that causal\n   * boundary to every matching occurrence.\n   *\n   * @defaultValue `\"first-occurrence\"`\n   */\n  mode?: \"first-occurrence\" | \"happens-before\" | \"all-occurrences\";\n  /**\n   * When true, missing endpoints of the declared kind fail (instead of\n   * vacuously passing). Wrong-kind same-name events do not satisfy the\n   * endpoint.\n   *\n   * @defaultValue `false` (compositional low-level default)\n   */\n  requireEndpoints?: boolean;\n}\n\n/**\n * Experimental options for the built-in tool ordering rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface ToolOrderingRuleOptions {\n  before: string;\n  after: string;\n  /**\n   * Explicit rule id. Defaults to `tool.order`. TraceContract-generated\n   * adjacent pairs use unique ids such as `contract.tool.order.0`.\n   */\n  id?: string;\n  /**\n   * Ordering semantics. `first-occurrence` preserves first-occurrence encounter\n   * ordering, `happens-before` requires the first before event to finish before\n   * the first after event starts, and `all-occurrences` applies that causal\n   * boundary to every matching occurrence.\n   *\n   * @defaultValue `\"first-occurrence\"`\n   * @experimental Available through `agent-inspect/checks`.\n   */\n  mode?: \"first-occurrence\" | \"happens-before\" | \"all-occurrences\";\n}\n\n/**\n * Experimental options for the built-in tool failure rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface ToolFailureRuleOptions {\n  maxFailures?: number;\n  maxRetries?: number;\n}\n\n/**\n * Experimental options for the built-in LLM usage rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface LlmUsageRuleOptions {\n  allowedModels?: readonly string[];\n  allowedProviders?: readonly string[];\n  maxCalls?: number;\n  maxInputTokens?: number;\n  maxOutputTokens?: number;\n  maxTotalTokens?: number;\n  maxCachedTokens?: number;\n  finishReasons?: readonly string[];\n}\n\n/**\n * Experimental options for the built-in structure incomplete rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface StructureIncompleteRuleOptions {\n  allowRunning?: boolean;\n  requireEndedAtForStarted?: boolean;\n}\n\n/**\n * Experimental options for the built-in structure orphan rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface StructureOrphanRuleOptions {\n  allowMarkedUnresolved?: boolean;\n}\n\n/**\n * Experimental options for the built-in structure relationship rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface StructureRelationshipRuleOptions {\n  minConfidence?: AttributionConfidence;\n  requireParentBeforeChild?: boolean;\n  requireTraceParentSpan?: boolean;\n}\n\n/**\n * Experimental options for the built-in structure parallel-width rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface StructureParallelWidthRuleOptions {\n  maxChildren?: number;\n  maxConcurrent?: number;\n}\n\n/**\n * Experimental options shared by built-in signal rules.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceSignalRuleOptions {\n  required?: readonly string[];\n  forbidden?: readonly string[];\n  allowed?: readonly string[];\n  minCount?: number;\n  maxCount?: number;\n}\n\n/**\n * Experimental options for the built-in retrieval signal rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface RetrievalRuleOptions extends TraceSignalRuleOptions {}\n\n/**\n * Experimental options for the built-in guardrail signal rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface GuardrailRuleOptions extends TraceSignalRuleOptions {}\n\n/**\n * Experimental options for the built-in decision signal rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface DecisionRuleOptions extends TraceSignalRuleOptions {}\n\n/**\n * Experimental options for the built-in safety redaction rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface SafetyRedactionRuleOptions {\n  sensitiveKeys?: readonly string[];\n  redactedMarkers?: readonly string[];\n  maxFindings?: number;\n}\n\n/**\n * Experimental options for the built-in raw content path rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface SafetyRawContentRuleOptions {\n  forbiddenKeys?: readonly string[];\n  /**\n   * Path prefixes (dot-separated, case-insensitive) whose terminal keys are\n   * treated as metrics rather than raw prompts (e.g. `tokenUsage`, `usage`).\n   */\n  safePathPrefixes?: readonly string[];\n  /**\n   * When a raw-content key's value is entirely a redaction/hash marker, skip\n   * the finding. Partial `[REDACTED] + residual text` still fails.\n   */\n  redactedMarkers?: readonly string[];\n  includeSummaries?: boolean;\n  maxFindings?: number;\n}\n\n/**\n * Experimental secret pattern used by the built-in secret safety rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface SafetySecretPattern {\n  id: string;\n  pattern: RegExp;\n}\n\n/**\n * Experimental options for the built-in secret pattern safety rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface SafetySecretPatternRuleOptions {\n  patterns?: readonly SafetySecretPattern[];\n  maxStringLength?: number;\n  maxFindings?: number;\n}\n\n/**\n * Experimental options for the built-in oversized attribute safety rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface SafetyOversizedAttributeRuleOptions {\n  maxStringLength?: number;\n  maxArrayLength?: number;\n  maxObjectKeys?: number;\n  maxSerializedBytes?: number;\n  maxFindings?: number;\n}\n\n/**\n * Experimental options for the built-in baseline regression rule.\n *\n * The baseline must already be normalized through `agent-inspect/readers` or an\n * equivalent `TraceReadResult`; this rule does not read files or parse traces.\n * `durationToleranceMs` defaults to `0`, meaning exact duration comparison.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface BaselineRegressionRuleOptions {\n  baseline: TraceCheckInput;\n  baselineRunId?: string;\n  durationToleranceMs?: number;\n  compareFormat?: boolean;\n}\n\n/**\n * Per-rule execution status recorded on every check result.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport type TraceCheckRuleExecutionStatus = \"pass\" | \"warning\" | \"fail\" | \"error\";\n\n/**\n * Evidence that a specific rule was evaluated (or failed before evaluation).\n *\n * Distinguishes “all intended rules passed” from “no intended rules ran.”\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckRuleExecution {\n  ruleId: string;\n  category: TraceCheckRule[\"category\"];\n  status: TraceCheckRuleExecutionStatus;\n  findingCount: number;\n  runId?: string;\n}\n\n/**\n * Experimental aggregate counts for trace-check results.\n *\n * `passed` / `failed` / `warnings` count findings. `rulesEvaluated` counts\n * rules that were selected and executed (or attempted).\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckSummary {\n  passed: number;\n  failed: number;\n  warnings: number;\n  errors: number;\n  rulesEvaluated: number;\n}\n\n/**\n * Experimental trace-check result.\n *\n * `status: \"fail\"` means rules ran and at least one error-severity finding\n * failed. `status: \"error\"` means execution could not complete because of\n * invalid input, invalid rule selection, zero rules selected, or a thrown\n * rule error.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckResult {\n  ok: boolean;\n  status: TraceCheckStatus;\n  format: string;\n  runId?: string;\n  summary: TraceCheckSummary;\n  findings: TraceCheckFinding[];\n  diagnostics: TraceCheckDiagnostic[];\n  ruleExecutions: TraceCheckRuleExecution[];\n}\n\nconst SEVERITY_RANK: Record<TraceCheckSeverity, number> = {\n  error: 0,\n  warning: 1,\n  info: 2,\n};\n\nconst STATUS_RANK: Record<TraceCheckFindingStatus, number> = {\n  fail: 0,\n  warning: 1,\n  pass: 2,\n};\n\nconst CONFIDENCE_RANK = ATTRIBUTION_CONFIDENCE_RANK;\n\nconst DEFAULT_SENSITIVE_KEYS = DEFAULT_CREDENTIAL_SENSITIVE_KEYS;\n\nconst DEFAULT_RAW_CONTENT_KEYS = [\n  \"body\",\n  \"headers\",\n  \"input\",\n  \"messages\",\n  \"output\",\n  \"payload\",\n  \"prompt\",\n  \"requestbody\",\n  \"request_body\",\n  \"responsebody\",\n  \"response_body\",\n  \"rawprompt\",\n  \"raw_prompt\",\n  \"rawoutput\",\n  \"raw_output\",\n  \"toolinput\",\n  \"tool_input\",\n  \"tooloutput\",\n  \"tool_output\",\n  // Framework / agent metadata that carries user or task text\n  \"currenttask\",\n  \"current_task\",\n  \"task\",\n  \"userinput\",\n  \"user_input\",\n  \"requesttext\",\n  \"request_text\",\n  \"conversationtext\",\n  \"conversation_text\",\n];\n\n/** Parent path segments that hold token/usage metrics, not prompts. */\nconst DEFAULT_SAFE_RAW_CONTENT_PATH_PREFIXES = [\n  \"tokenUsage\",\n  \"usage\",\n  \"tokens\",\n] as const;\n\nconst SAFE_USAGE_LEAF_KEYS = new Set([\n  \"input\",\n  \"output\",\n  \"total\",\n  \"cached\",\n  \"cachewrite\",\n  \"cache_write\",\n  \"reasoning\",\n  \"input_tokens\",\n  \"inputtokens\",\n  \"output_tokens\",\n  \"outputtokens\",\n  \"total_tokens\",\n  \"totaltokens\",\n  \"prompt_tokens\",\n  \"prompttokens\",\n  \"completion_tokens\",\n  \"completiontokens\",\n  \"cache_read\",\n  \"cacheread\",\n  \"cache_creation\",\n  \"cachecreation\",\n  \"reasoning_tokens\",\n  \"reasoningtokens\",\n]);\n\nconst DEFAULT_SECRET_PATTERNS: readonly SafetySecretPattern[] = [\n  { id: \"bearer-token\", pattern: /Bearer\\s+[A-Za-z0-9._~+/-]{12,}=*/ },\n  { id: \"openai-key\", pattern: /sk-[A-Za-z0-9_-]{16,}/ },\n  { id: \"aws-access-key\", pattern: /AKIA[0-9A-Z]{16}/ },\n  { id: \"github-token\", pattern: /gh[opsu]_[A-Za-z0-9_]{20,}/ },\n  // Keep in sync with packages/redact/src/key-value-secret.ts (KEY_VALUE_SECRET_PATTERN_SOURCE).\n  {\n    id: \"key-value-secret\",\n    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\ntype EventValueEntry = {\n  event: PersistedInspectEvent;\n  path: string;\n  key?: string;\n  value: unknown;\n};\n\nfunction compareStrings(a: string | undefined, b: string | undefined): number {\n  return (a ?? \"\").localeCompare(b ?? \"\");\n}\n\nfunction diagnostic(\n  code: TraceCheckDiagnosticCode,\n  message: string,\n  ruleId?: string,\n): TraceCheckDiagnostic {\n  return {\n    code,\n    message,\n    severity: \"error\",\n    ...(ruleId ? { ruleId } : {}),\n  };\n}\n\nfunction emptySummary(): TraceCheckSummary {\n  return {\n    passed: 0,\n    failed: 0,\n    warnings: 0,\n    errors: 0,\n    rulesEvaluated: 0,\n  };\n}\n\nfunction errorResult(\n  input: TraceCheckInput,\n  diagnostics: readonly TraceCheckDiagnostic[],\n  selectedRun?: InspectRunTree,\n  ruleExecutions: readonly TraceCheckRuleExecution[] = [],\n): TraceCheckResult {\n  return {\n    ok: false,\n    status: \"error\",\n    format: input.read.format,\n    ...(selectedRun ? { runId: selectedRun.runId } : {}),\n    summary: {\n      ...emptySummary(),\n      errors: diagnostics.filter((item) => item.severity === \"error\").length,\n      rulesEvaluated: ruleExecutions.length,\n    },\n    findings: [],\n    diagnostics: [...diagnostics],\n    ruleExecutions: [...ruleExecutions],\n  };\n}\n\nfunction flattenNodes(nodes: readonly InspectNode[]): InspectNode[] {\n  return nodes.flatMap((node) => [node, ...flattenNodes(node.children)]);\n}\n\nfunction buildFacts(input: TraceCheckInput, selectedRun?: InspectRunTree): TraceCheckFacts {\n  const scopedRuns = selectedRun ? [selectedRun] : input.read.runs;\n  const scopedRunIds = new Set(scopedRuns.map((run) => run.runId));\n  const scopedEvents =\n    selectedRun === undefined\n      ? input.read.events\n      : input.read.events.filter((event) => scopedRunIds.has(event.runId));\n  const nodes = flattenNodes(scopedRuns.flatMap((run) => run.children));\n  const nodesByEventId = new Map<string, InspectNode>();\n  const childrenByParentId = new Map<string, InspectNode[]>();\n\n  for (const node of nodes) {\n    nodesByEventId.set(node.event.eventId, node);\n    const parentId = node.event.parentId;\n    if (parentId) {\n      const children = childrenByParentId.get(parentId) ?? [];\n      children.push(node);\n      childrenByParentId.set(parentId, children);\n    }\n  }\n\n  const projection = projectLogicalEvents(scopedEvents);\n  return {\n    format: input.read.format,\n    runs: Object.freeze([...input.read.runs]),\n    events: Object.freeze([...scopedEvents]),\n    logicalEvents: projection.logicalEvents,\n    logicalProjectionDiagnostics: projection.diagnostics,\n    readerWarnings: Object.freeze([...input.read.warnings]),\n    unsupportedFields: Object.freeze([...input.read.unsupportedFields]),\n    sourceFiles: Object.freeze([...input.read.sourceFiles]),\n    nodesByEventId,\n    childrenByParentId,\n    rootNodes: Object.freeze(scopedRuns.flatMap((run) => run.children)),\n  };\n}\n\nfunction resolveSelectedRun(\n  input: TraceCheckInput,\n  runId?: string,\n): { run?: InspectRunTree; diagnostics: TraceCheckDiagnostic[] } {\n  if (input.selectedRun) {\n    if (runId && input.selectedRun.runId !== runId) {\n      return {\n        diagnostics: [\n          diagnostic(\n            \"AI_CHECK_INVALID_ARGUMENTS\",\n            `Selected run ${input.selectedRun.runId} does not match requested run ${runId}.`,\n          ),\n        ],\n      };\n    }\n    return { run: input.selectedRun, diagnostics: [] };\n  }\n\n  if (runId) {\n    const run = input.read.runs.find((candidate) => candidate.runId === runId);\n    if (!run) {\n      return {\n        diagnostics: [\n          diagnostic(\"AI_CHECK_RUN_SELECTION_REQUIRED\", `Run not found: ${runId}.`),\n        ],\n      };\n    }\n    return { run, diagnostics: [] };\n  }\n\n  if (input.read.runs.length === 1) {\n    return { run: input.read.runs[0], diagnostics: [] };\n  }\n\n  if (input.read.runs.length === 0) {\n    return {\n      diagnostics: [\n        diagnostic(\n          \"AI_CHECK_RUN_SELECTION_REQUIRED\",\n          formatProgrammaticDiagnostic(\n            \"AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED\",\n            \"No runs are available for checks.\",\n          ),\n        ),\n      ],\n    };\n  }\n\n  return {\n    diagnostics: [\n      diagnostic(\n        \"AI_CHECK_RUN_SELECTION_REQUIRED\",\n        formatProgrammaticDiagnostic(\"AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED\"),\n      ),\n    ],\n  };\n}\n\nfunction selectRules(\n  rules: readonly TraceCheckRule[],\n  selectedIds: readonly string[] | undefined,\n): { rules: TraceCheckRule[]; diagnostics: TraceCheckDiagnostic[] } {\n  const diagnostics: TraceCheckDiagnostic[] = [];\n  const byId = new Map<string, TraceCheckRule>();\n\n  for (const rule of rules) {\n    if (byId.has(rule.id)) {\n      diagnostics.push(\n        diagnostic(\"AI_CHECK_INVALID_CONFIG\", `Duplicate trace check rule id: ${rule.id}.`, rule.id),\n      );\n      continue;\n    }\n    byId.set(rule.id, rule);\n  }\n\n  if (selectedIds && selectedIds.length > 0) {\n    const selected = new Set(selectedIds);\n    for (const id of selected) {\n      if (!byId.has(id)) {\n        diagnostics.push(\n          diagnostic(\"AI_CHECK_INVALID_CONFIG\", `Unknown trace check rule id: ${id}.`, id),\n        );\n      }\n    }\n    return {\n      rules: [...byId.values()].filter((rule) => selected.has(rule.id)).sort(compareRules),\n      diagnostics,\n    };\n  }\n\n  return { rules: [...byId.values()].sort(compareRules), diagnostics };\n}\n\nfunction compareRules(a: TraceCheckRule, b: TraceCheckRule): number {\n  return a.id.localeCompare(b.id);\n}\n\nfunction eventTimestamp(\n  finding: TraceCheckFinding,\n  eventById: ReadonlyMap<string, PersistedInspectEvent>,\n): string {\n  const eventId = finding.evidence[0]?.eventId;\n  return eventId ? eventById.get(eventId)?.timestamp ?? \"\" : \"\";\n}\n\nfunction compareFindings(\n  eventById: ReadonlyMap<string, PersistedInspectEvent>,\n): (a: TraceCheckFinding, b: TraceCheckFinding) => number {\n  return (a, b) => {\n    if (SEVERITY_RANK[a.severity] !== SEVERITY_RANK[b.severity]) {\n      return SEVERITY_RANK[a.severity] - SEVERITY_RANK[b.severity];\n    }\n    const byRule = a.ruleId.localeCompare(b.ruleId);\n    if (byRule !== 0) return byRule;\n    if (STATUS_RANK[a.status] !== STATUS_RANK[b.status]) {\n      return STATUS_RANK[a.status] - STATUS_RANK[b.status];\n    }\n    const byRun = compareStrings(a.evidence[0]?.runId, b.evidence[0]?.runId);\n    if (byRun !== 0) return byRun;\n    const byTime = eventTimestamp(a, eventById).localeCompare(eventTimestamp(b, eventById));\n    if (byTime !== 0) return byTime;\n    const byEvent = compareStrings(a.evidence[0]?.eventId, b.evidence[0]?.eventId);\n    if (byEvent !== 0) return byEvent;\n    return compareStrings(a.evidence[0]?.path, b.evidence[0]?.path);\n  };\n}\n\nfunction normalizeFinding(rule: TraceCheckRule, finding: TraceCheckFinding): TraceCheckFinding {\n  return {\n    ruleId: finding.ruleId || rule.id,\n    severity: finding.severity ?? rule.defaultSeverity,\n    status: finding.status,\n    message: finding.message,\n    ...(finding.expected !== undefined ? { expected: finding.expected } : {}),\n    ...(finding.actual !== undefined ? { actual: finding.actual } : {}),\n    evidence: [...(finding.evidence ?? [])],\n    ...(finding.category !== undefined ? { category: finding.category } : {}),\n    ...(finding.confidence !== undefined ? { confidence: finding.confidence } : {}),\n    ...(finding.detector !== undefined ? { detector: finding.detector } : {}),\n    ...(finding.action !== undefined ? { action: finding.action } : {}),\n  };\n}\n\nfunction summarize(\n  findings: readonly TraceCheckFinding[],\n  diagnostics: readonly TraceCheckDiagnostic[],\n  rulesEvaluated: number,\n): TraceCheckSummary {\n  return {\n    passed: findings.filter((finding) => finding.status === \"pass\").length,\n    failed: findings.filter(\n      (finding) => finding.status === \"fail\" && finding.severity === \"error\",\n    ).length,\n    warnings: findings.filter(\n      (finding) => finding.status === \"warning\" || finding.severity === \"warning\",\n    ).length,\n    errors: diagnostics.filter((item) => item.severity === \"error\").length,\n    rulesEvaluated,\n  };\n}\n\nfunction classifyRuleExecution(\n  findings: readonly TraceCheckFinding[],\n  threw: boolean,\n): TraceCheckRuleExecutionStatus {\n  if (threw) return \"error\";\n  if (findings.some((finding) => finding.status === \"fail\" && finding.severity === \"error\")) {\n    return \"fail\";\n  }\n  if (\n    findings.some(\n      (finding) => finding.status === \"warning\" || finding.severity === \"warning\",\n    )\n  ) {\n    return \"warning\";\n  }\n  return \"pass\";\n}\n\nfunction stringAttr(event: PersistedInspectEvent, keys: readonly string[]): string | undefined {\n  for (const key of keys) {\n    const value = event.attributes?.[key];\n    if (typeof value === \"string\" && value.trim() !== \"\") return value;\n  }\n  return undefined;\n}\n\n/**\n * Reads a string from `attributes.metadata`. v0.1 traces carry LLM identity\n * (model/provider/finishReason) under nested `metadata`, which the bridge keeps\n * at `attributes.metadata.*` rather than promoting to a top-level attribute the\n * way it promotes tokens to `tokenUsage`. Checks must look there too.\n */\nfunction metadataStringAttr(\n  event: PersistedInspectEvent,\n  keys: readonly string[],\n): string | undefined {\n  const metadata = event.attributes?.metadata;\n  if (typeof metadata !== \"object\" || metadata === null || Array.isArray(metadata)) {\n    return undefined;\n  }\n  const record = metadata as Record<string, unknown>;\n  for (const key of keys) {\n    const value = record[key];\n    if (typeof value === \"string\" && value.trim() !== \"\") return value;\n  }\n  return undefined;\n}\n\nfunction numericAttr(event: PersistedInspectEvent, keys: readonly string[]): number | undefined {\n  for (const key of keys) {\n    const value = event.attributes?.[key];\n    if (typeof value === \"number\" && Number.isFinite(value)) return value;\n  }\n  return undefined;\n}\n\nfunction booleanAttr(event: PersistedInspectEvent, keys: readonly string[]): boolean | undefined {\n  for (const key of keys) {\n    const value = event.attributes?.[key];\n    if (typeof value === \"boolean\") return value;\n  }\n  return undefined;\n}\n\nfunction stripPrefix(name: string, prefixes: readonly string[]): string {\n  for (const prefix of prefixes) {\n    if (name.startsWith(prefix)) return name.slice(prefix.length);\n  }\n  return name;\n}\n\nfunction eventEvidence(event: PersistedInspectEvent, path?: string): TraceCheckEvidence {\n  return {\n    runId: event.runId,\n    eventId: event.eventId,\n    parentId: event.parentId,\n    traceId: event.trace?.traceId,\n    spanId: event.trace?.spanId,\n    kind: event.kind,\n    name: event.name,\n    status: event.status,\n    ...(path ? { path } : {}),\n  };\n}\n\nfunction runEvidence(run: InspectRunTree | undefined): TraceCheckEvidence[] {\n  return run ? [{ runId: run.runId, name: run.name, status: run.status }] : [];\n}\n\ninterface SafetyFindingMeta {\n  category?: SafetyFindingCategory;\n  confidence?: SafetyFindingConfidence;\n  detector?: string;\n  action?: string;\n  severity?: TraceCheckSeverity;\n  status?: TraceCheckFindingStatus;\n}\n\nfunction failFinding(\n  ruleId: string,\n  message: string,\n  evidence: readonly TraceCheckEvidence[],\n  expected?: unknown,\n  actual?: unknown,\n  meta?: SafetyFindingMeta,\n): TraceCheckFinding {\n  return {\n    ruleId,\n    severity: meta?.severity ?? \"error\",\n    status: meta?.status ?? \"fail\",\n    message,\n    ...(expected !== undefined ? { expected } : {}),\n    ...(actual !== undefined ? { actual } : {}),\n    evidence: [...evidence],\n    ...(meta?.category !== undefined ? { category: meta.category } : {}),\n    ...(meta?.confidence !== undefined ? { confidence: meta.confidence } : {}),\n    ...(meta?.detector !== undefined ? { detector: meta.detector } : {}),\n    ...(meta?.action !== undefined ? { action: meta.action } : {}),\n  };\n}\n\nfunction toolName(event: PersistedInspectEvent): string {\n  return resolveCanonicalToolName(event);\n}\n\n/**\n * Canonical display name for a finished TOOL or LLM step endpoint.\n * TOOL uses {@link resolveCanonicalToolName}; LLM strips common name prefixes.\n */\nfunction stepEndpointName(event: PersistedInspectEvent, kind: StepOrderingKind): string {\n  if (kind === \"TOOL\") return resolveCanonicalToolName(event);\n  for (const prefix of [\"llm:\", \"generation:\", \"transcription:\", \"speech:\"] as const) {\n    if (event.name.startsWith(prefix)) return event.name.slice(prefix.length);\n  }\n  return event.name;\n}\n\nfunction formatStepEndpoint(endpoint: StepOrderingEndpoint): string {\n  return `${endpoint.kind} ${endpoint.name}`;\n}\n\nfunction otherKindsForStepName(\n  context: TraceCheckContext,\n  expectedKind: StepOrderingKind,\n  name: string,\n): string[] {\n  return [\n    ...new Set(\n      semanticEvents(context)\n        .filter((event) => {\n          const kind =\n            typeof event.kind === \"string\" ? (event.kind.toUpperCase() as string) : \"\";\n          if (kind === expectedKind) return false;\n          if (kind === \"TOOL\") return resolveCanonicalToolName(event) === name;\n          if (kind === \"LLM\") return stepEndpointName(event, \"LLM\") === name;\n          return (\n            event.name === name ||\n            event.name === `tool:${name}` ||\n            event.name === `llm:${name}` ||\n            event.name.endsWith(`:${name}`)\n          );\n        })\n        .map((event) =>\n          typeof event.kind === \"string\" ? event.kind.toUpperCase() : \"UNKNOWN\",\n        ),\n    ),\n  ].sort();\n}\n\n/**\n * Events for built-in semantic/structure rules (logical projection when present).\n * Safety rules continue to walk raw `context.events`.\n */\nfunction semanticEvents(\n  context: TraceCheckContext,\n): readonly PersistedInspectEvent[] {\n  return context.logicalEvents ?? context.events;\n}\n\nfunction llmModel(event: PersistedInspectEvent): string | undefined {\n  const keys = [\"model\", \"modelId\", \"responseModelId\", \"modelName\", \"model_name\"];\n  return (\n    stringAttr(event, keys) ??\n    metadataStringAttr(event, keys) ??\n    stripPrefix(event.name, [\"llm:\", \"generation:\", \"transcription:\", \"speech:\"])\n  );\n}\n\nfunction llmProvider(event: PersistedInspectEvent): string | undefined {\n  const keys = [\"provider\", \"providerName\", \"provider_name\"];\n  return stringAttr(event, keys) ?? metadataStringAttr(event, keys);\n}\n\nfunction llmFinishReason(event: PersistedInspectEvent): string | undefined {\n  const keys = [\"finishReason\", \"rawFinishReason\", \"finish_reason\"];\n  return stringAttr(event, keys) ?? metadataStringAttr(event, keys);\n}\n\nfunction retryCount(event: PersistedInspectEvent): number | undefined {\n  return numericAttr(event, [\"retryCount\", \"retryAttempt\", \"retry_attempt\", \"attempt\"]);\n}\n\nfunction finishedEvents(context: TraceCheckContext, kind?: PersistedInspectEvent[\"kind\"]): PersistedInspectEvent[] {\n  return semanticEvents(context).filter(\n    (event) =>\n      (kind === undefined || event.kind === kind) &&\n      event.status !== \"running\",\n  );\n}\n\n/**\n * All logical tool invocations, including still-running ones.\n * Used for presence, forbidden, allowed, and invocation-count policy.\n */\nfunction toolInvocationEvents(context: TraceCheckContext): PersistedInspectEvent[] {\n  return semanticEvents(context).filter((event) => event.kind === \"TOOL\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction eventMap(events: readonly PersistedInspectEvent[]): Map<string, PersistedInspectEvent> {\n  return new Map(events.map((event) => [event.eventId, event]));\n}\n\nfunction parseEventTime(value: string | undefined): number | undefined {\n  if (!value) return undefined;\n  const parsed = Date.parse(value);\n  return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction eventStartMs(event: PersistedInspectEvent): number | undefined {\n  return parseEventTime(event.startedAt) ?? parseEventTime(event.timestamp);\n}\n\nfunction eventEndMs(event: PersistedInspectEvent): number | undefined {\n  const endedAt = parseEventTime(event.endedAt);\n  if (endedAt !== undefined) return endedAt;\n  const startedAt = eventStartMs(event);\n  if (\n    startedAt !== undefined &&\n    event.durationMs !== undefined &&\n    Number.isFinite(event.durationMs)\n  ) {\n    return startedAt + event.durationMs;\n  }\n  return undefined;\n}\n\nfunction sortedStrings(values: readonly string[] | undefined): string[] {\n  return [...(values ?? [])].sort((a, b) => a.localeCompare(b));\n}\n\nfunction normalizedKey(value: string): string {\n  return value.toLowerCase().replace(/[^a-z0-9_]/g, \"\");\n}\n\nfunction lastPathSegment(path: string): string {\n  const parts = path.split(\".\");\n  return parts[parts.length - 1] ?? path;\n}\n\nfunction valueType(value: unknown): string {\n  if (Array.isArray(value)) return \"array\";\n  if (value === null) return \"null\";\n  return typeof value;\n}\n\nfunction serializedByteLength(value: unknown): number | undefined {\n  try {\n    return Buffer.byteLength(JSON.stringify(value), \"utf-8\");\n  } catch {\n    return undefined;\n  }\n}\n\nfunction pushValueEntries(\n  entries: EventValueEntry[],\n  event: PersistedInspectEvent,\n  value: unknown,\n  path: string,\n  key?: string,\n  depth = 0,\n): void {\n  entries.push({ event, path, key, value });\n  if (depth >= 8) return;\n\n  if (Array.isArray(value)) {\n    for (const [index, item] of value.entries()) {\n      pushValueEntries(entries, event, item, `${path}.${index}`, String(index), depth + 1);\n    }\n    return;\n  }\n\n  if (!isRecord(value)) return;\n  for (const nestedKey of Object.keys(value).sort((a, b) => a.localeCompare(b))) {\n    pushValueEntries(\n      entries,\n      event,\n      value[nestedKey],\n      `${path}.${nestedKey}`,\n      nestedKey,\n      depth + 1,\n    );\n  }\n}\n\nfunction eventValueEntries(\n  event: PersistedInspectEvent,\n  options: { includeSummaries?: boolean; includeError?: boolean } = {},\n): EventValueEntry[] {\n  const entries: EventValueEntry[] = [];\n  if (event.attributes !== undefined) {\n    pushValueEntries(entries, event, event.attributes, \"attributes\", \"attributes\");\n  }\n  if (options.includeSummaries) {\n    if (event.inputSummary !== undefined) {\n      pushValueEntries(entries, event, event.inputSummary, \"inputSummary\", \"inputSummary\");\n    }\n    if (event.outputSummary !== undefined) {\n      pushValueEntries(entries, event, event.outputSummary, \"outputSummary\", \"outputSummary\");\n    }\n  }\n  if (options.includeError && event.error !== undefined) {\n    pushValueEntries(entries, event, event.error, \"error\", \"error\");\n  }\n  return entries;\n}\n\nfunction limitFindings(\n  findings: TraceCheckFinding[],\n  maxFindings: number | undefined,\n): TraceCheckFinding[] {\n  if (maxFindings === undefined || findings.length <= maxFindings) return findings;\n  return findings.slice(0, Math.max(0, maxFindings));\n}\n\n/**\n * True when the entire string is a redaction/hash placeholder — not merely\n * contains a marker beside residual sensitive text.\n */\nfunction isFullyRedactedValue(\n  value: unknown,\n  markers: readonly string[] = [\"[REDACTED]\", \"[REDACTED:\"],\n): boolean {\n  if (typeof value !== \"string\") return false;\n  const trimmed = value.trim();\n  if (trimmed.length === 0) return false;\n  if (/^\\[HASH:[A-Za-z0-9_-]+\\]$/.test(trimmed)) return true;\n  if (/^\\[REDACTED:[^\\]]*\\]$/.test(trimmed)) return true;\n  for (const marker of markers) {\n    if (marker.endsWith(\":\")) continue;\n    if (trimmed === marker) return true;\n  }\n  return false;\n}\n\nfunction isSensitiveKey(key: string | undefined, sensitiveKeys: readonly string[]): boolean {\n  return isCredentialSensitiveKey(key, sensitiveKeys);\n}\n\nfunction isRawContentKey(key: string | undefined, forbiddenKeys: readonly string[]): boolean {\n  if (!key) return false;\n  const normalized = normalizedKey(key);\n  return forbiddenKeys.some((forbidden) => normalized === normalizedKey(forbidden));\n}\n\n/**\n * True when the entry is under a metrics path (tokenUsage / usage) whose leaf\n * is a count field — not a raw prompt/output payload.\n */\nfunction isSafeRawContentMetricPath(\n  path: string,\n  key: string | undefined,\n  safePathPrefixes: readonly string[],\n): boolean {\n  const leaf = normalizedKey(key ?? lastPathSegment(path));\n  if (!SAFE_USAGE_LEAF_KEYS.has(leaf)) return false;\n\n  const parts = path.split(\".\").filter(Boolean);\n  if (parts.length < 2) return false;\n  const parent = parts[parts.length - 2] ?? \"\";\n  const parentNorm = normalizedKey(parent);\n  return safePathPrefixes.some((prefix) => parentNorm === normalizedKey(prefix));\n}\n\nfunction isRawContentPath(\n  path: string,\n  key: string | undefined,\n  forbiddenKeys: readonly string[],\n  safePathPrefixes: readonly string[],\n): boolean {\n  if (isSafeRawContentMetricPath(path, key, safePathPrefixes)) return false;\n  return isRawContentKey(key ?? lastPathSegment(path), forbiddenKeys);\n}\n\nfunction parentMarkedUnresolved(event: PersistedInspectEvent): boolean {\n  if (\n    booleanAttr(event, [\n      \"parentUnresolved\",\n      \"unresolvedParent\",\n      \"relationshipUnresolved\",\n      \"unresolvedRelationship\",\n    ]) === true\n  ) {\n    return true;\n  }\n  const resolution = stringAttr(event, [\n    \"parentResolution\",\n    \"relationshipResolution\",\n    \"relationshipStatus\",\n  ]);\n  return resolution === \"unresolved\" || resolution === \"missing-parent\";\n}\n\nfunction signalName(\n  event: PersistedInspectEvent,\n  attributeKeys: readonly string[],\n  prefixes: readonly string[],\n): string {\n  return stringAttr(event, attributeKeys) ?? stripPrefix(event.name, prefixes);\n}\n\nfunction guardrailEvents(context: TraceCheckContext): PersistedInspectEvent[] {\n  return finishedEvents(context).filter((event) => {\n    const name = event.name.toLowerCase();\n    if (name.startsWith(\"guardrail:\") || name.includes(\".guardrail.\")) return true;\n    return stringAttr(event, [\"guardrailName\", \"guardrail\", \"guardrailId\"]) !== undefined;\n  });\n}\n\nfunction retryValue(event: PersistedInspectEvent): number {\n  return retryCount(event) ?? 0;\n}\n\nfunction eventDurationMs(event: PersistedInspectEvent): number | undefined {\n  if (event.durationMs !== undefined) return event.durationMs;\n  const start = eventStartMs(event);\n  const end = eventEndMs(event);\n  return start !== undefined && end !== undefined && end >= start ? end - start : undefined;\n}\n\nfunction treeShape(nodes: readonly InspectNode[]): string[] {\n  const lines: string[] = [];\n  const visit = (node: InspectNode, path: string) => {\n    lines.push(`${path}:${node.event.kind}:${node.event.name}:${node.event.status ?? \"unknown\"}`);\n    node.children.forEach((child, index) => visit(child, `${path}.${index}`));\n  };\n  nodes.forEach((node, index) => visit(node, String(index)));\n  return lines;\n}\n\nfunction statusShape(context: TraceCheckContext): string[] {\n  return semanticEvents(context)\n    .map((event) => `${event.kind}:${event.name}:${event.status ?? \"unknown\"}`)\n    .sort((a, b) => a.localeCompare(b));\n}\n\nfunction toolShape(context: TraceCheckContext): string[] {\n  return finishedEvents(context, \"TOOL\").map((event) =>\n    [\n      toolName(event),\n      event.status ?? \"unknown\",\n      retryValue(event),\n      eventDurationMs(event) ?? \"unknown\",\n    ].join(\":\"),\n  );\n}\n\nfunction llmShape(context: TraceCheckContext): string[] {\n  return finishedEvents(context, \"LLM\").map((event) =>\n    [\n      llmProvider(event) ?? \"unknown\",\n      llmModel(event) ?? \"unknown\",\n      llmFinishReason(event) ?? \"unknown\",\n      event.tokenUsage?.input ?? 0,\n      event.tokenUsage?.output ?? 0,\n      event.tokenUsage?.total ?? 0,\n      event.tokenUsage?.cached ?? 0,\n    ].join(\":\"),\n  );\n}\n\nfunction errorShape(context: TraceCheckContext): string[] {\n  return semanticEvents(context)\n    .filter((event) => event.status === \"error\" || event.error !== undefined)\n    .map((event) =>\n      [\n        event.kind,\n        event.name,\n        event.error?.name ?? \"Error\",\n        event.error?.code ?? \"unknown\",\n      ].join(\":\"),\n    )\n    .sort((a, b) => a.localeCompare(b));\n}\n\nfunction retrievalShape(context: TraceCheckContext): string[] {\n  return finishedEvents(context, \"RETRIEVER\")\n    .map((event) =>\n      signalName(event, [\"retrievalName\", \"retrieverName\", \"retriever\"], [\"retriever:\", \"retrieval:\"]),\n    )\n    .sort((a, b) => a.localeCompare(b));\n}\n\nfunction guardrailShape(context: TraceCheckContext): string[] {\n  return guardrailEvents(context)\n    .map((event) => signalName(event, [\"guardrailName\", \"guardrail\", \"guardrailId\"], [\"guardrail:\"]))\n    .sort((a, b) => a.localeCompare(b));\n}\n\nfunction firstEvidenceForKind(\n  context: TraceCheckContext,\n  kind: PersistedInspectEvent[\"kind\"],\n  path: string,\n): TraceCheckEvidence[] {\n  const event = semanticEvents(context).find((candidate) => candidate.kind === kind);\n  return event ? [eventEvidence(event, path)] : runEvidence(context.selectedRun);\n}\n\nfunction baselineDiffFinding(\n  message: string,\n  evidence: readonly TraceCheckEvidence[],\n  expected: unknown,\n  actual: unknown,\n): TraceCheckFinding {\n  return failFinding(\"baseline.regression\", message, evidence, expected, actual);\n}\n\n/**\n * Create the experimental built-in run status rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createRunStatusRule(options: RunStatusRuleOptions = {}): TraceCheckRule {\n  const expected = options.expected ?? \"ok\";\n  const allowIncomplete = options.allowIncomplete === true;\n  return {\n    id: \"run.status\",\n    category: \"run\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const findings: TraceCheckFinding[] = [];\n      const actual = context.selectedRun?.status ?? \"unknown\";\n      if (actual !== expected) {\n        findings.push(\n          failFinding(\n            \"run.status\",\n            `Run status ${actual} did not match expected ${expected}.`,\n            runEvidence(context.selectedRun),\n            expected,\n            actual,\n          ),\n        );\n      }\n      if (!allowIncomplete) {\n        const running = semanticEvents(context).filter((event) => event.status === \"running\");\n        if (running.length > 0) {\n          findings.push(\n            failFinding(\n              \"run.status\",\n              \"Run contains incomplete running events.\",\n              running.map((event) => eventEvidence(event)),\n              \"no running events\",\n              running.length,\n            ),\n          );\n        }\n      }\n      return findings;\n    },\n  };\n}\n\n/**\n * Create the experimental built-in run duration rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createRunDurationRule(options: RunDurationRuleOptions): TraceCheckRule {\n  return {\n    id: \"run.duration\",\n    category: \"run\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const actual = context.selectedRun?.durationMs;\n      if (actual === undefined || actual <= options.maxDurationMs) return [];\n      return [\n        failFinding(\n          \"run.duration\",\n          `Run duration ${actual}ms exceeded ${options.maxDurationMs}ms.`,\n          runEvidence(context.selectedRun),\n          { maxDurationMs: options.maxDurationMs },\n          actual,\n        ),\n      ];\n    },\n  };\n}\n\n/**\n * Fail when any step duration exceeds the configured maximum.\n */\nexport function createMaxStepDurationRule(options: MaxStepDurationRuleOptions): TraceCheckRule {\n  return {\n    id: \"run.maxStepDuration\",\n    category: \"run\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const over = semanticEvents(context).filter((event) => {\n        const duration = eventDurationMs(event);\n        return duration !== undefined && duration > options.maxDurationMs;\n      });\n      if (over.length === 0) return [];\n      return [\n        failFinding(\n          \"run.maxStepDuration\",\n          `${over.length} step(s) exceeded max duration ${options.maxDurationMs}ms.`,\n          over.map((event) => eventEvidence(event, \"durationMs\")),\n          { maxDurationMs: options.maxDurationMs },\n          over.map((event) => ({\n            eventId: event.eventId,\n            name: event.name,\n            durationMs: eventDurationMs(event),\n          })),\n        ),\n      ];\n    },\n  };\n}\n\n/**\n * Detect stalled runs: running events and optionally started-but-unended events.\n */\nexport function createStallDetectionRule(\n  options: StallDetectionRuleOptions = {},\n): TraceCheckRule {\n  const requireEndedAt = options.requireEndedAt === true;\n  return {\n    id: \"run.stall\",\n    category: \"run\",\n    defaultSeverity: \"warning\",\n    evaluate(context) {\n      const findings: TraceCheckFinding[] = [];\n      const running = semanticEvents(context).filter((event) => event.status === \"running\");\n      if (running.length > 0) {\n        findings.push(\n          failFinding(\n            \"run.stall\",\n            `Found ${running.length} event(s) still running (possible stall).`,\n            running.map((event) => eventEvidence(event, \"status\")),\n            \"no running events\",\n            running.length,\n          ),\n        );\n      }\n      if (requireEndedAt) {\n        const incomplete = semanticEvents(context).filter(\n          (event) =>\n            event.startedAt !== undefined &&\n            event.endedAt === undefined &&\n            event.status !== \"running\",\n        );\n        if (incomplete.length > 0) {\n          findings.push(\n            failFinding(\n              \"run.stall\",\n              `Found ${incomplete.length} started event(s) without endedAt.`,\n              incomplete.map((event) => eventEvidence(event, \"endedAt\")),\n              \"endedAt for started events\",\n              incomplete.length,\n            ),\n          );\n        }\n      }\n      return findings;\n    },\n  };\n}\n\n/**\n * Require a completed run with no running events.\n */\nexport function createRequireCompletedRule(): TraceCheckRule {\n  return {\n    id: \"run.requireCompleted\",\n    category: \"run\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const findings: TraceCheckFinding[] = [];\n      const runStatus = context.selectedRun?.status;\n      if (runStatus === \"running\") {\n        findings.push(\n          failFinding(\n            \"run.requireCompleted\",\n            \"Run is still running.\",\n            runEvidence(context.selectedRun),\n            \"completed run\",\n            runStatus,\n          ),\n        );\n      }\n      const running = semanticEvents(context).filter((event) => event.status === \"running\");\n      if (running.length > 0) {\n        findings.push(\n          failFinding(\n            \"run.requireCompleted\",\n            `Run has ${running.length} incomplete running event(s).`,\n            running.map((event) => eventEvidence(event, \"status\")),\n            \"no running events\",\n            running.length,\n          ),\n        );\n      }\n      return findings;\n    },\n  };\n}\n\n/**\n * Create the experimental built-in event count rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createRunEventCountRule(options: RunEventCountRuleOptions): TraceCheckRule {\n  return {\n    id: \"run.eventCount\",\n    category: \"run\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const count = semanticEvents(context).filter(\n        (event) => options.kind === undefined || event.kind === options.kind,\n      ).length;\n      const findings: TraceCheckFinding[] = [];\n      if (options.min !== undefined && count < options.min) {\n        findings.push(\n          failFinding(\n            \"run.eventCount\",\n            `Event count ${count} was below minimum ${options.min}.`,\n            runEvidence(context.selectedRun),\n            { kind: options.kind, min: options.min },\n            count,\n          ),\n        );\n      }\n      if (options.max !== undefined && count > options.max) {\n        findings.push(\n          failFinding(\n            \"run.eventCount\",\n            `Event count ${count} exceeded maximum ${options.max}.`,\n            runEvidence(context.selectedRun),\n            { kind: options.kind, max: options.max },\n            count,\n          ),\n        );\n      }\n      return findings;\n    },\n  };\n}\n\n/**\n * Create the experimental built-in run depth rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createRunDepthRule(options: RunDepthRuleOptions): TraceCheckRule {\n  return {\n    id: \"run.depth\",\n    category: \"run\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const nodes = [...context.nodesByEventId.values()];\n      const maxDepth = nodes.reduce((max, node) => Math.max(max, node.depth), 0);\n      if (maxDepth <= options.maxDepth) return [];\n      const deepest = nodes.filter((node) => node.depth === maxDepth);\n      return [\n        failFinding(\n          \"run.depth\",\n          `Run depth ${maxDepth} exceeded ${options.maxDepth}.`,\n          deepest.map((node) => ({\n            runId: node.event.runId,\n            eventId: node.event.eventId,\n            parentId: node.event.parentId,\n            kind: node.event.kind,\n            name: node.event.name,\n            status: node.event.status,\n          })),\n          { maxDepth: options.maxDepth },\n          maxDepth,\n        ),\n      ];\n    },\n  };\n}\n\n/**\n * Create the experimental built-in tool usage rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createToolUsageRule(options: ToolUsageRuleOptions): TraceCheckRule {\n  return {\n    id: \"tool.usage\",\n    category: \"tool\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      // Policy rules observe invocation, including unfinished/running tools.\n      const tools = toolInvocationEvents(context);\n      const names = tools.map(toolName);\n      const nameSet = new Set(names);\n      const findings: TraceCheckFinding[] = [];\n\n      for (const required of options.required ?? []) {\n        if (!nameSet.has(required)) {\n          const otherKinds = [\n            ...new Set(\n              context.events\n                .filter((event) => {\n                  const kind = typeof event.kind === \"string\" ? event.kind.toUpperCase() : \"\";\n                  if (kind === \"TOOL\") return false;\n                  return (\n                    resolveCanonicalToolName(event) === required ||\n                    event.name === required ||\n                    event.name === `tool:${required}` ||\n                    event.name.endsWith(`:${required}`)\n                  );\n                })\n                .map((event) =>\n                  typeof event.kind === \"string\" ? event.kind.toUpperCase() : \"UNKNOWN\",\n                ),\n            ),\n          ].sort();\n          const hint =\n            otherKinds.length > 0\n              ? ` Required name appears under non-TOOL kind(s): ${otherKinds.join(\", \")}. tools.required / requiredOrder match TOOL events only.`\n              : \"\";\n          findings.push(\n            failFinding(\n              \"tool.usage\",\n              `Required tool ${required} did not appear.${hint}`,\n              runEvidence(context.selectedRun),\n              required,\n              names,\n            ),\n          );\n        }\n      }\n\n      const forbidden = new Set(options.forbidden ?? []);\n      // Empty allowlist means \"no restriction\", not \"reject everything\".\n      const allowed = options.allowed?.length ? new Set(options.allowed) : undefined;\n      for (const event of tools) {\n        const name = toolName(event);\n        if (forbidden.has(name)) {\n          findings.push(\n            failFinding(\"tool.usage\", `Forbidden tool ${name} appeared.`, [eventEvidence(event)], \"tool absent\", name),\n          );\n        }\n        if (allowed && !allowed.has(name)) {\n          findings.push(\n            failFinding(\"tool.usage\", `Tool ${name} is not in the allowed tool set.`, [eventEvidence(event)], [...allowed].sort(), name),\n          );\n        }\n      }\n\n      if (options.minCount !== undefined && tools.length < options.minCount) {\n        findings.push(\n          failFinding(\"tool.usage\", `Tool count ${tools.length} was below minimum ${options.minCount}.`, runEvidence(context.selectedRun), { minCount: options.minCount }, tools.length),\n        );\n      }\n      if (options.maxCount !== undefined && tools.length > options.maxCount) {\n        findings.push(\n          failFinding(\"tool.usage\", `Tool count ${tools.length} exceeded maximum ${options.maxCount}.`, tools.map((event) => eventEvidence(event)), { maxCount: options.maxCount }, tools.length),\n        );\n      }\n\n      return findings;\n    },\n  };\n}\n\n/**\n * Kind-aware step ordering over finished TOOL / LLM events.\n *\n * Low-level default: missing endpoints yield no finding when `requireEndpoints`\n * is false (compositional). TraceContract `steps.orderRelations` defaults\n * `requireEndpoints` to true.\n *\n * TOOL-only pairs preserve historical `tool.order*` finding codes and messages\n * used by {@link createToolOrderingRule}.\n *\n * @experimental Available through `agent-inspect/checks`.\n */\nexport function createStepOrderingRule(options: StepOrderingRuleOptions): TraceCheckRule {\n  const bothTools = options.before.kind === \"TOOL\" && options.after.kind === \"TOOL\";\n  const ruleId = options.id ?? (bothTools ? \"tool.order\" : \"step.order\");\n  const mode = options.mode ?? \"first-occurrence\";\n  const requireEndpoints = options.requireEndpoints === true;\n  const beforeLabel = bothTools ? options.before.name : formatStepEndpoint(options.before);\n  const afterLabel = bothTools ? options.after.name : formatStepEndpoint(options.after);\n  const subject = bothTools ? \"Tool\" : \"Step\";\n\n  return {\n    id: ruleId,\n    category: bothTools ? \"tool\" : \"structure\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const beforeEvents = finishedEvents(context, options.before.kind).filter(\n        (event) => stepEndpointName(event, options.before.kind) === options.before.name,\n      );\n      const afterEvents = finishedEvents(context, options.after.kind).filter(\n        (event) => stepEndpointName(event, options.after.kind) === options.after.name,\n      );\n\n      if (beforeEvents.length === 0 || afterEvents.length === 0) {\n        if (!requireEndpoints) return [];\n        const findings: TraceCheckFinding[] = [];\n        if (beforeEvents.length === 0) {\n          const otherKinds = otherKindsForStepName(\n            context,\n            options.before.kind,\n            options.before.name,\n          );\n          const hint =\n            otherKinds.length > 0\n              ? ` Required name appears under non-${options.before.kind} kind(s): ${otherKinds.join(\", \")}.`\n              : \"\";\n          findings.push(\n            failFinding(\n              ruleId,\n              `Required ${formatStepEndpoint(options.before)} did not appear.${hint}`,\n              runEvidence(context.selectedRun),\n              options.before,\n              {\n                code: bothTools ? \"tool.order.missing-endpoint\" : \"step.order.missing-endpoint\",\n                endpoint: \"before\",\n                otherKinds,\n              },\n            ),\n          );\n        }\n        if (afterEvents.length === 0) {\n          const otherKinds = otherKindsForStepName(\n            context,\n            options.after.kind,\n            options.after.name,\n          );\n          const hint =\n            otherKinds.length > 0\n              ? ` Required name appears under non-${options.after.kind} kind(s): ${otherKinds.join(\", \")}.`\n              : \"\";\n          findings.push(\n            failFinding(\n              ruleId,\n              `Required ${formatStepEndpoint(options.after)} did not appear.${hint}`,\n              runEvidence(context.selectedRun),\n              options.after,\n              {\n                code: bothTools ? \"tool.order.missing-endpoint\" : \"step.order.missing-endpoint\",\n                endpoint: \"after\",\n                otherKinds,\n              },\n            ),\n          );\n        }\n        return findings;\n      }\n\n      const encounter = finishedEvents(context).filter(\n        (event) =>\n          (event.kind === options.before.kind &&\n            stepEndpointName(event, options.before.kind) === options.before.name) ||\n          (event.kind === options.after.kind &&\n            stepEndpointName(event, options.after.kind) === options.after.name),\n      );\n      let beforeIndex: number | undefined;\n      let afterIndex: number | undefined;\n      for (const [position, event] of encounter.entries()) {\n        if (\n          beforeIndex === undefined &&\n          event.kind === options.before.kind &&\n          stepEndpointName(event, options.before.kind) === options.before.name\n        ) {\n          beforeIndex = position;\n        }\n        if (\n          afterIndex === undefined &&\n          event.kind === options.after.kind &&\n          stepEndpointName(event, options.after.kind) === options.after.name\n        ) {\n          afterIndex = position;\n        }\n      }\n      if (beforeIndex === undefined || afterIndex === undefined) {\n        return [];\n      }\n\n      if (mode === \"first-occurrence\" && beforeIndex >= afterIndex) {\n        return [\n          failFinding(\n            ruleId,\n            `${subject} ${beforeLabel} must appear before ${afterLabel}.`,\n            [\n              eventEvidence(encounter[beforeIndex]!),\n              eventEvidence(encounter[afterIndex]!),\n            ],\n            bothTools\n              ? { before: options.before.name, after: options.after.name }\n              : { before: options.before, after: options.after },\n            bothTools\n              ? finishedEvents(context, \"TOOL\").map(toolName)\n              : encounter.map((event) =>\n                  event.kind === \"TOOL\" || event.kind === \"LLM\"\n                    ? `${event.kind}:${stepEndpointName(event, event.kind)}`\n                    : event.name,\n                ),\n          ),\n        ];\n      }\n\n      const beforeEvent = beforeEvents[0]!;\n      const afterEvent = afterEvents[0]!;\n      const beforeEnd = eventEndMs(beforeEvent);\n      const afterStart = eventStartMs(afterEvent);\n      const endpointExpected = bothTools\n        ? { before: options.before.name, after: options.after.name }\n        : { before: options.before, after: options.after };\n\n      if (mode === \"happens-before\") {\n        const expected = {\n          ...endpointExpected,\n          mode,\n          relation: \"before.end <= after.start\",\n        };\n        if (\n          options.before.kind === options.after.kind &&\n          options.before.name === options.after.name\n        ) {\n          return [\n            failFinding(\n              ruleId,\n              `${subject} ${beforeLabel} cannot causally happen before itself.`,\n              [eventEvidence(beforeEvent)],\n              expected,\n              { code: bothTools ? \"tool.order.same-tool\" : \"step.order.same-step\" },\n            ),\n          ];\n        }\n        if (beforeEnd === undefined || afterStart === undefined) {\n          return [\n            failFinding(\n              ruleId,\n              `${subject} order ${beforeLabel} before ${afterLabel} could not establish causal timing.`,\n              [eventEvidence(beforeEvent), eventEvidence(afterEvent)],\n              expected,\n              {\n                code: bothTools\n                  ? \"tool.order.interval-unresolved\"\n                  : \"step.order.interval-unresolved\",\n                beforeEndResolved: beforeEnd !== undefined,\n                afterStartResolved: afterStart !== undefined,\n              },\n            ),\n          ];\n        }\n        if (beforeEnd > afterStart) {\n          return [\n            failFinding(\n              ruleId,\n              `${subject} ${beforeLabel} must finish before ${afterLabel} starts.`,\n              [eventEvidence(beforeEvent), eventEvidence(afterEvent)],\n              expected,\n              {\n                beforeEndedAt: new Date(beforeEnd).toISOString(),\n                afterStartedAt: new Date(afterStart).toISOString(),\n              },\n            ),\n          ];\n        }\n        return [];\n      }\n\n      if (mode === \"all-occurrences\") {\n        const expected = {\n          ...endpointExpected,\n          mode,\n          relation: \"max(before.end) <= min(after.start)\",\n        };\n        if (\n          options.before.kind === options.after.kind &&\n          options.before.name === options.after.name\n        ) {\n          return [\n            failFinding(\n              ruleId,\n              `${subject} ${beforeLabel} cannot causally happen before itself.`,\n              [eventEvidence(beforeEvent)],\n              expected,\n              { code: bothTools ? \"tool.order.same-tool\" : \"step.order.same-step\" },\n            ),\n          ];\n        }\n\n        let latestBefore: { event: PersistedInspectEvent; end: number } | undefined;\n        let earliestAfter: { event: PersistedInspectEvent; start: number } | undefined;\n        let missingBeforeEnds = 0;\n        let missingAfterStarts = 0;\n        let firstMissingBefore: PersistedInspectEvent | undefined;\n        let firstMissingAfter: PersistedInspectEvent | undefined;\n\n        for (const event of beforeEvents) {\n          const end = eventEndMs(event);\n          if (end === undefined) {\n            missingBeforeEnds += 1;\n            firstMissingBefore ??= event;\n          } else if (latestBefore === undefined || end > latestBefore.end) {\n            latestBefore = { event, end };\n          }\n        }\n        for (const event of afterEvents) {\n          const start = eventStartMs(event);\n          if (start === undefined) {\n            missingAfterStarts += 1;\n            firstMissingAfter ??= event;\n          } else if (earliestAfter === undefined || start < earliestAfter.start) {\n            earliestAfter = { event, start };\n          }\n        }\n\n        if (\n          missingBeforeEnds > 0 ||\n          missingAfterStarts > 0 ||\n          latestBefore === undefined ||\n          earliestAfter === undefined\n        ) {\n          return [\n            failFinding(\n              ruleId,\n              `${subject} order ${beforeLabel} before ${afterLabel} could not establish all causal intervals.`,\n              [firstMissingBefore, firstMissingAfter]\n                .filter((event): event is PersistedInspectEvent => event !== undefined)\n                .map((event) => eventEvidence(event)),\n              expected,\n              {\n                code: bothTools\n                  ? \"tool.order.interval-unresolved\"\n                  : \"step.order.interval-unresolved\",\n                missingBeforeEnds,\n                missingAfterStarts,\n              },\n            ),\n          ];\n        }\n        if (latestBefore.end > earliestAfter.start) {\n          return [\n            failFinding(\n              ruleId,\n              bothTools\n                ? `Every ${options.before.name} tool call must finish before any ${options.after.name} tool call starts.`\n                : `Every ${beforeLabel} must finish before any ${afterLabel} starts.`,\n              [eventEvidence(latestBefore.event), eventEvidence(earliestAfter.event)],\n              expected,\n              {\n                latestBeforeEndedAt: new Date(latestBefore.end).toISOString(),\n                earliestAfterStartedAt: new Date(earliestAfter.start).toISOString(),\n              },\n            ),\n          ];\n        }\n        return [];\n      }\n\n      if (\n        beforeEnd !== undefined &&\n        afterStart !== undefined &&\n        beforeEnd > afterStart\n      ) {\n        return [\n          {\n            ruleId,\n            severity: \"warning\",\n            status: \"warning\",\n            message:\n              `${subject} order ${beforeLabel} before ${afterLabel} satisfied start/encounter order, ` +\n              `but intervals overlap so causal completion before the next ${bothTools ? \"tool\" : \"step\"} was not established.`,\n            expected: {\n              ...endpointExpected,\n              mode: \"first-occurrence\",\n            },\n            actual: {\n              code: bothTools ? \"tool.order.overlap\" : \"step.order.overlap\",\n              beforeEndedAt: beforeEvent.endedAt,\n              afterStartedAt: afterEvent.startedAt ?? afterEvent.timestamp,\n            },\n            evidence: [eventEvidence(beforeEvent), eventEvidence(afterEvent)],\n          },\n        ];\n      }\n\n      return [];\n    },\n  };\n}\n\n/**\n * Create the experimental built-in tool ordering rule.\n *\n * Low-level default: first-occurrence start/encounter order among finished\n * tool events. Missing endpoints yield no finding (compositional). TraceContract\n * `requiredOrder` additionally requires presence of listed tools.\n *\n * When order passes by encounter order but intervals overlap, emits a\n * non-failing `tool.order.overlap` warning (not causal happens-before).\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createToolOrderingRule(options: ToolOrderingRuleOptions): TraceCheckRule {\n  return createStepOrderingRule({\n    before: { kind: \"TOOL\", name: options.before },\n    after: { kind: \"TOOL\", name: options.after },\n    ...(options.id !== undefined ? { id: options.id } : {}),\n    ...(options.mode !== undefined ? { mode: options.mode } : {}),\n    requireEndpoints: false,\n  });\n}\n\n/**\n * Create the experimental built-in tool failure/retry rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createToolFailureRule(options: ToolFailureRuleOptions): TraceCheckRule {\n  return {\n    id: \"tool.failures\",\n    category: \"tool\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const tools = finishedEvents(context, \"TOOL\");\n      const failures = tools.filter((event) => event.status === \"error\");\n      const retries = tools\n        .map((event) => ({ event, count: retryCount(event) }))\n        .filter((item): item is { event: PersistedInspectEvent; count: number } => item.count !== undefined);\n      const findings: TraceCheckFinding[] = [];\n\n      if (options.maxFailures !== undefined && failures.length > options.maxFailures) {\n        findings.push(\n          failFinding(\n            \"tool.failures\",\n            `Tool failure count ${failures.length} exceeded ${options.maxFailures}.`,\n            failures.map((event) => eventEvidence(event)),\n            { maxFailures: options.maxFailures },\n            failures.length,\n          ),\n        );\n      }\n\n      if (options.maxRetries !== undefined) {\n        const excessiveRetries = retries.filter((item) => item.count > options.maxRetries!);\n        if (excessiveRetries.length > 0) {\n          findings.push(\n            failFinding(\n              \"tool.failures\",\n              `Tool retry count exceeded ${options.maxRetries}.`,\n              excessiveRetries.map((item) => eventEvidence(item.event, \"attributes.retryCount\")),\n              { maxRetries: options.maxRetries },\n              excessiveRetries.map((item) => ({ tool: toolName(item.event), retries: item.count })),\n            ),\n          );\n        }\n      }\n\n      return findings;\n    },\n  };\n}\n\n/**\n * Create the experimental built-in LLM usage rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createLlmUsageRule(options: LlmUsageRuleOptions): TraceCheckRule {\n  return {\n    id: \"llm.usage\",\n    category: \"llm\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const llms = finishedEvents(context, \"LLM\");\n      const findings: TraceCheckFinding[] = [];\n      // An empty allowlist means \"no restriction\", not \"reject everything\".\n      // Callers (CLI --max-total-tokens with no --allowed-model, config, or\n      // contract) may pass [], and an empty array is truthy, so guard on length.\n      const allowedModels = options.allowedModels?.length ? new Set(options.allowedModels) : undefined;\n      const allowedProviders = options.allowedProviders?.length ? new Set(options.allowedProviders) : undefined;\n      const finishReasons = options.finishReasons?.length ? new Set(options.finishReasons) : undefined;\n\n      if (options.maxCalls !== undefined && llms.length > options.maxCalls) {\n        findings.push(\n          failFinding(\n            \"llm.usage\",\n            `LLM call count ${llms.length} exceeded ${options.maxCalls}.`,\n            llms.map((event) => eventEvidence(event)),\n            { maxCalls: options.maxCalls },\n            llms.length,\n          ),\n        );\n      }\n\n      for (const event of llms) {\n        const model = llmModel(event);\n        const provider = llmProvider(event);\n        const finishReason = llmFinishReason(event);\n        if (allowedModels && (!model || !allowedModels.has(model))) {\n          findings.push(\n            failFinding(\"llm.usage\", `LLM model ${model ?? \"unknown\"} is not allowed.`, [eventEvidence(event, \"attributes.model\")], [...allowedModels].sort(), model ?? \"unknown\"),\n          );\n        }\n        if (allowedProviders && (!provider || !allowedProviders.has(provider))) {\n          findings.push(\n            failFinding(\"llm.usage\", `LLM provider ${provider ?? \"unknown\"} is not allowed.`, [eventEvidence(event, \"attributes.provider\")], [...allowedProviders].sort(), provider ?? \"unknown\"),\n          );\n        }\n        if (finishReasons && (!finishReason || !finishReasons.has(finishReason))) {\n          findings.push(\n            failFinding(\"llm.usage\", `LLM finish reason ${finishReason ?? \"unknown\"} is not allowed.`, [eventEvidence(event, \"attributes.finishReason\")], [...finishReasons].sort(), finishReason ?? \"unknown\"),\n          );\n        }\n      }\n\n      const tokenTotals = llms.reduce(\n        (totals, event) => ({\n          input: totals.input + (event.tokenUsage?.input ?? 0),\n          output: totals.output + (event.tokenUsage?.output ?? 0),\n          total: totals.total + (event.tokenUsage?.total ?? 0),\n          cached: totals.cached + (event.tokenUsage?.cached ?? 0),\n        }),\n        { input: 0, output: 0, total: 0, cached: 0 },\n      );\n      const tokenLimits = [\n        [\"input\", options.maxInputTokens],\n        [\"output\", options.maxOutputTokens],\n        [\"total\", options.maxTotalTokens],\n        [\"cached\", options.maxCachedTokens],\n      ] as const;\n      for (const [key, limit] of tokenLimits) {\n        if (limit !== undefined && tokenTotals[key] > limit) {\n          findings.push(\n            failFinding(\n              \"llm.usage\",\n              `LLM ${key} token count ${tokenTotals[key]} exceeded ${limit}.`,\n              llms.map((event) => eventEvidence(event, `tokenUsage.${key}`)),\n              { [`max${key[0]!.toUpperCase()}${key.slice(1)}Tokens`]: limit },\n              tokenTotals[key],\n            ),\n          );\n        }\n      }\n\n      return findings;\n    },\n  };\n}\n\n/**\n * Create the experimental built-in structure incomplete rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createStructureIncompleteRule(\n  options: StructureIncompleteRuleOptions = {},\n): TraceCheckRule {\n  return {\n    id: \"structure.incomplete\",\n    category: \"structure\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const findings: TraceCheckFinding[] = [];\n      if (!options.allowRunning) {\n        const running = semanticEvents(context).filter((event) => event.status === \"running\");\n        if (running.length > 0) {\n          findings.push(\n            failFinding(\n              \"structure.incomplete\",\n              \"Trace contains incomplete running events.\",\n              running.map((event) => eventEvidence(event, \"status\")),\n              \"no running events\",\n              running.length,\n            ),\n          );\n        }\n      }\n\n      if (options.requireEndedAtForStarted) {\n        const missingEndedAt = semanticEvents(context).filter(\n          (event) =>\n            event.startedAt !== undefined &&\n            event.endedAt === undefined &&\n            event.status !== \"running\",\n        );\n        if (missingEndedAt.length > 0) {\n          findings.push(\n            failFinding(\n              \"structure.incomplete\",\n              \"Trace contains events with startedAt but no endedAt.\",\n              missingEndedAt.map((event) => eventEvidence(event, \"endedAt\")),\n              \"endedAt for started events\",\n              missingEndedAt.length,\n            ),\n          );\n        }\n      }\n\n      return findings;\n    },\n  };\n}\n\n/**\n * Create the experimental built-in structure orphan rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createStructureOrphanRule(\n  options: StructureOrphanRuleOptions = {},\n): TraceCheckRule {\n  const allowMarkedUnresolved = options.allowMarkedUnresolved ?? true;\n  return {\n    id: \"structure.orphan\",\n    category: \"structure\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const byId = eventMap(semanticEvents(context));\n      const orphans = semanticEvents(context).filter((event) => {\n        if (!event.parentId || byId.has(event.parentId)) return false;\n        return !(allowMarkedUnresolved && parentMarkedUnresolved(event));\n      });\n      if (orphans.length === 0) return [];\n      return [\n        failFinding(\n          \"structure.orphan\",\n          \"Trace contains events whose parentId is not present in the selected run.\",\n          orphans.map((event) => eventEvidence(event, \"parentId\")),\n          \"parentId resolves to an event in the selected run\",\n          orphans.length,\n        ),\n      ];\n    },\n  };\n}\n\n/**\n * Create the experimental built-in structure cycle rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createStructureCycleRule(): TraceCheckRule {\n  return {\n    id: \"structure.cycle\",\n    category: \"structure\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const byId = eventMap(semanticEvents(context));\n      const seenCycles = new Set<string>();\n      const findings: TraceCheckFinding[] = [];\n\n      for (const event of [...semanticEvents(context)].sort((a, b) => a.eventId.localeCompare(b.eventId))) {\n        const path: PersistedInspectEvent[] = [];\n        const seenAt = new Map<string, number>();\n        let current: PersistedInspectEvent | undefined = event;\n\n        while (current) {\n          const existing = seenAt.get(current.eventId);\n          if (existing !== undefined) {\n            const cycle = path.slice(existing);\n            const key = cycle.map((item) => item.eventId).sort().join(\"\\0\");\n            if (!seenCycles.has(key)) {\n              seenCycles.add(key);\n              findings.push(\n                failFinding(\n                  \"structure.cycle\",\n                  formatProgrammaticDiagnostic(\"AI_TRACE_RELATIONSHIP_CYCLE\"),\n                  cycle.map((item) => eventEvidence(item, \"parentId\")),\n                  \"acyclic parentId graph\",\n                  cycle.map((item) => item.eventId).sort(),\n                ),\n              );\n            }\n            break;\n          }\n          seenAt.set(current.eventId, path.length);\n          path.push(current);\n          current = current.parentId ? byId.get(current.parentId) : undefined;\n        }\n      }\n\n      return findings;\n    },\n  };\n}\n\n/**\n * Create the experimental built-in structure relationship rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createStructureRelationshipRule(\n  options: StructureRelationshipRuleOptions = {},\n): TraceCheckRule {\n  if (\n    options.minConfidence !== undefined &&\n    !isAttributionConfidence(options.minConfidence)\n  ) {\n    throw new TypeError(\n      `createStructureRelationshipRule: minConfidence must be one of: ${ATTRIBUTION_CONFIDENCES.join(\", \")}.`,\n    );\n  }\n  const minConfidence = options.minConfidence;\n\n  return {\n    id: \"structure.relationship\",\n    category: \"structure\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const byId = eventMap(semanticEvents(context));\n      const findings: TraceCheckFinding[] = [];\n\n      for (const event of semanticEvents(context)) {\n        if (minConfidence) {\n          const eventRank =\n            CONFIDENCE_RANK[event.confidence] ?? CONFIDENCE_RANK.unknown;\n          const minRank = CONFIDENCE_RANK[minConfidence];\n          if (eventRank < minRank) {\n            findings.push(\n              failFinding(\n                \"structure.relationship\",\n                `Event confidence ${event.confidence} is below ${minConfidence}.`,\n                [eventEvidence(event, \"confidence\")],\n                { minConfidence },\n                event.confidence,\n              ),\n            );\n          }\n        }\n\n        if (!event.parentId) continue;\n        if (event.parentId === event.eventId) {\n          findings.push(\n            failFinding(\n              \"structure.relationship\",\n              \"Event parentId points to itself.\",\n              [eventEvidence(event, \"parentId\")],\n              \"parentId references a distinct event\",\n              \"self\",\n            ),\n          );\n          continue;\n        }\n\n        const parent = byId.get(event.parentId);\n        if (!parent) continue;\n\n        if (options.requireParentBeforeChild) {\n          const parentTime = eventStartMs(parent);\n          const childTime = eventStartMs(event);\n          if (\n            parentTime !== undefined &&\n            childTime !== undefined &&\n            parentTime > childTime\n          ) {\n            findings.push(\n              failFinding(\n                \"structure.relationship\",\n                \"Parent event starts after child event.\",\n                [eventEvidence(parent), eventEvidence(event, \"parentId\")],\n                \"parent start <= child start\",\n                { parentEventId: parent.eventId, childEventId: event.eventId },\n              ),\n            );\n          }\n        }\n\n        if (options.requireTraceParentSpan && parent.trace?.spanId && event.trace) {\n          const actual = event.trace.parentSpanId;\n          if (actual !== parent.trace.spanId) {\n            findings.push(\n              failFinding(\n                \"structure.relationship\",\n                \"Trace parentSpanId does not match parent spanId.\",\n                [eventEvidence(event, \"trace.parentSpanId\")],\n                { parentSpanId: parent.trace.spanId },\n                actual ?? \"missing\",\n              ),\n            );\n          }\n        }\n      }\n\n      return findings;\n    },\n  };\n}\n\n/**\n * Create the experimental built-in structure parallel-width rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createStructureParallelWidthRule(\n  options: StructureParallelWidthRuleOptions,\n): TraceCheckRule {\n  return {\n    id: \"structure.parallelWidth\",\n    category: \"structure\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const findings: TraceCheckFinding[] = [];\n      const byId = eventMap(semanticEvents(context));\n\n      if (options.maxChildren !== undefined) {\n        for (const [parentId, children] of context.childrenByParentId.entries()) {\n          if (children.length <= options.maxChildren) continue;\n          const parent = byId.get(parentId);\n          findings.push(\n            failFinding(\n              \"structure.parallelWidth\",\n              `Parent ${parentId} has ${children.length} children, exceeding ${options.maxChildren}.`,\n              [\n                ...(parent ? [eventEvidence(parent)] : [{ runId: context.selectedRun?.runId, eventId: parentId }]),\n                ...children.map((child) => ({\n                  runId: child.event.runId,\n                  eventId: child.event.eventId,\n                  parentId: child.event.parentId,\n                  kind: child.event.kind,\n                  name: child.event.name,\n                  status: child.event.status,\n                })),\n              ],\n              { maxChildren: options.maxChildren },\n              children.length,\n            ),\n          );\n        }\n      }\n\n      if (options.maxConcurrent !== undefined) {\n        const intervals = semanticEvents(context)\n          .map((event) => ({ event, start: eventStartMs(event), end: eventEndMs(event) }))\n          .filter(\n            (item): item is { event: PersistedInspectEvent; start: number; end: number } =>\n              item.start !== undefined && item.end !== undefined && item.end > item.start,\n          );\n        const points = intervals.flatMap((item) => [\n          { time: item.start, delta: 1, event: item.event },\n          { time: item.end, delta: -1, event: item.event },\n        ]);\n        points.sort((a, b) => {\n          const byTime = a.time - b.time;\n          if (byTime !== 0) return byTime;\n          const byDelta = a.delta - b.delta;\n          if (byDelta !== 0) return byDelta;\n          return a.event.eventId.localeCompare(b.event.eventId);\n        });\n\n        const active = new Map<string, PersistedInspectEvent>();\n        let maxActive: PersistedInspectEvent[] = [];\n        for (const point of points) {\n          if (point.delta > 0) {\n            active.set(point.event.eventId, point.event);\n            if (active.size > maxActive.length) {\n              maxActive = [...active.values()].sort((a, b) => a.eventId.localeCompare(b.eventId));\n            }\n          } else {\n            active.delete(point.event.eventId);\n          }\n        }\n\n        if (maxActive.length > options.maxConcurrent) {\n          findings.push(\n            failFinding(\n              \"structure.parallelWidth\",\n              `Concurrent event width ${maxActive.length} exceeded ${options.maxConcurrent}.`,\n              maxActive.map((event) => eventEvidence(event)),\n              { maxConcurrent: options.maxConcurrent },\n              maxActive.length,\n            ),\n          );\n        }\n      }\n\n      return findings;\n    },\n  };\n}\n\nfunction createSignalRule(\n  ruleId: \"structure.retrieval\" | \"structure.guardrail\" | \"structure.decision\",\n  label: string,\n  options: TraceSignalRuleOptions,\n  selectEvents: (context: TraceCheckContext) => PersistedInspectEvent[],\n  nameForEvent: (event: PersistedInspectEvent) => string,\n): TraceCheckRule {\n  return {\n    id: ruleId,\n    category: \"structure\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const events = selectEvents(context);\n      const names = events.map(nameForEvent);\n      const nameSet = new Set(names);\n      const findings: TraceCheckFinding[] = [];\n\n      for (const required of sortedStrings(options.required)) {\n        if (!nameSet.has(required)) {\n          findings.push(\n            failFinding(\n              ruleId,\n              `Required ${label} ${required} did not appear.`,\n              runEvidence(context.selectedRun),\n              required,\n              names,\n            ),\n          );\n        }\n      }\n\n      const forbidden = new Set(options.forbidden ?? []);\n      // Empty allowlist means \"no restriction\", not \"reject everything\".\n      const allowed = options.allowed?.length ? new Set(options.allowed) : undefined;\n      for (const event of events) {\n        const name = nameForEvent(event);\n        if (forbidden.has(name)) {\n          findings.push(\n            failFinding(\n              ruleId,\n              `Forbidden ${label} ${name} appeared.`,\n              [eventEvidence(event)],\n              `${label} absent`,\n              name,\n            ),\n          );\n        }\n        if (allowed && !allowed.has(name)) {\n          findings.push(\n            failFinding(\n              ruleId,\n              `${label[0]!.toUpperCase()}${label.slice(1)} ${name} is not in the allowed set.`,\n              [eventEvidence(event)],\n              [...allowed].sort(),\n              name,\n            ),\n          );\n        }\n      }\n\n      if (options.minCount !== undefined && events.length < options.minCount) {\n        findings.push(\n          failFinding(\n            ruleId,\n            `${label[0]!.toUpperCase()}${label.slice(1)} count ${events.length} was below minimum ${options.minCount}.`,\n            runEvidence(context.selectedRun),\n            { minCount: options.minCount },\n            events.length,\n          ),\n        );\n      }\n      if (options.maxCount !== undefined && events.length > options.maxCount) {\n        findings.push(\n          failFinding(\n            ruleId,\n            `${label[0]!.toUpperCase()}${label.slice(1)} count ${events.length} exceeded maximum ${options.maxCount}.`,\n            events.map((event) => eventEvidence(event)),\n            { maxCount: options.maxCount },\n            events.length,\n          ),\n        );\n      }\n\n      return findings;\n    },\n  };\n}\n\n/**\n * Create the experimental built-in retrieval signal rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createRetrievalRule(options: RetrievalRuleOptions): TraceCheckRule {\n  return createSignalRule(\n    \"structure.retrieval\",\n    \"retrieval\",\n    options,\n    (context) => finishedEvents(context, \"RETRIEVER\"),\n    (event) => signalName(event, [\"retrievalName\", \"retrieverName\", \"retriever\"], [\"retriever:\", \"retrieval:\"]),\n  );\n}\n\n/**\n * Create the experimental built-in guardrail signal rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createGuardrailRule(options: GuardrailRuleOptions): TraceCheckRule {\n  return createSignalRule(\n    \"structure.guardrail\",\n    \"guardrail\",\n    options,\n    guardrailEvents,\n    (event) => signalName(event, [\"guardrailName\", \"guardrail\", \"guardrailId\"], [\"guardrail:\"]),\n  );\n}\n\n/**\n * Create the experimental built-in decision signal rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createDecisionRule(options: DecisionRuleOptions): TraceCheckRule {\n  return createSignalRule(\n    \"structure.decision\",\n    \"decision\",\n    options,\n    (context) => finishedEvents(context, \"DECISION\"),\n    (event) => signalName(event, [\"decisionName\", \"decision\", \"decisionId\"], [\"decision:\"]),\n  );\n}\n\n/**\n * Create the experimental built-in safety redaction rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createSafetyRedactionRule(\n  options: SafetyRedactionRuleOptions = {},\n): TraceCheckRule {\n  const sensitiveKeys = options.sensitiveKeys ?? DEFAULT_SENSITIVE_KEYS;\n  const markers = options.redactedMarkers ?? [\"[REDACTED]\", \"[REDACTED:\"];\n  return {\n    id: \"safety.redaction\",\n    category: \"safety\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const findings: TraceCheckFinding[] = [];\n      for (const event of context.events) {\n        for (const entry of eventValueEntries(event, { includeSummaries: true, includeError: true })) {\n          if (!isSensitiveKey(entry.key ?? lastPathSegment(entry.path), sensitiveKeys)) continue;\n          // Require a complete placeholder — substring markers beside residual\n          // secret text (e.g. `[REDACTED]canary` or `[REDACTED]/canary`) fail.\n          if (isFullyRedactedValue(entry.value, markers)) continue;\n          findings.push(\n            failFinding(\n              \"safety.redaction\",\n              `Sensitive-looking field at ${entry.path} is not redacted.`,\n              [eventEvidence(event, entry.path)],\n              \"redaction marker\",\n              { path: entry.path, valueType: valueType(entry.value) },\n              {\n                category: \"credential\",\n                confidence: \"high\",\n                detector: \"safety.redaction\",\n                action: \"redact\",\n              },\n            ),\n          );\n        }\n      }\n      return limitFindings(findings, options.maxFindings);\n    },\n  };\n}\n\n/**\n * Create the experimental built-in raw content path safety rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createSafetyRawContentRule(\n  options: SafetyRawContentRuleOptions = {},\n): TraceCheckRule {\n  const forbiddenKeys = options.forbiddenKeys ?? DEFAULT_RAW_CONTENT_KEYS;\n  const safePathPrefixes = options.safePathPrefixes ?? DEFAULT_SAFE_RAW_CONTENT_PATH_PREFIXES;\n  const markers = options.redactedMarkers ?? [\"[REDACTED]\", \"[REDACTED:\"];\n  return {\n    id: \"safety.rawPrompt\",\n    category: \"safety\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const findings: TraceCheckFinding[] = [];\n      for (const event of context.events) {\n        for (const entry of eventValueEntries(event, { includeSummaries: options.includeSummaries })) {\n          const key = entry.key ?? lastPathSegment(entry.path);\n          if (!isRawContentPath(entry.path, key, forbiddenKeys, safePathPrefixes)) continue;\n          // Fully scrubbed values are share-safe placeholders; key presence alone\n          // must not fail after redact --profile share.\n          if (isFullyRedactedValue(entry.value, markers)) continue;\n          findings.push(\n            failFinding(\n              \"safety.rawPrompt\",\n              `Raw content-like field ${entry.path} is present.`,\n              [eventEvidence(event, entry.path)],\n              \"metadata-only trace fields\",\n              { path: entry.path, valueType: valueType(entry.value) },\n              {\n                category: \"raw-content\",\n                confidence: \"high\",\n                detector: \"safety.rawPrompt\",\n                action: \"redact-or-omit\",\n              },\n            ),\n          );\n        }\n      }\n      return limitFindings(findings, options.maxFindings);\n    },\n  };\n}\n\n/**\n * Create the experimental built-in secret pattern safety rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createSafetySecretPatternRule(\n  options: SafetySecretPatternRuleOptions = {},\n): TraceCheckRule {\n  const patterns = options.patterns ?? DEFAULT_SECRET_PATTERNS;\n  const maxStringLength = options.maxStringLength ?? 4_096;\n  return {\n    id: \"safety.secretPattern\",\n    category: \"safety\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const findings: TraceCheckFinding[] = [];\n      for (const event of context.events) {\n        for (const entry of eventValueEntries(event, { includeSummaries: true, includeError: true })) {\n          if (typeof entry.value !== \"string\") continue;\n          const sample = entry.value.slice(0, maxStringLength);\n          for (const pattern of patterns) {\n            pattern.pattern.lastIndex = 0;\n            if (!pattern.pattern.test(sample)) continue;\n            pattern.pattern.lastIndex = 0;\n            findings.push(\n              failFinding(\n                \"safety.secretPattern\",\n                `Secret-like pattern ${pattern.id} matched at ${entry.path}.`,\n                [eventEvidence(event, entry.path)],\n                \"no secret-like strings\",\n                { pattern: pattern.id, path: entry.path },\n                {\n                  category: \"credential\",\n                  confidence: \"high\",\n                  detector: pattern.id,\n                  action: \"redact\",\n                },\n              ),\n            );\n            break;\n          }\n        }\n      }\n      return limitFindings(findings, options.maxFindings);\n    },\n  };\n}\n\n/**\n * Create the experimental built-in oversized attribute safety rule.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createSafetyOversizedAttributeRule(\n  options: SafetyOversizedAttributeRuleOptions,\n): TraceCheckRule {\n  return {\n    id: \"safety.oversizedAttribute\",\n    category: \"safety\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const findings: TraceCheckFinding[] = [];\n      for (const event of context.events) {\n        for (const entry of eventValueEntries(event, { includeSummaries: true, includeError: true })) {\n          if (\n            typeof entry.value === \"string\" &&\n            options.maxStringLength !== undefined &&\n            entry.value.length > options.maxStringLength\n          ) {\n            findings.push(\n              failFinding(\n                \"safety.oversizedAttribute\",\n                `String at ${entry.path} exceeds ${options.maxStringLength} characters.`,\n                [eventEvidence(event, entry.path)],\n                { maxStringLength: options.maxStringLength },\n                { path: entry.path, length: entry.value.length },\n                {\n                  category: \"size\",\n                  confidence: \"high\",\n                  detector: \"safety.oversizedAttribute\",\n                  action: \"truncate-or-omit\",\n                },\n              ),\n            );\n          }\n\n          if (\n            Array.isArray(entry.value) &&\n            options.maxArrayLength !== undefined &&\n            entry.value.length > options.maxArrayLength\n          ) {\n            findings.push(\n              failFinding(\n                \"safety.oversizedAttribute\",\n                `Array at ${entry.path} exceeds ${options.maxArrayLength} items.`,\n                [eventEvidence(event, entry.path)],\n                { maxArrayLength: options.maxArrayLength },\n                { path: entry.path, length: entry.value.length },\n                {\n                  category: \"size\",\n                  confidence: \"high\",\n                  detector: \"safety.oversizedAttribute\",\n                  action: \"truncate-or-omit\",\n                },\n              ),\n            );\n          }\n\n          if (\n            isRecord(entry.value) &&\n            options.maxObjectKeys !== undefined &&\n            Object.keys(entry.value).length > options.maxObjectKeys\n          ) {\n            findings.push(\n              failFinding(\n                \"safety.oversizedAttribute\",\n                `Object at ${entry.path} exceeds ${options.maxObjectKeys} keys.`,\n                [eventEvidence(event, entry.path)],\n                { maxObjectKeys: options.maxObjectKeys },\n                { path: entry.path, keys: Object.keys(entry.value).length },\n                {\n                  category: \"size\",\n                  confidence: \"high\",\n                  detector: \"safety.oversizedAttribute\",\n                  action: \"truncate-or-omit\",\n                },\n              ),\n            );\n          }\n\n          if (options.maxSerializedBytes !== undefined) {\n            const bytes = serializedByteLength(entry.value);\n            if (bytes !== undefined && bytes > options.maxSerializedBytes) {\n              findings.push(\n                failFinding(\n                  \"safety.oversizedAttribute\",\n                  `Value at ${entry.path} exceeds ${options.maxSerializedBytes} serialized bytes.`,\n                  [eventEvidence(event, entry.path)],\n                  { maxSerializedBytes: options.maxSerializedBytes },\n                  { path: entry.path, bytes },\n                  {\n                    category: \"size\",\n                    confidence: \"high\",\n                    detector: \"safety.oversizedAttribute\",\n                    action: \"truncate-or-omit\",\n                  },\n                ),\n              );\n            }\n          }\n        }\n      }\n      return limitFindings(findings, options.maxFindings);\n    },\n  };\n}\n\n/**\n * Create the experimental built-in baseline regression rule.\n *\n * The rule compares safe structural summaries from a normalized baseline\n * against the candidate context. It intentionally ignores raw prompt/output,\n * request/response body, header, and tool payload text.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createBaselineRegressionRule(\n  options: BaselineRegressionRuleOptions,\n): TraceCheckRule {\n  return {\n    id: \"baseline.regression\",\n    category: \"baseline\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const baselineSelection = resolveSelectedRun(options.baseline, options.baselineRunId);\n      if (baselineSelection.diagnostics.length > 0 || !baselineSelection.run) {\n        return [\n          failFinding(\n            \"baseline.regression\",\n            \"Baseline run could not be selected.\",\n            runEvidence(context.selectedRun),\n            \"selectable baseline run\",\n            baselineSelection.diagnostics.map((item) => item.code),\n          ),\n        ];\n      }\n\n      const baselineFacts = buildFacts(options.baseline, baselineSelection.run);\n      const baselineContext: TraceCheckContext = {\n        ...baselineFacts,\n        selectedRun: baselineSelection.run,\n        sourceLabel: options.baseline.sourceLabel,\n      };\n      const findings: TraceCheckFinding[] = [];\n      const durationToleranceMs = options.durationToleranceMs ?? 0;\n\n      if (options.compareFormat && baselineContext.format !== context.format) {\n        findings.push(\n          baselineDiffFinding(\n            \"Trace format differs from baseline.\",\n            runEvidence(context.selectedRun),\n            baselineContext.format,\n            context.format,\n          ),\n        );\n      }\n\n      const baselineRunStatus = baselineContext.selectedRun?.status ?? \"unknown\";\n      const candidateRunStatus = context.selectedRun?.status ?? \"unknown\";\n      if (baselineRunStatus !== candidateRunStatus) {\n        findings.push(\n          baselineDiffFinding(\n            \"Run status differs from baseline.\",\n            runEvidence(context.selectedRun),\n            baselineRunStatus,\n            candidateRunStatus,\n          ),\n        );\n      }\n\n      const baselineDuration = baselineContext.selectedRun?.durationMs;\n      const candidateDuration = context.selectedRun?.durationMs;\n      if (\n        baselineDuration !== undefined &&\n        candidateDuration !== undefined &&\n        Math.abs(candidateDuration - baselineDuration) > durationToleranceMs\n      ) {\n        findings.push(\n          baselineDiffFinding(\n            \"Run duration differs from baseline beyond tolerance.\",\n            runEvidence(context.selectedRun),\n            { durationMs: baselineDuration, toleranceMs: durationToleranceMs },\n            candidateDuration,\n          ),\n        );\n      }\n\n      const comparisons = [\n        {\n          label: \"Tree shape\",\n          path: \"tree\",\n          expected: treeShape(baselineContext.rootNodes),\n          actual: treeShape(context.rootNodes),\n          evidence: runEvidence(context.selectedRun),\n        },\n        {\n          label: \"Event statuses\",\n          path: \"status\",\n          expected: statusShape(baselineContext),\n          actual: statusShape(context),\n          evidence: runEvidence(context.selectedRun),\n        },\n        {\n          label: \"Tool usage\",\n          path: \"tool\",\n          expected: toolShape(baselineContext),\n          actual: toolShape(context),\n          evidence: firstEvidenceForKind(context, \"TOOL\", \"tool\"),\n        },\n        {\n          label: \"LLM usage\",\n          path: \"llm\",\n          expected: llmShape(baselineContext),\n          actual: llmShape(context),\n          evidence: firstEvidenceForKind(context, \"LLM\", \"llm\"),\n        },\n        {\n          label: \"Error profile\",\n          path: \"error\",\n          expected: errorShape(baselineContext),\n          actual: errorShape(context),\n          evidence: firstEvidenceForKind(context, \"ERROR\", \"error\"),\n        },\n        {\n          label: \"Retrieval signals\",\n          path: \"retrieval\",\n          expected: retrievalShape(baselineContext),\n          actual: retrievalShape(context),\n          evidence: firstEvidenceForKind(context, \"RETRIEVER\", \"retrieval\"),\n        },\n        {\n          label: \"Guardrail signals\",\n          path: \"guardrail\",\n          expected: guardrailShape(baselineContext),\n          actual: guardrailShape(context),\n          evidence: guardrailEvents(context)[0]\n            ? [eventEvidence(guardrailEvents(context)[0]!, \"guardrail\")]\n            : runEvidence(context.selectedRun),\n        },\n      ];\n\n      for (const comparison of comparisons) {\n        if (JSON.stringify(comparison.expected) === JSON.stringify(comparison.actual)) {\n          continue;\n        }\n        findings.push(\n          baselineDiffFinding(\n            `${comparison.label} differs from baseline.`,\n            comparison.evidence.length > 0\n              ? comparison.evidence\n              : [{ runId: context.selectedRun?.runId, path: comparison.path }],\n            comparison.expected,\n            comparison.actual,\n          ),\n        );\n      }\n\n      return findings;\n    },\n  };\n}\n\n/**\n * Experimental rule for observed real-world outcomes (v4.4+).\n */\nexport interface ObservedOutcomeRuleOptions {\n  failOn?: readonly ObservedOutcomeStatus[];\n  /**\n   * When true, fail if the trace contains zero observed outcomes.\n   * Default false preserves low-level programmatic compatibility.\n   * CLI `--fail-on-observation` sets this to true.\n   */\n  requireAny?: boolean;\n}\n\nexport function createObservedOutcomeRule(\n  options: ObservedOutcomeRuleOptions = {},\n): TraceCheckRule {\n  const failOn = options.failOn ?? ([\"failed\"] as const);\n  const requireAny = options.requireAny === true;\n  return {\n    id: \"outcome.status\",\n    category: \"run\",\n    defaultSeverity: \"error\",\n    evaluate(context) {\n      const outcomes = extractOutcomesFromPersistedEvents(context.events);\n      if (requireAny && outcomes.length === 0) {\n        return [\n          failFinding(\n            \"outcome.status\",\n            \"Expected at least one observed outcome.\",\n            runEvidence(context.selectedRun),\n            { requireAny: true, expected: \"at least one observed outcome\" },\n            { code: \"outcome.missing\", actual: 0 },\n          ),\n        ];\n      }\n      const matching = outcomesMatchingStatus(outcomes, failOn);\n      if (matching.length === 0) return [];\n      return [\n        failFinding(\n          \"outcome.status\",\n          `Observed outcome count ${matching.length} matched [${failOn.join(\", \")}].`,\n          matching.map((outcome) => ({\n            runId: outcome.runId,\n            eventId: outcome.outcomeId,\n            ...(outcome.parentId !== undefined ? { parentId: outcome.parentId } : {}),\n            kind: \"OUTCOME\",\n            name: outcome.name,\n            status: outcome.status,\n            path: `outcome.${outcome.name}`,\n          })),\n          { failOn },\n          matching.map((outcome) => ({\n            name: outcome.name,\n            status: outcome.status,\n            expectation: outcome.expectation,\n          })),\n        ),\n      ];\n    },\n  };\n}\n\n/**\n * Run experimental deterministic trace checks against normalized reader output.\n *\n * The engine is local-only and pure: it does not discover config files, read\n * trace files, call providers, perform network I/O, or mutate input objects.\n *\n * @experimental  Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function runTraceChecks(\n  input: TraceCheckInput,\n  options: RunTraceChecksOptions = {},\n): TraceCheckResult {\n  const selected = resolveSelectedRun(input, options.runId);\n  if (selected.diagnostics.length > 0) {\n    return errorResult(input, selected.diagnostics, selected.run);\n  }\n\n  const rules = selectRules(options.rules ?? [], options.select);\n  if (rules.diagnostics.length > 0) {\n    return errorResult(input, rules.diagnostics, selected.run);\n  }\n\n  if (rules.rules.length === 0) {\n    return errorResult(\n      input,\n      [\n        diagnostic(\n          \"AI_CHECK_NO_RULES_EVALUATED\",\n          \"No trace check rules were evaluated. Configure at least one rule, contract, or CLI check option.\",\n        ),\n      ],\n      selected.run,\n    );\n  }\n\n  const facts = buildFacts(input, selected.run);\n  const context: TraceCheckContext = {\n    ...facts,\n    ...(selected.run ? { selectedRun: selected.run } : {}),\n    ...(input.sourceLabel ? { sourceLabel: input.sourceLabel } : {}),\n  };\n  const diagnostics: TraceCheckDiagnostic[] = [];\n  const findings: TraceCheckFinding[] = [];\n  const ruleExecutions: TraceCheckRuleExecution[] = [];\n\n  for (const rule of rules.rules) {\n    try {\n      const ruleFindings = rule.evaluate(context).map((finding) => normalizeFinding(rule, finding));\n      findings.push(...ruleFindings);\n      ruleExecutions.push({\n        ruleId: rule.id,\n        category: rule.category,\n        status: classifyRuleExecution(ruleFindings, false),\n        findingCount: ruleFindings.length,\n        ...(selected.run ? { runId: selected.run.runId } : {}),\n      });\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      diagnostics.push(\n        diagnostic(\"AI_CHECK_INTERNAL_ERROR\", `Rule ${rule.id} failed: ${message}`, rule.id),\n      );\n      ruleExecutions.push({\n        ruleId: rule.id,\n        category: rule.category,\n        status: \"error\",\n        findingCount: 0,\n        ...(selected.run ? { runId: selected.run.runId } : {}),\n      });\n    }\n  }\n\n  if (diagnostics.length > 0) {\n    return errorResult(input, diagnostics, selected.run, ruleExecutions);\n  }\n\n  const eventById = new Map(input.read.events.map((event) => [event.eventId, event] as const));\n  const sortedFindings = findings.sort(compareFindings(eventById));\n  const summary = summarize(sortedFindings, diagnostics, ruleExecutions.length);\n  const status: TraceCheckStatus = summary.failed > 0 ? \"fail\" : \"pass\";\n\n  return {\n    ok: status === \"pass\",\n    status,\n    format: input.read.format,\n    ...(selected.run ? { runId: selected.run.runId } : {}),\n    summary,\n    findings: sortedFindings,\n    diagnostics,\n    ruleExecutions,\n  };\n}\n\nexport {\n  defineTraceContract,\n  evaluateTraceContract,\n  evaluateTraceContractRead,\n  explainTraceContract,\n  lintTraceContract,\n  resolveTraceContractScope,\n  workflowMetadataForRun,\n  evaluateToolArgumentValue,\n  extractToolArgumentPayload,\n  resolveJsonPointer,\n  type TraceContract,\n  type TraceContractAlternativeBranch,\n  type TraceContractAlternatives,\n  type TraceContractBody,\n  type TraceContractControlRules,\n  type TraceContractInput,\n  type TraceContractLintDiagnostic,\n  type TraceContractLlmRules,\n  type TraceContractObservationProvenance,\n  type TraceContractObservationRules,\n  type TraceContractRetryRules,\n  type TraceContractRecoveryOperation,\n  type TraceContractRecoveryRetryableErrors,\n  type TraceContractRecoverySuccessfulResultDependency,\n  type RecoverySameArgumentsMode,\n  type RecoverySideEffectClass,\n  type TraceContractRunRules,\n  type TraceContractScope,\n  type TraceContractStepKind,\n  type TraceContractStepOrderRelation,\n  type TraceContractStepRef,\n  type TraceContractStepRules,\n  type TraceContractToolRules,\n  type ControlStage,\n  type ToolArgumentCheck,\n  type ToolArgumentOccurrence,\n  type ToolArgumentOperator,\n} from \"./contract.js\";\n","import type { TraceCheckDiagnostic, TraceCheckInput } from \"./index.js\";\nimport { extractSessionWorkflowMetadata } from \"../sessions/metadata.js\";\nimport type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport type { SessionWorkflowMetadata } from \"../sessions/types.js\";\n\n/**\n * Explicit actor/run projection for TraceContract evaluation (#320).\n *\n * Selectors use only declared metadata (or explicit event ids). Zero matches\n * and singular-actor ambiguity fail closed. No timestamp or display-name\n * inference.\n *\n * @experimental\n */\nexport interface TraceContractScope {\n  runId?: string;\n  subAgentId?: string;\n  groupId?: string;\n  workflowStep?: string;\n  /** Explicit root event id; evaluation projects to that event and descendants. */\n  rootEventId?: string;\n}\n\nexport interface ResolvedContractScope {\n  runId: string;\n  rootEventId?: string;\n  matchedSelectors: Record<string, string>;\n  evidenceEventCount: number;\n  input: TraceCheckInput;\n}\n\nfunction diagnostic(\n  code: TraceCheckDiagnostic[\"code\"],\n  message: string,\n  ruleId?: string,\n): TraceCheckDiagnostic {\n  return {\n    code,\n    message,\n    severity: \"error\",\n    ...(ruleId !== undefined ? { ruleId } : {}),\n  };\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n  return typeof value === \"string\" && value.trim() !== \"\";\n}\n\nfunction scopeEntries(scope: TraceContractScope): Array<[string, string]> {\n  const out: Array<[string, string]> = [];\n  if (isNonEmptyString(scope.runId)) out.push([\"runId\", scope.runId.trim()]);\n  if (isNonEmptyString(scope.subAgentId)) out.push([\"subAgentId\", scope.subAgentId.trim()]);\n  if (isNonEmptyString(scope.groupId)) out.push([\"groupId\", scope.groupId.trim()]);\n  if (isNonEmptyString(scope.workflowStep)) {\n    out.push([\"workflowStep\", scope.workflowStep.trim()]);\n  }\n  if (isNonEmptyString(scope.rootEventId)) {\n    out.push([\"rootEventId\", scope.rootEventId.trim()]);\n  }\n  return out;\n}\n\nfunction mergeWorkflowMeta(\n  into: SessionWorkflowMetadata,\n  from: SessionWorkflowMetadata | undefined,\n): void {\n  if (!from) return;\n  for (const [key, value] of Object.entries(from) as Array<\n    [keyof SessionWorkflowMetadata, SessionWorkflowMetadata[keyof SessionWorkflowMetadata]]\n  >) {\n    if (value === undefined) continue;\n    if (into[key] === undefined) {\n      (into as Record<string, unknown>)[key] = value;\n    }\n  }\n}\n\n/**\n * Collect explicit session/workflow metadata for a run from persisted events.\n * Prefers RUN-kind attributes; never invents identity from timestamps.\n */\nexport function workflowMetadataForRun(\n  events: readonly PersistedInspectEvent[],\n  runId: string,\n): SessionWorkflowMetadata {\n  const preferred: SessionWorkflowMetadata = {};\n  const fallback: SessionWorkflowMetadata = {};\n  for (const event of events) {\n    if (event.runId !== runId) continue;\n    const attrs = event.attributes;\n    if (!attrs || typeof attrs !== \"object\") continue;\n    const direct = extractSessionWorkflowMetadata(attrs);\n    const nested =\n      attrs.metadata && typeof attrs.metadata === \"object\"\n        ? extractSessionWorkflowMetadata(attrs.metadata as Record<string, unknown>)\n        : undefined;\n    const bag: SessionWorkflowMetadata = {};\n    mergeWorkflowMeta(bag, direct);\n    mergeWorkflowMeta(bag, nested);\n    if (event.kind === \"RUN\") {\n      mergeWorkflowMeta(preferred, bag);\n    } else {\n      mergeWorkflowMeta(fallback, bag);\n    }\n  }\n  mergeWorkflowMeta(preferred, fallback);\n  return preferred;\n}\n\nfunction flattenNodes(nodes: readonly InspectNode[]): InspectNode[] {\n  return nodes.flatMap((node) => [node, ...flattenNodes(node.children)]);\n}\n\nfunction collectSubtreeEventIds(\n  run: InspectRunTree,\n  rootEventId: string,\n): Set<string> | undefined {\n  const nodes = flattenNodes(run.children);\n  const byId = new Map(nodes.map((node) => [node.event.eventId, node]));\n  const root = byId.get(rootEventId);\n  if (!root) return undefined;\n  const ids = new Set<string>();\n  const visit = (node: InspectNode): void => {\n    ids.add(node.event.eventId);\n    for (const child of node.children) visit(child);\n  };\n  visit(root);\n  return ids;\n}\n\nfunction filterTree(nodes: readonly InspectNode[], keep: Set<string>): InspectNode[] {\n  const out: InspectNode[] = [];\n  for (const node of nodes) {\n    if (!keep.has(node.event.eventId)) continue;\n    out.push({\n      ...node,\n      children: filterTree(node.children, keep),\n    });\n  }\n  return out;\n}\n\nfunction projectInput(\n  input: TraceCheckInput,\n  run: InspectRunTree,\n  eventIds: Set<string> | undefined,\n): { input: TraceCheckInput; evidenceEventCount: number } {\n  const runEvents = input.read.events.filter((event) => event.runId === run.runId);\n  const projectedEvents =\n    eventIds === undefined\n      ? runEvents\n      : runEvents.filter((event) => eventIds.has(event.eventId) || event.kind === \"RUN\");\n  const projectedChildren =\n    eventIds === undefined ? run.children : filterTree(run.children, eventIds);\n  const projectedRun: InspectRunTree = {\n    ...run,\n    children: projectedChildren,\n    metadata: {\n      ...run.metadata,\n      totalEvents: flattenNodes(projectedChildren).length,\n    },\n  };\n  return {\n    evidenceEventCount: projectedEvents.length,\n    input: {\n      ...input,\n      selectedRun: projectedRun,\n      read: {\n        ...input.read,\n        runs: [projectedRun],\n        events: projectedEvents,\n      },\n    },\n  };\n}\n\n/**\n * Resolve TraceContract `scope` against a check input.\n * Returns diagnostics on zero/ambiguous matches or missing root events.\n */\nexport function resolveTraceContractScope(\n  input: TraceCheckInput,\n  scope: TraceContractScope | undefined,\n): { resolved?: ResolvedContractScope; diagnostics: TraceCheckDiagnostic[] } {\n  if (scope === undefined) {\n    return { diagnostics: [] };\n  }\n  const entries = scopeEntries(scope);\n  if (entries.length === 0) {\n    return {\n      diagnostics: [\n        diagnostic(\n          \"AI_CHECK_INVALID_CONFIG\",\n          \"TraceContract scope requires at least one explicit selector (runId, subAgentId, groupId, workflowStep, or rootEventId).\",\n          \"contract.scope.empty\",\n        ),\n      ],\n    };\n  }\n\n  const matchedSelectors = Object.fromEntries(entries);\n  const actorKeys = entries.filter(([key]) => key !== \"rootEventId\");\n  const rootEventId = matchedSelectors.rootEventId;\n\n  let candidates = [...input.read.runs];\n\n  if (matchedSelectors.runId) {\n    candidates = candidates.filter((run) => run.runId === matchedSelectors.runId);\n  }\n\n  for (const [key, value] of actorKeys) {\n    if (key === \"runId\") continue;\n    candidates = candidates.filter((run) => {\n      const meta = workflowMetadataForRun(input.read.events, run.runId);\n      const actual = meta[key as \"subAgentId\" | \"groupId\" | \"workflowStep\"];\n      return actual === value;\n    });\n  }\n\n  // rootEventId alone selects among runs that contain that event.\n  if (rootEventId && actorKeys.length === 0) {\n    candidates = candidates.filter((run) =>\n      flattenNodes(run.children).some((node) => node.event.eventId === rootEventId),\n    );\n  }\n\n  if (candidates.length === 0) {\n    return {\n      diagnostics: [\n        diagnostic(\n          \"AI_CHECK_RUN_SELECTION_REQUIRED\",\n          `TraceContract scope matched zero actors for ${JSON.stringify(matchedSelectors)}. Missing actor metadata does not fall back to the whole session.`,\n          \"contract.scope.zero-match\",\n        ),\n      ],\n    };\n  }\n\n  if (candidates.length > 1) {\n    return {\n      diagnostics: [\n        diagnostic(\n          \"AI_CHECK_RUN_SELECTION_REQUIRED\",\n          `TraceContract scope matched ${candidates.length} actors for ${JSON.stringify(matchedSelectors)} (runIds: ${candidates\n            .map((run) => run.runId)\n            .sort()\n            .join(\", \")}). Singular actor selectors must resolve to exactly one run.`,\n          \"contract.scope.ambiguous\",\n        ),\n      ],\n    };\n  }\n\n  const run = candidates[0]!;\n  let eventIds: Set<string> | undefined;\n  if (rootEventId) {\n    eventIds = collectSubtreeEventIds(run, rootEventId);\n    if (eventIds === undefined) {\n      return {\n        diagnostics: [\n          diagnostic(\n            \"AI_CHECK_INVALID_ARGUMENTS\",\n            `TraceContract scope rootEventId ${rootEventId} was not found in run ${run.runId}.`,\n            \"contract.scope.root-missing\",\n          ),\n        ],\n      };\n    }\n  }\n\n  const projected = projectInput(input, run, eventIds);\n  return {\n    resolved: {\n      runId: run.runId,\n      ...(rootEventId !== undefined ? { rootEventId } : {}),\n      matchedSelectors,\n      evidenceEventCount: projected.evidenceEventCount,\n      input: projected.input,\n    },\n    diagnostics: [],\n  };\n}\n","/**\n * Declared-versus-enforced control checks for TraceContract (6.23).\n *\n * A stored declaration is not proof of enforcement.\n *\n * @experimental\n */\n\nimport type { TraceCheckEvidence, TraceCheckFinding } from \"./index.js\";\nimport { resolveCanonicalToolName } from \"./logical-events.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\n\nexport type ControlStage =\n  | \"declared\"\n  | \"presented\"\n  | \"validated\"\n  | \"enforced\"\n  | \"observed\"\n  | \"accepted\";\n\nexport interface TraceContractControlRules {\n  /**\n   * Tools declared/presented to the agent (inline). Distinct from `enforcedTools`.\n   */\n  declaredTools?: string[];\n  /**\n   * Tools the harness claims to enforce (inline allowlist).\n   */\n  enforcedTools?: string[];\n  /**\n   * RUN/event attribute holding a string[] of declared tool names.\n   * Used when `declaredTools` is omitted.\n   */\n  declaredToolsAttribute?: string;\n  /**\n   * RUN/event attribute holding a string[] of enforced tool names.\n   */\n  enforcedToolsAttribute?: string;\n  /**\n   * Fail when both declared and enforced sets resolve and differ.\n   */\n  requireDeclaredMatchesEnforced?: boolean;\n  /**\n   * Fail when any observed finished tool is outside the enforced set.\n   */\n  requireObservedWithinEnforced?: boolean;\n  /**\n   * Fail when any observed finished tool is outside the declared set.\n   */\n  requireObservedWithinDeclared?: boolean;\n  /**\n   * Require observation names for control stages (default `control.<stage>`).\n   */\n  requiredStages?: Array<{\n    stage: ControlStage;\n    /** Observation name; defaults to `control.<stage>`. */\n    observation?: string;\n  }>;\n}\n\nfunction asStringList(value: unknown): string[] | undefined {\n  if (!Array.isArray(value)) return undefined;\n  const out: string[] = [];\n  for (const item of value) {\n    if (typeof item !== \"string\" || item.trim() === \"\") return undefined;\n    out.push(item.trim());\n  }\n  return out;\n}\n\nfunction attributeList(\n  events: readonly PersistedInspectEvent[],\n  attribute: string | undefined,\n): string[] | undefined {\n  if (!attribute) return undefined;\n  for (const event of events) {\n    const attrs = event.attributes;\n    if (!attrs || typeof attrs !== \"object\") continue;\n    const direct = asStringList(attrs[attribute]);\n    if (direct) return direct;\n    const nested =\n      attrs.metadata && typeof attrs.metadata === \"object\"\n        ? asStringList((attrs.metadata as Record<string, unknown>)[attribute])\n        : undefined;\n    if (nested) return nested;\n  }\n  return undefined;\n}\n\nfunction fail(\n  ruleId: string,\n  message: string,\n  evidence: readonly TraceCheckEvidence[],\n  expected?: unknown,\n  actual?: unknown,\n): TraceCheckFinding {\n  return {\n    ruleId,\n    severity: \"error\",\n    status: \"fail\",\n    message,\n    ...(expected !== undefined ? { expected } : {}),\n    ...(actual !== undefined ? { actual } : {}),\n    evidence: [...evidence],\n  };\n}\n\nfunction sortedUnique(values: readonly string[]): string[] {\n  return [...new Set(values)].sort((a, b) => a.localeCompare(b));\n}\n\nfunction setEqual(left: readonly string[], right: readonly string[]): boolean {\n  const a = sortedUnique(left);\n  const b = sortedUnique(right);\n  return a.length === b.length && a.every((value, index) => value === b[index]);\n}\n\n/**\n * Evaluate declared/enforced/stage control invariants.\n */\nexport function evaluateControlRules(\n  events: readonly PersistedInspectEvent[],\n  rules: TraceContractControlRules,\n  runEvidence: readonly TraceCheckEvidence[],\n  observationNames: ReadonlySet<string>,\n): TraceCheckFinding[] {\n  const findings: TraceCheckFinding[] = [];\n  const declared =\n    rules.declaredTools ??\n    attributeList(events, rules.declaredToolsAttribute);\n  const enforced =\n    rules.enforcedTools ??\n    attributeList(events, rules.enforcedToolsAttribute);\n\n  if (rules.requireDeclaredMatchesEnforced) {\n    if (declared === undefined || enforced === undefined) {\n      findings.push(\n        fail(\n          \"contract.controls.declared-matches-enforced\",\n          \"Declared and enforced tool sets could not both be resolved.\",\n          runEvidence,\n          { declaredDefined: declared !== undefined, enforcedDefined: enforced !== undefined },\n          { code: \"AI_CHECK_CONTROL_EVIDENCE_UNAVAILABLE\" },\n        ),\n      );\n    } else if (!setEqual(declared, enforced)) {\n      findings.push(\n        fail(\n          \"contract.controls.declared-matches-enforced\",\n          \"Declared tools differ from enforced tools.\",\n          runEvidence,\n          sortedUnique(declared),\n          sortedUnique(enforced),\n        ),\n      );\n    }\n  }\n\n  const observedTools = sortedUnique(\n    events\n      .filter((event) => event.kind === \"TOOL\" && event.status !== \"running\")\n      .map((event) => resolveCanonicalToolName(event)),\n  );\n\n  if (rules.requireObservedWithinEnforced) {\n    if (enforced === undefined) {\n      findings.push(\n        fail(\n          \"contract.controls.observed-within-enforced\",\n          \"Enforced tool set unavailable for observed-within-enforced check.\",\n          runEvidence,\n          undefined,\n          { code: \"AI_CHECK_CONTROL_EVIDENCE_UNAVAILABLE\" },\n        ),\n      );\n    } else {\n      const enforcedSet = new Set(enforced);\n      const outside = observedTools.filter((name) => !enforcedSet.has(name));\n      if (outside.length > 0) {\n        findings.push(\n          fail(\n            \"contract.controls.observed-within-enforced\",\n            `Observed tools outside enforced allowlist: ${outside.join(\", \")}.`,\n            runEvidence,\n            sortedUnique(enforced),\n            outside,\n          ),\n        );\n      }\n    }\n  }\n\n  if (rules.requireObservedWithinDeclared) {\n    if (declared === undefined) {\n      findings.push(\n        fail(\n          \"contract.controls.observed-within-declared\",\n          \"Declared tool set unavailable for observed-within-declared check.\",\n          runEvidence,\n          undefined,\n          { code: \"AI_CHECK_CONTROL_EVIDENCE_UNAVAILABLE\" },\n        ),\n      );\n    } else {\n      const declaredSet = new Set(declared);\n      const outside = observedTools.filter((name) => !declaredSet.has(name));\n      if (outside.length > 0) {\n        findings.push(\n          fail(\n            \"contract.controls.observed-within-declared\",\n            `Observed tools outside declared set: ${outside.join(\", \")}.`,\n            runEvidence,\n            sortedUnique(declared),\n            outside,\n          ),\n        );\n      }\n    }\n  }\n\n  for (const stage of rules.requiredStages ?? []) {\n    const observation = stage.observation ?? `control.${stage.stage}`;\n    if (!observationNames.has(observation)) {\n      findings.push(\n        fail(\n          `contract.controls.stage.${stage.stage}`,\n          `Required control stage observation missing: ${observation}.`,\n          runEvidence,\n          observation,\n          [...observationNames],\n        ),\n      );\n    }\n  }\n\n  return findings;\n}\n","/**\n * Bounded canonical structured equality for TraceContract checks (6.29.2).\n *\n * Key-sorted JSON comparison with depth/size limits. Missing or unbounded\n * evidence must not become a silent pass.\n *\n * @experimental\n */\n\nconst DEFAULT_MAX_DEPTH = 8;\nconst DEFAULT_MAX_BYTES = 16_384;\n\nexport interface CanonicalEqualityLimits {\n  maxDepth?: number;\n  maxBytes?: number;\n}\n\nexport type CanonicalEncodeResult =\n  | { ok: true; value: string }\n  | { ok: false; reason: string; code: string };\n\nfunction sortKeysDeep(input: unknown, depth: number, maxDepth: number): unknown {\n  if (depth > maxDepth) {\n    throw new Error(\"AI_CHECK_CANONICAL_DEPTH_EXCEEDED\");\n  }\n  if (input === null || typeof input !== \"object\") return input;\n  if (Array.isArray(input)) {\n    return input.map((item) => sortKeysDeep(item, depth + 1, maxDepth));\n  }\n  const record = input as Record<string, unknown>;\n  const out: Record<string, unknown> = {};\n  for (const key of Object.keys(record).sort()) {\n    out[key] = sortKeysDeep(record[key], depth + 1, maxDepth);\n  }\n  return out;\n}\n\n/**\n * Encode a JSON-like value into a deterministic string for equality checks.\n */\nexport function encodeCanonicalStructured(\n  value: unknown,\n  limits?: CanonicalEqualityLimits,\n): CanonicalEncodeResult {\n  const maxDepth = limits?.maxDepth ?? DEFAULT_MAX_DEPTH;\n  const maxBytes = limits?.maxBytes ?? DEFAULT_MAX_BYTES;\n  try {\n    const sorted = sortKeysDeep(value, 0, maxDepth);\n    const encoded = JSON.stringify(sorted);\n    if (encoded === undefined) {\n      return {\n        ok: false,\n        reason: \"Value is not JSON-serializable for canonical comparison.\",\n        code: \"AI_CHECK_CANONICAL_UNSERIALIZABLE\",\n      };\n    }\n    if (Buffer.byteLength(encoded, \"utf8\") > maxBytes) {\n      return {\n        ok: false,\n        reason: \"Canonical structured value exceeds bounded size limit.\",\n        code: \"AI_CHECK_CANONICAL_SIZE_EXCEEDED\",\n      };\n    }\n    return { ok: true, value: encoded };\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    if (message === \"AI_CHECK_CANONICAL_DEPTH_EXCEEDED\") {\n      return {\n        ok: false,\n        reason: \"Canonical structured value exceeds bounded depth limit.\",\n        code: \"AI_CHECK_CANONICAL_DEPTH_EXCEEDED\",\n      };\n    }\n    return {\n      ok: false,\n      reason: \"Canonical structured encoding failed.\",\n      code: \"AI_CHECK_CANONICAL_UNSERIALIZABLE\",\n    };\n  }\n}\n\n/**\n * Compare two JSON-like values with canonical key order.\n * Returns unavailable/fail codes rather than throwing.\n */\nexport function canonicalStructuredEqual(\n  left: unknown,\n  right: unknown,\n  limits?: CanonicalEqualityLimits,\n):\n  | { equal: true }\n  | { equal: false; reason: string; code: string } {\n  const a = encodeCanonicalStructured(left, limits);\n  if (!a.ok) return { equal: false, reason: a.reason, code: a.code };\n  const b = encodeCanonicalStructured(right, limits);\n  if (!b.ok) return { equal: false, reason: b.reason, code: b.code };\n  if (a.value !== b.value) {\n    return {\n      equal: false,\n      reason: \"Canonical structured values differ.\",\n      code: \"AI_CHECK_CANONICAL_NOT_EQUAL\",\n    };\n  }\n  return { equal: true };\n}\n","/**\n * Bounded JSON Pointer evaluation for TraceContract tool-argument checks (6.23).\n *\n * No JSONPath, regex, or arbitrary code execution.\n *\n * @experimental\n */\n\nimport { canonicalStructuredEqual } from \"./canonical-equality.js\";\n\nexport type JsonPointerValue =\n  | string\n  | number\n  | boolean\n  | null\n  | readonly JsonPointerValue[]\n  | { readonly [key: string]: JsonPointerValue };\n\nfunction decodeToken(token: string): string {\n  return token.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n}\n\n/**\n * Resolve an RFC 6901 JSON Pointer against a JSON-like value.\n * Returns `{ found: false }` when the path does not exist.\n */\nexport function resolveJsonPointer(\n  document: unknown,\n  pointer: string,\n): { found: true; value: unknown } | { found: false } {\n  if (pointer === \"\") {\n    return { found: true, value: document };\n  }\n  if (!pointer.startsWith(\"/\")) {\n    return { found: false };\n  }\n  const tokens = pointer.slice(1).split(\"/\").map(decodeToken);\n  let current: unknown = document;\n  for (const token of tokens) {\n    if (current === null || current === undefined) {\n      return { found: false };\n    }\n    if (Array.isArray(current)) {\n      if (!/^(0|[1-9][0-9]*)$/.test(token)) {\n        return { found: false };\n      }\n      const index = Number(token);\n      if (index >= current.length) {\n        return { found: false };\n      }\n      current = current[index];\n      continue;\n    }\n    if (typeof current !== \"object\") {\n      return { found: false };\n    }\n    const record = current as Record<string, unknown>;\n    if (!Object.prototype.hasOwnProperty.call(record, token)) {\n      return { found: false };\n    }\n    current = record[token];\n  }\n  return { found: true, value: current };\n}\n\nexport type ToolArgumentOperator = \"exists\" | \"type\" | \"equals\" | \"oneOf\";\nexport type ToolArgumentOccurrence = \"first\" | \"last\" | \"any\" | \"all\";\n\nexport interface ToolArgumentCheck {\n  tool: string;\n  path: string;\n  operator: ToolArgumentOperator;\n  occurrence?: ToolArgumentOccurrence;\n  /** Required for `equals`. */\n  expected?: unknown;\n  /** Required for `oneOf`. */\n  oneOf?: readonly unknown[];\n  /** Required for `type` (`string` | `number` | `boolean` | `object` | `array` | `null`). */\n  type?: \"string\" | \"number\" | \"boolean\" | \"object\" | \"array\" | \"null\";\n}\n\nfunction jsonType(value: unknown): string {\n  if (value === null) return \"null\";\n  if (Array.isArray(value)) return \"array\";\n  return typeof value;\n}\n\nfunction valuesEqual(left: unknown, right: unknown): boolean {\n  return canonicalStructuredEqual(left, right).equal === true;\n}\n\nexport type ToolArgumentEval =\n  | { status: \"pass\" }\n  | { status: \"fail\"; message: string; code: string }\n  | { status: \"unavailable\"; message: string; code: \"AI_CHECK_TOOL_ARGUMENT_EVIDENCE_UNAVAILABLE\" };\n\n/**\n * Extract structured tool-argument evidence from a tool event.\n * Preview-only strings and digests do not count as structured evidence.\n */\nfunction isStructuredArgumentEvidence(value: unknown): value is object {\n  return value !== undefined && value !== null && typeof value === \"object\";\n}\n\n/**\n * Extract structured tool-argument evidence from a tool event.\n *\n * Precedence (first structured object/array wins):\n * 1. top-level `attributes.arguments` / `input` / `toolArguments`\n * 2. nested `attributes.metadata.arguments` / `input` / `toolArguments`\n *    (manual instrumentation stores caller metadata here)\n * 3. `inputSummary` when it is already a structured object/array\n *\n * Preview strings and digests do not count as structured evidence.\n * This does not enable default raw argument capture.\n */\nexport function extractToolArgumentPayload(event: {\n  attributes?: Record<string, unknown>;\n  inputSummary?: unknown;\n}): { present: boolean; value: unknown } {\n  const attrs = event.attributes ?? {};\n  for (const key of [\"arguments\", \"input\", \"toolArguments\"] as const) {\n    const candidate = attrs[key];\n    if (isStructuredArgumentEvidence(candidate)) {\n      return { present: true, value: candidate };\n    }\n  }\n\n  const metadata = attrs.metadata;\n  if (isStructuredArgumentEvidence(metadata) && !Array.isArray(metadata)) {\n    const nested = metadata as Record<string, unknown>;\n    for (const key of [\"arguments\", \"input\", \"toolArguments\"] as const) {\n      const candidate = nested[key];\n      if (isStructuredArgumentEvidence(candidate)) {\n        return { present: true, value: candidate };\n      }\n    }\n  }\n\n  if (isStructuredArgumentEvidence(event.inputSummary)) {\n    return { present: true, value: event.inputSummary };\n  }\n  return { present: false, value: undefined };\n}\n\nexport function evaluateToolArgumentValue(\n  value: unknown,\n  check: ToolArgumentCheck,\n  evidencePresent: boolean,\n): ToolArgumentEval {\n  if (!evidencePresent) {\n    return {\n      status: \"unavailable\",\n      code: \"AI_CHECK_TOOL_ARGUMENT_EVIDENCE_UNAVAILABLE\",\n      message: `Structured argument evidence unavailable for tool ${check.tool} at ${check.path}.`,\n    };\n  }\n  const resolved = resolveJsonPointer(value, check.path);\n  if (check.operator === \"exists\") {\n    return resolved.found\n      ? { status: \"pass\" }\n      : {\n          status: \"fail\",\n          code: \"AI_CHECK_TOOL_ARGUMENT_MISSING\",\n          message: `Expected path ${check.path} to exist on tool ${check.tool}.`,\n        };\n  }\n  if (!resolved.found) {\n    return {\n      status: \"unavailable\",\n      code: \"AI_CHECK_TOOL_ARGUMENT_EVIDENCE_UNAVAILABLE\",\n      message: `Path ${check.path} missing for tool ${check.tool}.`,\n    };\n  }\n  if (check.operator === \"type\") {\n    const actual = jsonType(resolved.value);\n    if (check.type === undefined) {\n      return {\n        status: \"fail\",\n        code: \"AI_CHECK_TOOL_ARGUMENT_INVALID_CONFIG\",\n        message: \"type operator requires check.type\",\n      };\n    }\n    return actual === check.type\n      ? { status: \"pass\" }\n      : {\n          status: \"fail\",\n          code: \"AI_CHECK_TOOL_ARGUMENT_TYPE\",\n          message: `Expected type ${check.type} at ${check.path} for tool ${check.tool}; found ${actual}.`,\n        };\n  }\n  if (check.operator === \"equals\") {\n    return valuesEqual(resolved.value, check.expected)\n      ? { status: \"pass\" }\n      : {\n          status: \"fail\",\n          code: \"AI_CHECK_TOOL_ARGUMENT_EQUALS\",\n          message: `Value at ${check.path} for tool ${check.tool} did not equal expected (bounded comparison).`,\n        };\n  }\n  if (check.operator === \"oneOf\") {\n    const options = check.oneOf ?? [];\n    if (options.length === 0) {\n      return {\n        status: \"fail\",\n        code: \"AI_CHECK_TOOL_ARGUMENT_INVALID_CONFIG\",\n        message: \"oneOf operator requires a non-empty oneOf array\",\n      };\n    }\n    return options.some((option) => valuesEqual(resolved.value, option))\n      ? { status: \"pass\" }\n      : {\n          status: \"fail\",\n          code: \"AI_CHECK_TOOL_ARGUMENT_ONE_OF\",\n          message: `Value at ${check.path} for tool ${check.tool} was not in the allowed oneOf set.`,\n        };\n  }\n  return {\n    status: \"fail\",\n    code: \"AI_CHECK_TOOL_ARGUMENT_INVALID_CONFIG\",\n    message: `Unsupported operator.`,\n  };\n}\n","/**\n * Retry / side-effect safety checks for TraceContract (6.23+; corrected in 6.25.1).\n *\n * Uses explicit attempt identity from session workflow metadata.\n * AgentInspect evaluates; it does not perform retries.\n *\n * @experimental\n */\n\nimport type { TraceCheckEvidence, TraceCheckFinding } from \"./index.js\";\nimport { resolveCanonicalToolName } from \"./logical-events.js\";\nimport type { TraceContractRecoveryOperation } from \"./recovery-operations.js\";\nimport { extractSessionWorkflowMetadata } from \"../sessions/metadata.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport type { SessionWorkflowMetadata } from \"../sessions/types.js\";\n\nexport type {\n  RecoverySameArgumentsMode,\n  RecoverySideEffectClass,\n  TraceContractRecoveryOperation,\n  TraceContractRecoveryRetryableErrors,\n  TraceContractRecoverySuccessfulResultDependency,\n} from \"./recovery-operations.js\";\n\nexport interface TraceContractRetryRules {\n  /**\n   * Maximum attempts per `operationId` (or `attemptOf` grouping).\n   * Prefers distinct `attemptId` values, else validated contiguous `attemptNumber`s,\n   * else finished tool/LLM events in the operation.\n   */\n  maxAttempts?: number;\n  /**\n   * When true, every operation with attempts must include a non-running terminal event.\n   */\n  requireTerminalResult?: boolean;\n  /**\n   * Fail when `fallbackOf` is set without an earlier failure for the referenced operation\n   * that chronologically precedes the fallback event.\n   */\n  fallbackOnlyAfterFailure?: boolean;\n  /**\n   * Tool names treated as non-idempotent. A later attempt after an `ok` occurrence fails\n   * unless idempotency / no-side-effect evidence is present on the retry.\n   */\n  nonIdempotentTools?: string[];\n  /**\n   * When true, genuine retries (including error→success) require `idempotencyKey`\n   * or `attributes.noSideEffect === true` / `sideEffect === false`.\n   * A client key alone is not proof of exactly-once mutation.\n   */\n  requireIdempotencyEvidenceForRetry?: boolean;\n  /**\n   * When true, recovered success paths must retain an earlier error attempt in the\n   * same operation/retry chain (not merely coexistence of ok+error).\n   */\n  requireRecoveredFailureVisible?: boolean;\n  /**\n   * Per-tool bounded recovery oracles (read-first; write timeout/unknown fails closed).\n   *\n   * @experimental Additive in 6.27.\n   */\n  operations?: readonly TraceContractRecoveryOperation[];\n}\n\nfunction fail(\n  ruleId: string,\n  message: string,\n  evidence: readonly TraceCheckEvidence[],\n  expected?: unknown,\n  actual?: unknown,\n): TraceCheckFinding {\n  return {\n    ruleId,\n    severity: \"error\",\n    status: \"fail\",\n    message,\n    ...(expected !== undefined ? { expected } : {}),\n    ...(actual !== undefined ? { actual } : {}),\n    evidence: [...evidence],\n  };\n}\n\nfunction workflowFor(event: PersistedInspectEvent): SessionWorkflowMetadata {\n  const attrs = event.attributes;\n  if (!attrs || typeof attrs !== \"object\") return {};\n  const direct = extractSessionWorkflowMetadata(attrs);\n  const nested =\n    attrs.metadata && typeof attrs.metadata === \"object\"\n      ? extractSessionWorkflowMetadata(attrs.metadata as Record<string, unknown>)\n      : undefined;\n  return { ...nested, ...direct };\n}\n\nfunction hasIdempotencyEvidence(event: PersistedInspectEvent): boolean {\n  const workflow = workflowFor(event);\n  if (typeof workflow.idempotencyKey === \"string\" && workflow.idempotencyKey.trim() !== \"\") {\n    return true;\n  }\n  const attrs = event.attributes ?? {};\n  if (attrs.noSideEffect === true) return true;\n  if (attrs.sideEffect === false) return true;\n  return false;\n}\n\nfunction eventEvidence(event: PersistedInspectEvent): TraceCheckEvidence {\n  return {\n    runId: event.runId,\n    eventId: event.eventId,\n    kind: event.kind,\n    name: event.name,\n    status: event.status,\n  };\n}\n\nfunction eventTime(event: PersistedInspectEvent): string {\n  return event.startedAt ?? event.timestamp ?? \"\";\n}\n\nfunction sortByTime(events: readonly PersistedInspectEvent[]): PersistedInspectEvent[] {\n  return [...events].sort((a, b) => eventTime(a).localeCompare(eventTime(b)));\n}\n\nfunction attemptNumberOf(event: PersistedInspectEvent): number | undefined {\n  const workflow = workflowFor(event);\n  const value = workflow.attemptNumber ?? workflow.attempt;\n  return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction attemptIdOf(event: PersistedInspectEvent): string | undefined {\n  const value = workflowFor(event).attemptId;\n  return typeof value === \"string\" && value.trim() !== \"\" ? value : undefined;\n}\n\n/**\n * Count attempts with identity preference (6.25.1).\n * Does not use Math.max(attemptNumber) without validating contiguous identity.\n */\nexport function countOperationAttempts(members: readonly PersistedInspectEvent[]): number {\n  const attemptIds = new Set(\n    members\n      .map((event) => attemptIdOf(event))\n      .filter((value): value is string => value !== undefined),\n  );\n  if (attemptIds.size > 0) {\n    return attemptIds.size;\n  }\n\n  const numbers = members\n    .map((event) => attemptNumberOf(event))\n    .filter((value): value is number => value !== undefined)\n    .sort((a, b) => a - b);\n  if (numbers.length > 0) {\n    const unique = [...new Set(numbers)];\n    const min = unique[0]!;\n    const max = unique[unique.length - 1]!;\n    const contiguous =\n      unique.length === max - min + 1 && unique.every((value, index) => value === min + index);\n    if (contiguous) {\n      return unique.length;\n    }\n    return unique.length;\n  }\n\n  return members.filter((event) => event.kind === \"TOOL\" || event.kind === \"LLM\").length;\n}\n\ntype RetryClassification =\n  | { kind: \"first\" }\n  | { kind: \"retry\" }\n  | { kind: \"unknown\"; reason: string };\n\n/**\n * Classify whether an event is a retry within an ordered same-tool/operation group.\n */\nexport function classifyRetryAttempt(\n  event: PersistedInspectEvent,\n  priorOrdered: readonly PersistedInspectEvent[],\n  allMembers: readonly PersistedInspectEvent[],\n): RetryClassification {\n  const workflow = workflowFor(event);\n  const attemptNumber = attemptNumberOf(event);\n  const attemptId = attemptIdOf(event);\n  const retryOf = workflow.retryOf;\n\n  if (typeof retryOf === \"string\" && retryOf.trim() !== \"\") {\n    const target = allMembers.find(\n      (candidate) =>\n        candidate.eventId === retryOf ||\n        attemptIdOf(candidate) === retryOf ||\n        workflowFor(candidate).operationId === retryOf,\n    );\n    if (!target) {\n      return { kind: \"unknown\", reason: \"retryOf target missing\" };\n    }\n    if (eventTime(target) > eventTime(event)) {\n      return { kind: \"unknown\", reason: \"retryOf target does not precede retry\" };\n    }\n    return { kind: \"retry\" };\n  }\n\n  if (attemptNumber !== undefined) {\n    if (attemptNumber > 1) {\n      return { kind: \"retry\" };\n    }\n    if (attemptNumber === 1) {\n      return { kind: \"first\" };\n    }\n  }\n\n  if (attemptId !== undefined) {\n    const priorDistinct = priorOrdered.some((candidate) => {\n      const priorId = attemptIdOf(candidate);\n      return priorId !== undefined && priorId !== attemptId;\n    });\n    if (priorDistinct) {\n      return { kind: \"retry\" };\n    }\n    if (priorOrdered.length === 0) {\n      return { kind: \"first\" };\n    }\n  }\n\n  const priorFinished = priorOrdered.filter(\n    (candidate) => candidate.status === \"ok\" || candidate.status === \"error\",\n  );\n  if (priorFinished.length > 0) {\n    return { kind: \"retry\" };\n  }\n  if (priorOrdered.length === 0) {\n    return { kind: \"first\" };\n  }\n  return { kind: \"unknown\", reason: \"ambiguous attempt identity\" };\n}\n\nfunction hasDuplicateAttemptIds(members: readonly PersistedInspectEvent[]): boolean {\n  const seen = new Set<string>();\n  for (const event of members) {\n    const id = attemptIdOf(event);\n    if (!id) continue;\n    if (seen.has(id)) return true;\n    seen.add(id);\n  }\n  return false;\n}\n\n/**\n * Evaluate retry / side-effect safety invariants.\n */\nexport function evaluateRetrySafetyRules(\n  events: readonly PersistedInspectEvent[],\n  rules: TraceContractRetryRules,\n  _runEvidence: readonly TraceCheckEvidence[],\n): TraceCheckFinding[] {\n  const findings: TraceCheckFinding[] = [];\n  const byOperation = new Map<string, PersistedInspectEvent[]>();\n\n  for (const event of events) {\n    const workflow = workflowFor(event);\n    const operationId = workflow.operationId;\n    if (!operationId) continue;\n    const list = byOperation.get(operationId) ?? [];\n    list.push(event);\n    byOperation.set(operationId, list);\n  }\n\n  if (rules.maxAttempts !== undefined) {\n    for (const [operationId, members] of byOperation) {\n      if (hasDuplicateAttemptIds(members)) {\n        findings.push(\n          fail(\n            \"contract.retry.duplicate-attempt-id\",\n            `Operation ${operationId} has duplicate attemptId values.`,\n            members.slice(0, 4).map(eventEvidence),\n            \"unique attemptId\",\n            \"duplicate\",\n          ),\n        );\n      }\n      const count = countOperationAttempts(members);\n      if (count > rules.maxAttempts) {\n        findings.push(\n          fail(\n            \"contract.retry.max-attempts\",\n            `Operation ${operationId} exceeded maxAttempts ${rules.maxAttempts}.`,\n            members.slice(0, 4).map(eventEvidence),\n            rules.maxAttempts,\n            count,\n          ),\n        );\n      }\n    }\n  }\n\n  if (rules.requireTerminalResult) {\n    for (const [operationId, members] of byOperation) {\n      const hasTerminal = members.some((event) => event.status === \"ok\" || event.status === \"error\");\n      if (!hasTerminal) {\n        findings.push(\n          fail(\n            \"contract.retry.terminal-result\",\n            `Operation ${operationId} has no terminal ok/error result.`,\n            members.slice(0, 4).map(eventEvidence),\n            \"ok|error\",\n            members.map((event) => event.status),\n          ),\n        );\n      }\n    }\n  }\n\n  if (rules.fallbackOnlyAfterFailure) {\n    for (const event of events) {\n      const workflow = workflowFor(event);\n      const fallbackOf = workflow.fallbackOf;\n      if (!fallbackOf) continue;\n      const prior = byOperation.get(fallbackOf) ?? [];\n      const fallbackStart = eventTime(event);\n      const earlierFailure = prior.some(\n        (candidate) =>\n          candidate.status === \"error\" &&\n          eventTime(candidate) !== \"\" &&\n          fallbackStart !== \"\" &&\n          eventTime(candidate) < fallbackStart,\n      );\n      if (!earlierFailure) {\n        findings.push(\n          fail(\n            \"contract.retry.fallback-after-failure\",\n            `Fallback for ${fallbackOf} appeared without an earlier failure in the related operation.`,\n            [eventEvidence(event)],\n            \"earlier error attempt\",\n            { fallbackOf },\n          ),\n        );\n      }\n    }\n  }\n\n  const nonIdempotent = new Set(rules.nonIdempotentTools ?? []);\n  if (nonIdempotent.size > 0 || rules.requireIdempotencyEvidenceForRetry) {\n    const toolEvents = events.filter(\n      (event) => event.kind === \"TOOL\" && event.status !== \"running\",\n    );\n    const byToolOp = new Map<string, PersistedInspectEvent[]>();\n    for (const event of toolEvents) {\n      const name = resolveCanonicalToolName(event);\n      const workflow = workflowFor(event);\n      const key = `${workflow.operationId ?? name}::${name}`;\n      const list = byToolOp.get(key) ?? [];\n      list.push(event);\n      byToolOp.set(key, list);\n    }\n    for (const [, members] of byToolOp) {\n      const ordered = sortByTime(members);\n      let sawOk = false;\n      let sawSideEffectOk = false;\n      const prior: PersistedInspectEvent[] = [];\n      for (const event of ordered) {\n        const name = resolveCanonicalToolName(event);\n        const classification = classifyRetryAttempt(event, prior, members);\n\n        if (classification.kind === \"unknown\" && rules.requireIdempotencyEvidenceForRetry) {\n          findings.push(\n            fail(\n              \"contract.retry.ambiguous-identity\",\n              `Ambiguous attempt identity for tool ${name}; strict retry evidence cannot pass.`,\n              [eventEvidence(event)],\n              \"explicit attempt identity\",\n              classification.reason,\n            ),\n          );\n        }\n\n        const isRetry = classification.kind === \"retry\";\n        if (isRetry && rules.requireIdempotencyEvidenceForRetry && !hasIdempotencyEvidence(event)) {\n          findings.push(\n            fail(\n              \"contract.retry.idempotency-evidence\",\n              `Retry of tool ${name} lacks idempotencyKey / noSideEffect evidence.`,\n              [eventEvidence(event)],\n              \"idempotencyKey|noSideEffect\",\n              { code: \"AI_CHECK_RETRY_EVIDENCE_UNAVAILABLE\" },\n            ),\n          );\n        }\n\n        if (sawOk && nonIdempotent.has(name) && sawSideEffectOk && !hasIdempotencyEvidence(event)) {\n          findings.push(\n            fail(\n              \"contract.retry.non-idempotent-side-effect\",\n              `Retry of non-idempotent tool ${name} after a confirmed ok side effect.`,\n              [eventEvidence(event)],\n              \"no retry after side effect\",\n              name,\n            ),\n          );\n        }\n\n        if (event.status === \"ok\") {\n          sawOk = true;\n          if (nonIdempotent.has(name) && !hasIdempotencyEvidence(event)) {\n            sawSideEffectOk = true;\n          }\n        }\n        prior.push(event);\n      }\n    }\n  }\n\n  if (rules.requireRecoveredFailureVisible) {\n    for (const [operationId, members] of byOperation) {\n      const ordered = sortByTime(members);\n      const toolish = ordered.filter(\n        (event) =>\n          (event.kind === \"TOOL\" || event.kind === \"LLM\") &&\n          (event.status === \"ok\" || event.status === \"error\"),\n      );\n      if (toolish.length < 2) continue;\n\n      let sawEarlierError = false;\n      let sawLaterOkAfterError = false;\n      for (const event of toolish) {\n        if (event.status === \"error\") {\n          sawEarlierError = true;\n        } else if (event.status === \"ok\" && sawEarlierError) {\n          sawLaterOkAfterError = true;\n        }\n      }\n\n      const hasOk = toolish.some((event) => event.status === \"ok\");\n      const attemptish =\n        toolish.some((event) => {\n          const meta = workflowFor(event);\n          return (\n            meta.attemptId !== undefined ||\n            meta.attemptNumber !== undefined ||\n            meta.attempt !== undefined ||\n            meta.retryOf !== undefined\n          );\n        }) || toolish.length > 1;\n\n      if (!attemptish || !hasOk) continue;\n\n      if (!sawLaterOkAfterError) {\n        findings.push(\n          fail(\n            \"contract.retry.recovered-failure-visible\",\n            `Operation ${operationId} does not show an earlier error attempt before a later success in the same chain.`,\n            members.slice(0, 4).map(eventEvidence),\n            \"earlier error then later ok\",\n            {\n              sawEarlierError,\n              statuses: toolish.map((event) => event.status),\n            },\n          ),\n        );\n      }\n    }\n  }\n\n  return findings;\n}\n","/**\n * Bounded safe recovery operation contracts (6.27).\n *\n * Additive `retry.operations[]` rules for read-first recovery oracles.\n * AgentInspect evaluates traces; it does not perform retries.\n *\n * @experimental\n */\n\nimport type { TraceCheckEvidence, TraceCheckFinding } from \"./index.js\";\nimport { encodeCanonicalStructured } from \"./canonical-equality.js\";\nimport { resolveCanonicalToolName } from \"./logical-events.js\";\nimport { extractToolArgumentPayload } from \"./tool-arguments.js\";\nimport { classifyRetryAttempt, countOperationAttempts } from \"./retry-safety.js\";\nimport { extractSessionWorkflowMetadata } from \"../sessions/metadata.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport type { SessionWorkflowMetadata } from \"../sessions/types.js\";\n\n/** How same-argument evidence may be compared across attempts. */\nexport type RecoverySameArgumentsMode = \"structured-or-digest\";\n\n/**\n * Side-effect class for conservative write recovery semantics.\n * Read-only tools may recover without write idempotency proof.\n * Write tools treat timeout/unknown completion as fail/unevaluable\n * unless authoritative idempotency evidence is present.\n */\nexport type RecoverySideEffectClass = \"read\" | \"write\";\n\nexport interface TraceContractRecoveryRetryableErrors {\n  /** Allowed error codes on failed attempts that precede a retry. */\n  codes?: readonly string[];\n}\n\nexport interface TraceContractRecoverySuccessfulResultDependency {\n  /** Consumer kind that must observe the successful tool result. */\n  consumerKind: \"LLM\";\n  /**\n   * When true, an LLM event must explicitly reference the successful tool\n   * event id (attributes / workflow metadata), not merely follow it in time.\n   */\n  requireExplicitReference?: boolean;\n}\n\n/**\n * Per-tool bounded recovery oracle (additive under `retry.operations`).\n *\n * @experimental Additive in 6.27.\n */\nexport interface TraceContractRecoveryOperation {\n  tool: string;\n  maxAttempts?: number;\n  retryableErrors?: TraceContractRecoveryRetryableErrors;\n  requireFailureBeforeRetry?: boolean;\n  /**\n   * When true or `\"structured-or-digest\"`, retries must share structured\n   * arguments or matching digests. Missing evidence fails closed.\n   */\n  requireSameArguments?: boolean | RecoverySameArgumentsMode;\n  requireTerminalSuccess?: boolean;\n  requireRecoveredFailureVisible?: boolean;\n  successfulResultDependency?: TraceContractRecoverySuccessfulResultDependency;\n  /**\n   * Defaults to `\"read\"`. Write tools apply conservative timeout/unknown rules.\n   */\n  sideEffectClass?: RecoverySideEffectClass;\n}\n\nfunction fail(\n  ruleId: string,\n  message: string,\n  evidence: readonly TraceCheckEvidence[],\n  expected?: unknown,\n  actual?: unknown,\n): TraceCheckFinding {\n  return {\n    ruleId,\n    severity: \"error\",\n    status: \"fail\",\n    message,\n    ...(expected !== undefined ? { expected } : {}),\n    ...(actual !== undefined ? { actual } : {}),\n    evidence: [...evidence],\n  };\n}\n\nfunction workflowFor(event: PersistedInspectEvent): SessionWorkflowMetadata {\n  const attrs = event.attributes;\n  if (!attrs || typeof attrs !== \"object\") return {};\n  const direct = extractSessionWorkflowMetadata(attrs);\n  const nested =\n    attrs.metadata && typeof attrs.metadata === \"object\"\n      ? extractSessionWorkflowMetadata(attrs.metadata as Record<string, unknown>)\n      : undefined;\n  return { ...nested, ...direct };\n}\n\nfunction eventEvidence(event: PersistedInspectEvent): TraceCheckEvidence {\n  return {\n    runId: event.runId,\n    eventId: event.eventId,\n    kind: event.kind,\n    name: event.name,\n    status: event.status,\n  };\n}\n\nfunction eventTime(event: PersistedInspectEvent): string {\n  return event.startedAt ?? event.timestamp ?? \"\";\n}\n\nfunction sortByTime(events: readonly PersistedInspectEvent[]): PersistedInspectEvent[] {\n  return [...events].sort((a, b) => eventTime(a).localeCompare(eventTime(b)));\n}\n\nfunction errorCodeOf(event: PersistedInspectEvent): string | undefined {\n  if (typeof event.error?.code === \"string\" && event.error.code.trim() !== \"\") {\n    return event.error.code.trim();\n  }\n  const attrs = event.attributes ?? {};\n  for (const key of [\"errorCode\", \"code\"] as const) {\n    const value = attrs[key];\n    if (typeof value === \"string\" && value.trim() !== \"\") return value.trim();\n  }\n  const nested = attrs.error;\n  if (nested && typeof nested === \"object\") {\n    const code = (nested as { code?: unknown }).code;\n    if (typeof code === \"string\" && code.trim() !== \"\") return code.trim();\n  }\n  return undefined;\n}\n\nfunction argumentDigestOf(event: PersistedInspectEvent): string | undefined {\n  const attrs = event.attributes ?? {};\n  for (const key of [\"argumentsDigest\", \"inputDigest\", \"toolArgumentsDigest\"] as const) {\n    const value = attrs[key];\n    if (typeof value === \"string\" && value.trim() !== \"\") return value.trim();\n  }\n  const commitment = attrs.omittedPayloadCommitment;\n  if (commitment && typeof commitment === \"object\") {\n    const digest = (commitment as { digest?: unknown }).digest;\n    if (typeof digest === \"string\" && digest.trim() !== \"\") return digest.trim();\n  }\n  return undefined;\n}\n\ntype ArgumentFingerprint =\n  | { kind: \"structured\"; value: string }\n  | { kind: \"digest\"; value: string }\n  | { kind: \"missing\" };\n\nfunction argumentFingerprint(event: PersistedInspectEvent): ArgumentFingerprint {\n  const payload = extractToolArgumentPayload(event);\n  if (payload.present) {\n    const encoded = encodeCanonicalStructured(payload.value);\n    if (!encoded.ok) return { kind: \"missing\" };\n    return { kind: \"structured\", value: encoded.value };\n  }\n  const digest = argumentDigestOf(event);\n  if (digest) return { kind: \"digest\", value: digest };\n  return { kind: \"missing\" };\n}\n\nfunction sameArguments(\n  left: PersistedInspectEvent,\n  right: PersistedInspectEvent,\n): { ok: true } | { ok: false; reason: string; code: string } {\n  const a = argumentFingerprint(left);\n  const b = argumentFingerprint(right);\n  if (a.kind === \"missing\" || b.kind === \"missing\") {\n    return {\n      ok: false,\n      reason: \"Structured or digest argument evidence unavailable for same-arguments check.\",\n      code: \"AI_CHECK_RECOVERY_ARGUMENT_EVIDENCE_UNAVAILABLE\",\n    };\n  }\n  if (a.kind !== b.kind) {\n    return {\n      ok: false,\n      reason: \"Argument evidence kinds differ across attempts (structured vs digest).\",\n      code: \"AI_CHECK_RECOVERY_ARGUMENT_EVIDENCE_MISMATCH\",\n    };\n  }\n  if (a.value !== b.value) {\n    return {\n      ok: false,\n      reason: \"Retry arguments do not match prior attempt.\",\n      code: \"AI_CHECK_RECOVERY_ARGUMENTS_DIFFER\",\n    };\n  }\n  return { ok: true };\n}\n\nfunction isUnevaluableWriteCompletion(event: PersistedInspectEvent): boolean {\n  if (event.status === \"running\" || event.status === \"unknown\") return true;\n  const attrs = event.attributes ?? {};\n  if (attrs.timeout === true) return true;\n  if (attrs.completionState === \"unknown\" || attrs.completionState === \"timeout\") return true;\n  const code = errorCodeOf(event)?.toUpperCase();\n  if (code === \"TIMEOUT\" || code === \"UNKNOWN_COMPLETION\" || code === \"DEADLINE_EXCEEDED\") {\n    return true;\n  }\n  return false;\n}\n\nfunction collectExplicitReferences(event: PersistedInspectEvent): Set<string> {\n  const refs = new Set<string>();\n  const attrs = event.attributes ?? {};\n  const candidates: unknown[] = [\n    attrs.referencedEventId,\n    attrs.referencedEventIds,\n    attrs.toolResultEventId,\n    attrs.toolResultEventIds,\n    attrs.inputEventIds,\n    attrs.dependsOnEventIds,\n    attrs.evidence,\n    workflowFor(event).toolCallId,\n  ];\n  for (const candidate of candidates) {\n    if (typeof candidate === \"string\" && candidate.trim() !== \"\") {\n      refs.add(candidate.trim());\n      continue;\n    }\n    if (Array.isArray(candidate)) {\n      for (const item of candidate) {\n        if (typeof item === \"string\" && item.trim() !== \"\") refs.add(item.trim());\n        if (item && typeof item === \"object\") {\n          const id = (item as { eventId?: unknown }).eventId;\n          if (typeof id === \"string\" && id.trim() !== \"\") refs.add(id.trim());\n        }\n      }\n      continue;\n    }\n    if (candidate && typeof candidate === \"object\") {\n      const obj = candidate as { eventId?: unknown; eventIds?: unknown };\n      if (typeof obj.eventId === \"string\" && obj.eventId.trim() !== \"\") {\n        refs.add(obj.eventId.trim());\n      }\n      if (Array.isArray(obj.eventIds)) {\n        for (const id of obj.eventIds) {\n          if (typeof id === \"string\" && id.trim() !== \"\") refs.add(id.trim());\n        }\n      }\n    }\n  }\n  return refs;\n}\n\nfunction llmReferencesTool(\n  llm: PersistedInspectEvent,\n  toolEvent: PersistedInspectEvent,\n  requireExplicit: boolean,\n): boolean {\n  if (!requireExplicit) {\n    return eventTime(llm) >= eventTime(toolEvent);\n  }\n  const refs = collectExplicitReferences(llm);\n  if (refs.has(toolEvent.eventId)) return true;\n  const toolCallId = workflowFor(toolEvent).toolCallId;\n  if (toolCallId && refs.has(toolCallId)) return true;\n  return false;\n}\n\nfunction attemptIdOf(event: PersistedInspectEvent): string | undefined {\n  const value = workflowFor(event).attemptId;\n  return typeof value === \"string\" && value.trim() !== \"\" ? value.trim() : undefined;\n}\n\nfunction hasDuplicateAttemptIds(members: readonly PersistedInspectEvent[]): boolean {\n  const seen = new Set<string>();\n  for (const event of members) {\n    const id = attemptIdOf(event);\n    if (!id) continue;\n    if (seen.has(id)) return true;\n    seen.add(id);\n  }\n  return false;\n}\n\nfunction findRetryTarget(\n  members: readonly PersistedInspectEvent[],\n  retryOf: string,\n): PersistedInspectEvent | undefined {\n  return members.find(\n    (candidate) =>\n      candidate.eventId === retryOf ||\n      attemptIdOf(candidate) === retryOf ||\n      workflowFor(candidate).operationId === retryOf,\n  );\n}\n\n/**\n * Group tool attempts by explicit operation identity.\n * Missing operationId does not merge unrelated calls: each unlinked event is\n * its own group unless joined via retryOf to another attempt in the same tool set.\n */\nfunction groupToolAttempts(\n  events: readonly PersistedInspectEvent[],\n  toolName: string,\n): Map<string, PersistedInspectEvent[]> {\n  const members = events.filter(\n    (event) => event.kind === \"TOOL\" && resolveCanonicalToolName(event) === toolName,\n  );\n  const parent = new Map<string, string>();\n  const ensure = (id: string): string => {\n    if (!parent.has(id)) parent.set(id, id);\n    return id;\n  };\n  const find = (id: string): string => {\n    ensure(id);\n    let cur = id;\n    while (parent.get(cur) !== cur) {\n      cur = parent.get(cur)!;\n    }\n    // path compression\n    let walk = id;\n    while (parent.get(walk) !== cur) {\n      const next = parent.get(walk)!;\n      parent.set(walk, cur);\n      walk = next;\n    }\n    return cur;\n  };\n  const union = (a: string, b: string): void => {\n    const ra = find(a);\n    const rb = find(b);\n    if (ra !== rb) parent.set(ra, rb);\n  };\n\n  const nodeId = (event: PersistedInspectEvent): string => {\n    const operationId = workflowFor(event).operationId;\n    if (typeof operationId === \"string\" && operationId.trim() !== \"\") {\n      return `op:${operationId.trim()}`;\n    }\n    return `event:${event.eventId}`;\n  };\n\n  for (const event of members) {\n    ensure(nodeId(event));\n  }\n\n  for (const event of members) {\n    const retryOf = workflowFor(event).retryOf;\n    if (typeof retryOf !== \"string\" || retryOf.trim() === \"\") continue;\n    const target = findRetryTarget(members, retryOf.trim());\n    if (target) {\n      union(nodeId(event), nodeId(target));\n    }\n  }\n\n  // Merge events that share the same operationId label (already same node id).\n  const groups = new Map<string, PersistedInspectEvent[]>();\n  for (const event of members) {\n    const key = find(nodeId(event));\n    const list = groups.get(key) ?? [];\n    list.push(event);\n    groups.set(key, list);\n  }\n  return groups;\n}\n\nfunction latestAttempt(ordered: readonly PersistedInspectEvent[]): PersistedInspectEvent | undefined {\n  if (ordered.length === 0) return undefined;\n  return ordered[ordered.length - 1];\n}\n\n/**\n * Evaluate additive `retry.operations[]` recovery oracles.\n */\nexport function evaluateRecoveryOperations(\n  events: readonly PersistedInspectEvent[],\n  operations: readonly TraceContractRecoveryOperation[],\n): TraceCheckFinding[] {\n  const findings: TraceCheckFinding[] = [];\n  const llmEvents = events.filter((event) => event.kind === \"LLM\");\n\n  for (const operation of operations) {\n    const sideEffectClass = operation.sideEffectClass ?? \"read\";\n    const groups = groupToolAttempts(events, operation.tool);\n\n    if (groups.size === 0) {\n      if (operation.requireTerminalSuccess) {\n        findings.push(\n          fail(\n            \"contract.retry.operations.terminal-success\",\n            `Recovery operation for tool ${operation.tool} requires a terminal success but no attempts were observed.`,\n            [],\n            \"ok\",\n            \"missing\",\n          ),\n        );\n      }\n      continue;\n    }\n\n    for (const [operationKey, members] of groups) {\n      const ordered = sortByTime(members);\n\n      if (hasDuplicateAttemptIds(members)) {\n        findings.push(\n          fail(\n            \"contract.retry.operations.duplicate-attempt-id\",\n            `Tool ${operation.tool} operation ${operationKey} has duplicate attemptId values.`,\n            members.slice(0, 4).map(eventEvidence),\n            \"unique attemptId\",\n            \"duplicate\",\n          ),\n        );\n      }\n\n      if (operation.maxAttempts !== undefined) {\n        const count = countOperationAttempts(members);\n        if (count > operation.maxAttempts) {\n          findings.push(\n            fail(\n              \"contract.retry.operations.max-attempts\",\n              `Tool ${operation.tool} operation ${operationKey} exceeded maxAttempts ${operation.maxAttempts}.`,\n              members.slice(0, 4).map(eventEvidence),\n              operation.maxAttempts,\n              count,\n            ),\n          );\n        }\n      }\n\n      if (sideEffectClass === \"write\") {\n        for (const event of ordered) {\n          if (isUnevaluableWriteCompletion(event)) {\n            findings.push(\n              fail(\n                \"contract.retry.operations.write-completion-unevaluable\",\n                `Write tool ${operation.tool} has timeout/unknown/running completion that cannot be verified as an authoritative write result.`,\n                [eventEvidence(event)],\n                \"authoritative write completion observation\",\n                {\n                  code: \"AI_CHECK_RECOVERY_WRITE_COMPLETION_UNAVAILABLE\",\n                  status: event.status,\n                },\n              ),\n            );\n          }\n        }\n      }\n\n      const prior: PersistedInspectEvent[] = [];\n      let sawEarlierError = false;\n      let sawLaterOkAfterError = false;\n      let lastOk: PersistedInspectEvent | undefined;\n      let identityUnavailable = false;\n\n      for (const event of ordered) {\n        const classification = classifyRetryAttempt(event, prior, members);\n        if (classification.kind === \"unknown\") {\n          identityUnavailable = true;\n          findings.push(\n            fail(\n              \"contract.retry.operations.attempt-identity\",\n              `Tool ${operation.tool} operation ${operationKey} has ambiguous attempt identity (${classification.reason}).`,\n              [eventEvidence(event)],\n              \"explicit operationId/attemptId/retryOf chronology\",\n              { code: \"AI_CHECK_RECOVERY_ATTEMPT_IDENTITY_UNAVAILABLE\", reason: classification.reason },\n            ),\n          );\n        }\n\n        const isRetry = classification.kind === \"retry\";\n\n        if (isRetry && operation.requireFailureBeforeRetry) {\n          const earlierFailure = prior.some(\n            (candidate) =>\n              candidate.status === \"error\" &&\n              eventTime(candidate) !== \"\" &&\n              eventTime(event) !== \"\" &&\n              eventTime(candidate) < eventTime(event),\n          );\n          if (!earlierFailure) {\n            findings.push(\n              fail(\n                \"contract.retry.operations.failure-before-retry\",\n                `Retry of tool ${operation.tool} appeared without an earlier failure in the same operation.`,\n                [eventEvidence(event)],\n                \"earlier error attempt\",\n                { operationKey },\n              ),\n            );\n          }\n        }\n\n        if (isRetry && operation.retryableErrors?.codes && operation.retryableErrors.codes.length > 0) {\n          const allowed = new Set(operation.retryableErrors.codes);\n          const priorErrors = prior.filter((candidate) => candidate.status === \"error\");\n          const lastError = priorErrors[priorErrors.length - 1];\n          if (lastError) {\n            const code = errorCodeOf(lastError);\n            if (!code || !allowed.has(code)) {\n              findings.push(\n                fail(\n                  \"contract.retry.operations.retryable-error\",\n                  `Retry of tool ${operation.tool} followed a non-retryable or missing error code.`,\n                  [eventEvidence(event), eventEvidence(lastError)],\n                  [...allowed],\n                  code ?? null,\n                ),\n              );\n            }\n          } else {\n            findings.push(\n              fail(\n                \"contract.retry.operations.retryable-error\",\n                `Retry of tool ${operation.tool} has no prior error code evidence.`,\n                [eventEvidence(event)],\n                [...allowed],\n                null,\n              ),\n            );\n          }\n        }\n\n        if (\n          isRetry &&\n          (operation.requireSameArguments === true ||\n            operation.requireSameArguments === \"structured-or-digest\")\n        ) {\n          const baseline = prior[0] ?? prior[prior.length - 1];\n          if (baseline) {\n            const comparison = sameArguments(baseline, event);\n            if (!comparison.ok) {\n              findings.push(\n                fail(\n                  \"contract.retry.operations.same-arguments\",\n                  comparison.reason,\n                  [eventEvidence(baseline), eventEvidence(event)],\n                  \"matching structured args or digests\",\n                  { code: comparison.code },\n                ),\n              );\n            }\n          } else {\n            findings.push(\n              fail(\n                \"contract.retry.operations.same-arguments\",\n                \"Structured or digest argument evidence unavailable for same-arguments check.\",\n                [eventEvidence(event)],\n                \"matching structured args or digests\",\n                { code: \"AI_CHECK_RECOVERY_ARGUMENT_EVIDENCE_UNAVAILABLE\" },\n              ),\n            );\n          }\n        }\n\n        if (event.status === \"error\") {\n          sawEarlierError = true;\n        } else if (event.status === \"ok\" && sawEarlierError) {\n          sawLaterOkAfterError = true;\n        }\n        if (event.status === \"ok\") {\n          lastOk = event;\n        }\n        prior.push(event);\n      }\n\n      const latest = latestAttempt(ordered);\n      if (operation.requireTerminalSuccess) {\n        if (!latest || latest.status !== \"ok\") {\n          findings.push(\n            fail(\n              \"contract.retry.operations.terminal-success\",\n              `Tool ${operation.tool} operation ${operationKey} does not terminate with ok on the latest attempt.`,\n              ordered.slice(0, 4).map(eventEvidence),\n              \"latest attempt ok\",\n              latest?.status ?? \"missing\",\n            ),\n          );\n        }\n      }\n\n      if (operation.requireRecoveredFailureVisible) {\n        const latestOk = latest?.status === \"ok\";\n        // Only require visible failure when a multi-attempt recovery chain exists.\n        if (ordered.length > 1 && latestOk && !sawLaterOkAfterError) {\n          findings.push(\n            fail(\n              \"contract.retry.operations.recovered-failure-visible\",\n              `Tool ${operation.tool} operation ${operationKey} does not show an earlier error before later success.`,\n              ordered.slice(0, 4).map(eventEvidence),\n              \"earlier error then later ok\",\n              { sawEarlierError },\n            ),\n          );\n        }\n      }\n\n      const dependency = operation.successfulResultDependency;\n      if (dependency?.consumerKind === \"LLM\") {\n        const successForDependency =\n          latest?.status === \"ok\" ? latest : identityUnavailable ? undefined : lastOk;\n        if (successForDependency) {\n          if (\n            sideEffectClass === \"write\" &&\n            isUnevaluableWriteCompletion(successForDependency)\n          ) {\n            findings.push(\n              fail(\n                \"contract.retry.operations.successful-result-dependency\",\n                `Successful ${operation.tool} result dependency is unevaluable because write completion evidence is unavailable.`,\n                [eventEvidence(successForDependency)],\n                \"LLM reference to successful tool event\",\n                { code: \"AI_CHECK_RECOVERY_WRITE_COMPLETION_UNAVAILABLE\" },\n              ),\n            );\n          } else {\n            const requireExplicit = dependency.requireExplicitReference === true;\n            const referenced = llmEvents.some((llmEvent) =>\n              llmReferencesTool(llmEvent, successForDependency, requireExplicit),\n            );\n            if (!referenced) {\n              findings.push(\n                fail(\n                  \"contract.retry.operations.successful-result-dependency\",\n                  requireExplicit\n                    ? `Successful ${operation.tool} result is not explicitly referenced by a later LLM event.`\n                    : `Successful ${operation.tool} result has no later LLM consumer.`,\n                  [eventEvidence(successForDependency)],\n                  \"LLM reference to successful tool event\",\n                  { code: \"AI_CHECK_RECOVERY_RESULT_DEPENDENCY_MISSING\" },\n                ),\n              );\n            }\n          }\n        }\n      }\n    }\n  }\n\n  return findings;\n}\n","import type {\n  TraceCheckEvidence,\n  TraceCheckFinding,\n  TraceCheckInput,\n  TraceCheckResult,\n  TraceCheckRule,\n} from \"./index.js\";\nimport {\n  createLlmUsageRule,\n  createObservedOutcomeRule,\n  createRunDurationRule,\n  createRunStatusRule,\n  createStepOrderingRule,\n  createStructureIncompleteRule,\n  createToolOrderingRule,\n  createToolUsageRule,\n  runTraceChecks,\n} from \"./index.js\";\nimport {\n  resolveTraceContractScope,\n  type TraceContractScope,\n} from \"./contract-scope.js\";\nimport { resolveCanonicalToolName } from \"./logical-events.js\";\nimport {\n  evaluateControlRules,\n  type TraceContractControlRules,\n} from \"./control-rules.js\";\nimport { evaluateRecoveryOperations } from \"./recovery-operations.js\";\nimport {\n  evaluateRetrySafetyRules,\n  type TraceContractRetryRules,\n} from \"./retry-safety.js\";\nimport {\n  evaluateToolArgumentValue,\n  extractToolArgumentPayload,\n  type ToolArgumentCheck,\n} from \"./tool-arguments.js\";\nimport {\n  OBSERVED_OUTCOME_METHODS,\n  extractOutcomesFromPersistedEvents,\n  type ObservedOutcome,\n} from \"../outcomes/index.js\";\nimport type { TraceReadResult } from \"../readers/index.js\";\n\nexport type { TraceContractScope } from \"./contract-scope.js\";\nexport { resolveTraceContractScope, workflowMetadataForRun } from \"./contract-scope.js\";\nexport type {\n  ControlStage,\n  TraceContractControlRules,\n} from \"./control-rules.js\";\nexport type {\n  RecoverySameArgumentsMode,\n  RecoverySideEffectClass,\n  TraceContractRecoveryOperation,\n  TraceContractRecoveryRetryableErrors,\n  TraceContractRecoverySuccessfulResultDependency,\n  TraceContractRetryRules,\n} from \"./retry-safety.js\";\nexport type {\n  ToolArgumentCheck,\n  ToolArgumentOccurrence,\n  ToolArgumentOperator,\n} from \"./tool-arguments.js\";\nexport {\n  evaluateToolArgumentValue,\n  extractToolArgumentPayload,\n  resolveJsonPointer,\n} from \"./tool-arguments.js\";\n\nfunction contractFailFinding(\n  ruleId: string,\n  message: string,\n  evidence: readonly TraceCheckEvidence[],\n  expected?: unknown,\n  actual?: unknown,\n): TraceCheckFinding {\n  return {\n    ruleId,\n    severity: \"error\",\n    status: \"fail\",\n    message,\n    ...(expected !== undefined ? { expected } : {}),\n    ...(actual !== undefined ? { actual } : {}),\n    evidence: [...evidence],\n  };\n}\n\n/**\n * @experimental Typed trace contract input. Evolves during v6.5.x.\n */\nexport interface TraceContractRunRules {\n  requireCompleted?: boolean;\n  allowedStatuses?: string[];\n  maxDurationMs?: number;\n}\n\nexport interface TraceContractToolRules {\n  /**\n   * Unconditional tool presence invariant. Every named tool must appear at least\n   * once. Do not use for cache-hit or alternate-path shortcuts — prefer\n   * `alternatives.anyOf` or `observations.required` when a legitimate path may\n   * skip the tool.\n   *\n   * @see docs/TRACE-CONTRACTS.md\n   */\n  required?: string[];\n  /** Alias of `required` (TraceContract v2 normalization). */\n  requiredTools?: string[];\n  forbidden?: string[];\n  /** Alias of `forbidden`. */\n  forbiddenTools?: string[];\n  allowed?: string[];\n  maxCalls?: number;\n  /**\n   * Required tool order expanded into adjacent pairs.\n   *\n   * `[A, B, C]` expands to “A before B” and “B before C”, each comparing the\n   * selected `requiredOrderMode` to every pair. Unlisted intermediate tools\n   * are allowed.\n   *\n   * TraceContract `requiredOrder` **implies presence**: every listed name is\n   * added to the effective required-tool set. Low-level `createToolOrderingRule`\n   * alone may still pass vacuously when an endpoint is missing.\n   *\n   * The default `first-occurrence` mode preserves first-occurrence encounter\n   * ordering; overlapping intervals emit a non-failing warning. `happens-before`\n   * requires the first before event to finish before the first after event starts.\n   * `all-occurrences` applies that causal boundary to every occurrence.\n   *\n   * @see docs/TRACE-CONTRACTS.md\n   * @beta Available through `agent-inspect/checks`. Additive changes may ship\n   * in minor releases; breaking changes require a future major.\n   */\n  requiredOrder?: string[];\n  /**\n   * Ordering semantics applied to every adjacent pair in `requiredOrder`.\n   * Causal modes fail closed when a required interval boundary is unavailable.\n   *\n   * @defaultValue `\"first-occurrence\"`\n   * @beta Available through `agent-inspect/checks`.\n   */\n  requiredOrderMode?: \"first-occurrence\" | \"happens-before\" | \"all-occurrences\";\n  /**\n   * Bounded structured tool-argument checks (JSON Pointer + limited operators).\n   *\n   * Missing structured evidence fails closed as unevaluable (not pass).\n   * Findings never embed full actual inputs.\n   *\n   * @experimental Additive in 6.23.\n   */\n  arguments?: ToolArgumentCheck[];\n  /**\n   * Default occurrence mode for `orderRules` when a rule omits `occurrenceMode`.\n   *\n   * @experimental Additive in 6.23.\n   */\n  defaultOccurrenceMode?: \"first-occurrence\" | \"happens-before\" | \"all-occurrences\";\n  /**\n   * Mixed per-pair ordering rules (additive alongside `requiredOrder`).\n   *\n   * @experimental Additive in 6.23.\n   */\n  orderRules?: Array<{\n    before: string;\n    after: string;\n    occurrenceMode?: \"first-occurrence\" | \"happens-before\" | \"all-occurrences\";\n    requireEndpoints?: boolean;\n  }>;\n}\n\nexport interface TraceContractLlmRules {\n  maxCalls?: number;\n  maxTotalTokens?: number;\n  allowedModels?: string[];\n}\n\n/**\n * Explicit TOOL or LLM step endpoint for typed cross-kind ordering.\n *\n * @experimental Additive in 6.31.\n */\nexport type TraceContractStepKind = \"TOOL\" | \"LLM\";\n\n/**\n * Named step endpoint with an explicit event kind.\n *\n * @experimental Additive in 6.31.\n */\nexport interface TraceContractStepRef {\n  kind: TraceContractStepKind;\n  name: string;\n}\n\n/**\n * One typed before/after ordering relation across TOOL and/or LLM steps.\n *\n * Unlike `tools.requiredOrder` / `orderRules`, endpoints are kind-qualified so\n * an LLM named `generate_answer` does not satisfy a TOOL endpoint (and vice versa).\n *\n * @experimental Additive in 6.31.\n */\nexport interface TraceContractStepOrderRelation {\n  before: TraceContractStepRef;\n  after: TraceContractStepRef;\n  /**\n   * Ordering semantics for this pair.\n   *\n   * @defaultValue `\"first-occurrence\"`\n   */\n  mode?: \"first-occurrence\" | \"happens-before\" | \"all-occurrences\";\n  /**\n   * When true (default), missing endpoints of the declared kind fail.\n   * Wrong-kind same-name events do not satisfy the endpoint.\n   *\n   * @defaultValue `true`\n   */\n  requireEndpoints?: boolean;\n}\n\n/**\n * Cross-kind step ordering (TOOL ↔ LLM). Does not change TOOL-only\n * `tools.requiredOrder` / `orderRules` semantics.\n *\n * @experimental Additive in 6.31.\n */\nexport interface TraceContractStepRules {\n  orderRelations?: TraceContractStepOrderRelation[];\n}\n\n/**\n * Structural provenance requirements for named observed outcomes (#321).\n *\n * These checks prove method/evidence linkage was recorded. They do **not**\n * prove the claim is semantically true, authorized, complete, or externally\n * trusted.\n *\n * @experimental\n */\nexport interface TraceContractObservationProvenance {\n  /** Require a non-empty method from the bounded ObservedOutcomeMethod vocabulary. */\n  method?: boolean;\n  /**\n   * Require bounded evidence references. Supported shapes:\n   * `string` event id, `{ eventId }`, or `{ eventIds: string[] }` (max 16 ids).\n   */\n  evidence?: boolean;\n  /** When true with evidence, each referenced event id must exist in the same run. */\n  sameRunEventReference?: boolean;\n}\n\nexport interface TraceContractObservationRules {\n  required?: string[];\n  failOn?: Array<\"failed\" | \"unknown\" | \"skipped\">;\n  /**\n   * Structural provenance gates for `required` observation names.\n   *\n   * @experimental\n   */\n  requireProvenance?: TraceContractObservationProvenance;\n}\n\n/**\n * One deterministic alternate path. Branch contracts are one level only —\n * nested `alternatives` are rejected.\n *\n * @experimental\n */\nexport interface TraceContractAlternativeBranch {\n  /** Unique branch id within `alternatives.anyOf`. */\n  id: string;\n  description?: string;\n  /** Branch body: run/tools/llm/observations only (no nested alternatives). */\n  contract: TraceContractBody;\n}\n\n/**\n * Bounded alternative valid paths for legitimate shortcuts (GitHub #309).\n *\n * @experimental\n */\nexport interface TraceContractAlternatives {\n  /**\n   * One level of named branches. The overall contract passes when the base\n   * rules pass and **at least one** complete branch passes.\n   */\n  anyOf: TraceContractAlternativeBranch[];\n}\n\n/** Contract body without alternatives (base or branch). */\nexport type TraceContractBody = {\n  run?: TraceContractRunRules;\n  tools?: TraceContractToolRules;\n  llm?: TraceContractLlmRules;\n  /**\n   * Typed cross-kind step ordering (TOOL / LLM endpoints).\n   *\n   * @experimental Additive in 6.31.\n   */\n  steps?: TraceContractStepRules;\n  observations?: TraceContractObservationRules;\n  /**\n   * Declared-versus-enforced control invariants.\n   *\n   * @experimental Additive in 6.23.\n   */\n  controls?: TraceContractControlRules;\n  /**\n   * Retry / side-effect safety using explicit attempt identity.\n   * Additive `retry.operations[]` recovery oracles land in 6.27.\n   *\n   * @experimental Additive in 6.23; operations in 6.27.\n   */\n  retry?: TraceContractRetryRules;\n};\n\nexport interface TraceContractInput extends TraceContractBody {\n  /**\n   * Optional actor/run projection applied before evaluation (#320).\n   *\n   * @experimental\n   */\n  scope?: TraceContractScope;\n  alternatives?: TraceContractAlternatives;\n}\n\nexport interface TraceContract extends TraceContractBody {\n  /**\n   * Optional actor/run projection applied before evaluation (#320).\n   *\n   * @experimental\n   */\n  scope?: TraceContractScope;\n  alternatives?: TraceContractAlternatives;\n}\n\n/**\n * Lint diagnostic for brittle or invalid TraceContract shapes.\n *\n * @experimental\n */\nexport interface TraceContractLintDiagnostic {\n  code: string;\n  severity: \"error\" | \"warning\" | \"info\";\n  message: string;\n  path?: string;\n}\n\nconst ALLOWED_STATUS_ALIASES: Record<string, \"ok\" | \"error\" | \"running\"> = {\n  ok: \"ok\",\n  error: \"error\",\n  running: \"running\",\n  success: \"ok\",\n  failed: \"error\",\n};\n\n/**\n * Map a contract `allowedStatuses` entry to a canonical run status.\n * Unknown values (including typos like `succes`) return `undefined` — they must\n * never silently normalize to permissive `error`.\n */\nexport function parseAllowedStatus(status: string): \"ok\" | \"error\" | \"running\" | undefined {\n  return ALLOWED_STATUS_ALIASES[status];\n}\n\nfunction normalizeStatus(status: string): \"ok\" | \"error\" | \"running\" {\n  const parsed = parseAllowedStatus(status);\n  if (parsed === undefined) {\n    throw new TypeError(\n      `Unknown run status ${JSON.stringify(status)}. Allowed: ok, error, running (aliases: success, failed).`,\n    );\n  }\n  return parsed;\n}\n\nfunction validateAllowedStatusesShape(\n  allowedStatuses: string[] | undefined,\n  pathPrefix = \"run.allowedStatuses\",\n): TraceContractLintDiagnostic[] {\n  if (!allowedStatuses?.length) return [];\n  const out: TraceContractLintDiagnostic[] = [];\n  for (let i = 0; i < allowedStatuses.length; i++) {\n    const status = allowedStatuses[i]!;\n    if (parseAllowedStatus(status) === undefined) {\n      out.push({\n        code: \"contract.run.allowedStatuses.unknown\",\n        severity: \"error\",\n        message: `${pathPrefix}[${i}] has unknown status ${JSON.stringify(status)}. Allowed: ok, error, running (aliases: success, failed).`,\n        path: `${pathPrefix}[${i}]`,\n      });\n    }\n  }\n  return out;\n}\n\nfunction cloneBody(body: TraceContractBody): TraceContractBody {\n  return {\n    ...(body.run ? { run: { ...body.run } } : {}),\n    ...(body.tools\n      ? {\n          tools: {\n            ...body.tools,\n            ...(body.tools.arguments ? { arguments: body.tools.arguments.map((item) => ({ ...item })) } : {}),\n            ...(body.tools.orderRules\n              ? { orderRules: body.tools.orderRules.map((item) => ({ ...item })) }\n              : {}),\n          },\n        }\n      : {}),\n    ...(body.llm ? { llm: { ...body.llm } } : {}),\n    ...(body.steps\n      ? {\n          steps: {\n            ...(body.steps.orderRelations\n              ? {\n                  orderRelations: body.steps.orderRelations.map((item) => ({\n                    ...item,\n                    before: { ...item.before },\n                    after: { ...item.after },\n                  })),\n                }\n              : {}),\n          },\n        }\n      : {}),\n    ...(body.observations\n      ? {\n          observations: {\n            ...body.observations,\n            ...(body.observations.requireProvenance\n              ? { requireProvenance: { ...body.observations.requireProvenance } }\n              : {}),\n          },\n        }\n      : {}),\n    ...(body.controls\n      ? {\n          controls: {\n            ...body.controls,\n            ...(body.controls.declaredTools\n              ? { declaredTools: [...body.controls.declaredTools] }\n              : {}),\n            ...(body.controls.enforcedTools\n              ? { enforcedTools: [...body.controls.enforcedTools] }\n              : {}),\n            ...(body.controls.requiredStages\n              ? { requiredStages: body.controls.requiredStages.map((item) => ({ ...item })) }\n              : {}),\n          },\n        }\n      : {}),\n    ...(body.retry\n      ? {\n          retry: {\n            ...body.retry,\n            ...(body.retry.nonIdempotentTools\n              ? { nonIdempotentTools: [...body.retry.nonIdempotentTools] }\n              : {}),\n            ...(body.retry.operations\n              ? {\n                  operations: body.retry.operations.map((operation) => ({\n                    ...operation,\n                    ...(operation.retryableErrors\n                      ? {\n                          retryableErrors: {\n                            ...operation.retryableErrors,\n                            ...(operation.retryableErrors.codes\n                              ? { codes: [...operation.retryableErrors.codes] }\n                              : {}),\n                          },\n                        }\n                      : {}),\n                    ...(operation.successfulResultDependency\n                      ? {\n                          successfulResultDependency: {\n                            ...operation.successfulResultDependency,\n                          },\n                        }\n                      : {}),\n                  })),\n                }\n              : {}),\n          },\n        }\n      : {}),\n  };\n}\n\nfunction bodyHasRules(body: TraceContractBody): boolean {\n  return (\n    body.run !== undefined ||\n    body.tools !== undefined ||\n    body.llm !== undefined ||\n    body.steps !== undefined ||\n    body.observations !== undefined ||\n    body.controls !== undefined ||\n    body.retry !== undefined\n  );\n}\n\nconst MAX_EVIDENCE_EVENT_IDS = 16;\nconst METHOD_VOCABULARY = new Set<string>(OBSERVED_OUTCOME_METHODS);\n\ntype EvidenceRefParse =\n  | { status: \"missing\" }\n  | { status: \"invalid\"; reason: string }\n  | { status: \"ok\"; eventIds: string[] };\n\nfunction parseEvidenceEventIds(evidence: unknown): EvidenceRefParse {\n  if (evidence === undefined || evidence === null) {\n    return { status: \"missing\" };\n  }\n  if (typeof evidence === \"string\") {\n    const trimmed = evidence.trim();\n    if (trimmed === \"\") {\n      return { status: \"invalid\", reason: \"empty evidence string\" };\n    }\n    return { status: \"ok\", eventIds: [trimmed] };\n  }\n  if (typeof evidence !== \"object\" || Array.isArray(evidence)) {\n    return {\n      status: \"invalid\",\n      reason: \"evidence must be a string event id or { eventId } / { eventIds }\",\n    };\n  }\n  const record = evidence as Record<string, unknown>;\n  if (typeof record.eventId === \"string\") {\n    const trimmed = record.eventId.trim();\n    if (trimmed === \"\") {\n      return { status: \"invalid\", reason: \"empty evidence.eventId\" };\n    }\n    return { status: \"ok\", eventIds: [trimmed] };\n  }\n  if (Array.isArray(record.eventIds)) {\n    if (record.eventIds.length === 0) {\n      return { status: \"invalid\", reason: \"empty evidence.eventIds\" };\n    }\n    if (record.eventIds.length > MAX_EVIDENCE_EVENT_IDS) {\n      return {\n        status: \"invalid\",\n        reason: `evidence.eventIds exceeds bound of ${MAX_EVIDENCE_EVENT_IDS}`,\n      };\n    }\n    const eventIds: string[] = [];\n    for (const item of record.eventIds) {\n      if (typeof item !== \"string\" || item.trim() === \"\") {\n        return { status: \"invalid\", reason: \"evidence.eventIds contains a non-string id\" };\n      }\n      eventIds.push(item.trim());\n    }\n    return { status: \"ok\", eventIds };\n  }\n  return {\n    status: \"invalid\",\n    reason: \"evidence must include eventId or eventIds\",\n  };\n}\n\nfunction provenanceFindingsForOutcome(\n  outcome: ObservedOutcome,\n  requireProvenance: TraceContractObservationProvenance,\n  knownEventIds: ReadonlySet<string>,\n): TraceCheckFinding[] {\n  const findings: TraceCheckFinding[] = [];\n  const evidenceBase: TraceCheckEvidence[] = [\n    {\n      runId: outcome.runId,\n      eventId: outcome.outcomeId,\n      kind: \"OUTCOME\",\n      name: outcome.name,\n      path: `outcome.${outcome.name}`,\n    },\n  ];\n\n  if (requireProvenance.method) {\n    if (outcome.method === undefined || outcome.method.trim() === \"\") {\n      findings.push(\n        contractFailFinding(\n          \"contract.observation.provenance.method\",\n          `Observation ${outcome.name} is missing a structural method.`,\n          evidenceBase,\n          { method: true },\n          { name: outcome.name, method: outcome.method ?? null },\n        ),\n      );\n    } else if (!METHOD_VOCABULARY.has(outcome.method)) {\n      findings.push(\n        contractFailFinding(\n          \"contract.observation.provenance.method\",\n          `Observation ${outcome.name} method ${outcome.method} is outside the bounded ObservedOutcomeMethod vocabulary.`,\n          evidenceBase,\n          { methodVocabulary: [...OBSERVED_OUTCOME_METHODS] },\n          { name: outcome.name, method: outcome.method },\n        ),\n      );\n    }\n  }\n\n  if (requireProvenance.evidence || requireProvenance.sameRunEventReference) {\n    const parsed = parseEvidenceEventIds(outcome.evidence);\n    if (parsed.status === \"missing\") {\n      findings.push(\n        contractFailFinding(\n          \"contract.observation.provenance.evidence\",\n          `Observation ${outcome.name} is missing bounded evidence references.`,\n          evidenceBase,\n          { evidence: true },\n          { name: outcome.name, evidence: null },\n        ),\n      );\n    } else if (parsed.status === \"invalid\") {\n      findings.push(\n        contractFailFinding(\n          \"contract.observation.provenance.evidence\",\n          `Observation ${outcome.name} evidence is not a bounded event reference (${parsed.reason}).`,\n          evidenceBase,\n          { evidence: true },\n          { name: outcome.name, reason: parsed.reason },\n        ),\n      );\n    } else if (requireProvenance.sameRunEventReference) {\n      const missing = parsed.eventIds.filter((eventId) => !knownEventIds.has(eventId));\n      if (missing.length > 0) {\n        findings.push(\n          contractFailFinding(\n            \"contract.observation.provenance.same-run\",\n            `Observation ${outcome.name} references event ids missing from the same run: ${missing.join(\", \")}.`,\n            evidenceBase,\n            { sameRunEventReference: true, eventIds: parsed.eventIds },\n            { name: outcome.name, missing },\n          ),\n        );\n      }\n    }\n  }\n\n  return findings;\n}\n\nfunction contractToRules(contract: TraceContractBody): TraceCheckRule[] {\n  const rules: TraceCheckRule[] = [];\n\n  const allowedStatuses = contract.run?.allowedStatuses ?? [];\n  if (allowedStatuses.length === 1) {\n    rules.push(\n      createRunStatusRule({\n        expected: normalizeStatus(allowedStatuses[0]!),\n        allowIncomplete: contract.run?.requireCompleted === false,\n      }),\n    );\n  } else if (allowedStatuses.length > 1) {\n    const expected = [...new Set(allowedStatuses.map(normalizeStatus))];\n    const allowIncomplete = contract.run?.requireCompleted === false;\n    rules.push({\n      id: \"contract.run.allowedStatuses\",\n      category: \"run\",\n      defaultSeverity: \"error\",\n      evaluate(context) {\n        const findings: TraceCheckFinding[] = [];\n        const actual = context.selectedRun?.status ?? \"unknown\";\n        if (!expected.includes(actual as \"ok\" | \"error\" | \"running\")) {\n          findings.push(\n            contractFailFinding(\n              \"contract.run.allowedStatuses\",\n              `Run status ${actual} is not one of the allowed statuses: ${expected.join(\", \")}.`,\n              context.selectedRun\n                ? [\n                    {\n                      runId: context.selectedRun.runId,\n                      kind: \"RUN\",\n                      name: context.selectedRun.name,\n                      status: context.selectedRun.status,\n                    },\n                  ]\n                : [],\n              expected,\n              actual,\n            ),\n          );\n        }\n        if (!allowIncomplete) {\n          const running = (context.logicalEvents ?? context.events).filter(\n            (event) => event.status === \"running\",\n          );\n          if (running.length > 0) {\n            findings.push(\n              contractFailFinding(\n                \"contract.run.allowedStatuses\",\n                \"Run contains incomplete running events.\",\n                running.map((event) => ({\n                  runId: event.runId,\n                  eventId: event.eventId,\n                  kind: event.kind,\n                  name: event.name,\n                  status: event.status,\n                })),\n                \"no running events\",\n                running.length,\n              ),\n            );\n          }\n        }\n        return findings;\n      },\n    });\n  } else if (contract.run?.requireCompleted !== false) {\n    rules.push(createRunStatusRule({ allowIncomplete: false }));\n  }\n\n  if (contract.run?.maxDurationMs !== undefined) {\n    rules.push(createRunDurationRule({ maxDurationMs: contract.run.maxDurationMs }));\n  }\n\n  if (contract.run?.requireCompleted === true) {\n    rules.push(createStructureIncompleteRule({ requireEndedAtForStarted: true }));\n  }\n\n  if (contract.tools) {\n    const order = contract.tools.requiredOrder ?? [];\n    const requiredOrderMode = contract.tools.requiredOrderMode ?? \"first-occurrence\";\n    const orderRules = contract.tools.orderRules ?? [];\n    const endpointRequired = orderRules\n      .filter((rule) => rule.requireEndpoints !== false)\n      .flatMap((rule) => [rule.before, rule.after]);\n    const required = [\n      ...new Set([\n        ...(contract.tools.required ?? []),\n        ...(contract.tools.requiredTools ?? []),\n        ...order,\n        ...endpointRequired,\n      ]),\n    ];\n    const forbidden = [\n      ...(contract.tools.forbidden ?? []),\n      ...(contract.tools.forbiddenTools ?? []),\n    ];\n    rules.push(\n      createToolUsageRule({\n        ...(required.length > 0 ? { required } : {}),\n        ...(forbidden.length > 0 ? { forbidden } : {}),\n        ...(contract.tools.allowed ? { allowed: contract.tools.allowed } : {}),\n        ...(contract.tools.maxCalls !== undefined ? { maxCount: contract.tools.maxCalls } : {}),\n      }),\n    );\n    for (let i = 0; i < order.length - 1; i += 1) {\n      rules.push(\n        createToolOrderingRule({\n          before: order[i]!,\n          after: order[i + 1]!,\n          id: `contract.tool.order.${i}`,\n          mode: requiredOrderMode,\n        }),\n      );\n    }\n    const defaultOccurrenceMode =\n      contract.tools.defaultOccurrenceMode ?? requiredOrderMode;\n    for (const [index, rule] of orderRules.entries()) {\n      rules.push(\n        createToolOrderingRule({\n          before: rule.before,\n          after: rule.after,\n          id: `contract.tool.orderRule.${index}`,\n          mode: rule.occurrenceMode ?? defaultOccurrenceMode,\n        }),\n      );\n    }\n    const argumentChecks = contract.tools.arguments ?? [];\n    if (argumentChecks.length > 0) {\n      rules.push({\n        id: \"contract.tool.arguments\",\n        category: \"tool\",\n        defaultSeverity: \"error\",\n        evaluate(context) {\n          const tools = (context.logicalEvents ?? context.events).filter(\n            (event) => event.kind === \"TOOL\" && event.status !== \"running\",\n          );\n          const findings: TraceCheckFinding[] = [];\n          for (const [index, check] of argumentChecks.entries()) {\n            const matches = tools.filter(\n              (event) => resolveCanonicalToolName(event) === check.tool,\n            );\n            if (matches.length === 0) {\n              findings.push(\n                contractFailFinding(\n                  `contract.tool.arguments.${index}`,\n                  `No finished tool named ${check.tool} for argument check.`,\n                  context.selectedRun\n                    ? [\n                        {\n                          runId: context.selectedRun.runId,\n                          kind: \"RUN\",\n                          name: context.selectedRun.name,\n                        },\n                      ]\n                    : [],\n                  { tool: check.tool, path: check.path },\n                  { toolCount: 0 },\n                ),\n              );\n              continue;\n            }\n            const occurrence = check.occurrence ?? \"all\";\n            const selected =\n              occurrence === \"first\"\n                ? [matches[0]!]\n                : occurrence === \"last\"\n                  ? [matches[matches.length - 1]!]\n                  : matches;\n            const results = selected.map((event) => {\n              const payload = extractToolArgumentPayload(event);\n              return evaluateToolArgumentValue(\n                payload.value,\n                check,\n                payload.present,\n              );\n            });\n            if (occurrence === \"any\") {\n              if (results.some((result) => result.status === \"pass\")) continue;\n              const firstFail = results.find((result) => result.status !== \"pass\")!;\n              findings.push(\n                contractFailFinding(\n                  `contract.tool.arguments.${index}`,\n                  firstFail.message,\n                  selected.slice(0, 1).map((event) => ({\n                    runId: event.runId,\n                    eventId: event.eventId,\n                    kind: event.kind,\n                    name: event.name,\n                    path: `tool.${check.tool}${check.path}`,\n                  })),\n                  { tool: check.tool, path: check.path, operator: check.operator },\n                  { code: firstFail.code },\n                ),\n              );\n              continue;\n            }\n            for (const [selIndex, result] of results.entries()) {\n              if (result.status === \"pass\") continue;\n              const event = selected[selIndex]!;\n              findings.push(\n                contractFailFinding(\n                  `contract.tool.arguments.${index}`,\n                  result.message,\n                  [\n                    {\n                      runId: event.runId,\n                      eventId: event.eventId,\n                      kind: event.kind,\n                      name: event.name,\n                      path: `tool.${check.tool}${check.path}`,\n                    },\n                  ],\n                  { tool: check.tool, path: check.path, operator: check.operator },\n                  { code: result.code },\n                ),\n              );\n            }\n          }\n          return findings;\n        },\n      });\n    }\n  }\n\n  if (contract.llm) {\n    rules.push(\n      createLlmUsageRule({\n        ...(contract.llm.maxCalls !== undefined ? { maxCalls: contract.llm.maxCalls } : {}),\n        ...(contract.llm.maxTotalTokens !== undefined\n          ? { maxTotalTokens: contract.llm.maxTotalTokens }\n          : {}),\n        ...(contract.llm.allowedModels ? { allowedModels: contract.llm.allowedModels } : {}),\n      }),\n    );\n  }\n\n  const orderRelations = contract.steps?.orderRelations ?? [];\n  for (const [index, relation] of orderRelations.entries()) {\n    rules.push(\n      createStepOrderingRule({\n        before: { kind: relation.before.kind, name: relation.before.name },\n        after: { kind: relation.after.kind, name: relation.after.name },\n        id: `contract.step.orderRelation.${index}`,\n        mode: relation.mode ?? \"first-occurrence\",\n        requireEndpoints: relation.requireEndpoints !== false,\n      }),\n    );\n  }\n\n  if (contract.observations) {\n    const required = contract.observations.required ?? [];\n    if (required.length > 0) {\n      rules.push({\n        id: \"contract.observation.required\",\n        category: \"run\",\n        defaultSeverity: \"error\",\n        evaluate(context) {\n          const outcomes = extractOutcomesFromPersistedEvents(context.events);\n          const names = new Set(outcomes.map((item) => item.name));\n          const missing = required.filter((name) => !names.has(name));\n          if (missing.length === 0) return [];\n          return [\n            contractFailFinding(\n              \"contract.observation.required\",\n              `Required observations missing: ${missing.join(\", \")}`,\n              context.selectedRun\n                ? [{ runId: context.selectedRun.runId, kind: \"RUN\", name: context.selectedRun.name }]\n                : [],\n              required,\n              [...names],\n            ),\n          ];\n        },\n      });\n    }\n    if (contract.observations.failOn?.length) {\n      rules.push(\n        createObservedOutcomeRule({\n          failOn: contract.observations.failOn.filter(\n            (status): status is \"failed\" | \"unknown\" | \"skipped\" =>\n              status === \"failed\" || status === \"unknown\" || status === \"skipped\",\n          ),\n        }),\n      );\n    }\n    const requireProvenance = contract.observations.requireProvenance;\n    if (\n      requireProvenance &&\n      (requireProvenance.method ||\n        requireProvenance.evidence ||\n        requireProvenance.sameRunEventReference)\n    ) {\n      rules.push({\n        id: \"contract.observation.provenance\",\n        category: \"run\",\n        defaultSeverity: \"error\",\n        evaluate(context) {\n          const outcomes = extractOutcomesFromPersistedEvents(context.events);\n          const knownEventIds = new Set(context.events.map((event) => event.eventId));\n          const targets =\n            required.length > 0\n              ? outcomes.filter((outcome) => required.includes(outcome.name))\n              : outcomes;\n          return targets.flatMap((outcome) =>\n            provenanceFindingsForOutcome(outcome, requireProvenance, knownEventIds),\n          );\n        },\n      });\n    }\n  }\n\n  if (contract.controls) {\n    const controls = contract.controls;\n    rules.push({\n      id: \"contract.controls\",\n      category: \"run\",\n      defaultSeverity: \"error\",\n      evaluate(context) {\n        const events = context.logicalEvents ?? context.events;\n        const outcomes = extractOutcomesFromPersistedEvents(context.events);\n        const observationNames = new Set(outcomes.map((item) => item.name));\n        const runEvidence: TraceCheckEvidence[] = context.selectedRun\n          ? [\n              {\n                runId: context.selectedRun.runId,\n                kind: \"RUN\",\n                name: context.selectedRun.name,\n              },\n            ]\n          : [];\n        return evaluateControlRules(events, controls, runEvidence, observationNames);\n      },\n    });\n  }\n\n  if (contract.retry) {\n    const retry = contract.retry;\n    rules.push({\n      id: \"contract.retry\",\n      category: \"run\",\n      defaultSeverity: \"error\",\n      evaluate(context) {\n        const events = context.logicalEvents ?? context.events;\n        const runEvidence: TraceCheckEvidence[] = context.selectedRun\n          ? [\n              {\n                runId: context.selectedRun.runId,\n                kind: \"RUN\",\n                name: context.selectedRun.name,\n              },\n            ]\n          : [];\n        const base = evaluateRetrySafetyRules(events, retry, runEvidence);\n        if (!retry.operations || retry.operations.length === 0) {\n          return base;\n        }\n        return [...base, ...evaluateRecoveryOperations(events, retry.operations)];\n      },\n    });\n  }\n\n  return rules;\n}\n\nfunction validateScopeShape(\n  scope: TraceContractScope | undefined,\n): TraceContractLintDiagnostic[] {\n  if (scope === undefined) return [];\n  const hasSelector =\n    (typeof scope.runId === \"string\" && scope.runId.trim() !== \"\") ||\n    (typeof scope.subAgentId === \"string\" && scope.subAgentId.trim() !== \"\") ||\n    (typeof scope.groupId === \"string\" && scope.groupId.trim() !== \"\") ||\n    (typeof scope.workflowStep === \"string\" && scope.workflowStep.trim() !== \"\") ||\n    (typeof scope.rootEventId === \"string\" && scope.rootEventId.trim() !== \"\");\n  if (!hasSelector) {\n    return [\n      {\n        code: \"contract.scope.empty\",\n        severity: \"error\",\n        message:\n          \"scope requires at least one explicit selector (runId, subAgentId, groupId, workflowStep, or rootEventId).\",\n        path: \"scope\",\n      },\n    ];\n  }\n  return [];\n}\n\nfunction validateProvenanceShape(\n  observations: TraceContractObservationRules | undefined,\n): TraceContractLintDiagnostic[] {\n  const diagnostics: TraceContractLintDiagnostic[] = [];\n  const provenance = observations?.requireProvenance;\n  if (!provenance) return diagnostics;\n  const enabled =\n    provenance.method === true ||\n    provenance.evidence === true ||\n    provenance.sameRunEventReference === true;\n  if (!enabled) {\n    diagnostics.push({\n      code: \"contract.observation.provenance.empty\",\n      severity: \"warning\",\n      message: \"observations.requireProvenance is set but no flags are enabled.\",\n      path: \"observations.requireProvenance\",\n    });\n  }\n  if (provenance.sameRunEventReference === true && provenance.evidence !== true) {\n    diagnostics.push({\n      code: \"contract.observation.provenance.same-run-without-evidence\",\n      severity: \"info\",\n      message:\n        \"sameRunEventReference implies evidence checking; set requireProvenance.evidence: true for clarity.\",\n      path: \"observations.requireProvenance.sameRunEventReference\",\n    });\n  }\n  if (enabled && (observations?.required?.length ?? 0) === 0) {\n    diagnostics.push({\n      code: \"contract.observation.provenance.without-required\",\n      severity: \"warning\",\n      message:\n        \"requireProvenance without observations.required applies to every observed outcome in scope.\",\n      path: \"observations.requireProvenance\",\n    });\n  }\n  return diagnostics;\n}\n\nfunction validateAlternativesShape(\n  alternatives: TraceContractAlternatives | undefined,\n): TraceContractLintDiagnostic[] {\n  const diagnostics: TraceContractLintDiagnostic[] = [];\n  if (alternatives === undefined) return diagnostics;\n  const branches = alternatives.anyOf ?? [];\n  if (branches.length === 0) {\n    diagnostics.push({\n      code: \"contract.alternatives.empty\",\n      severity: \"error\",\n      message: \"alternatives.anyOf must contain at least one branch.\",\n      path: \"alternatives.anyOf\",\n    });\n    return diagnostics;\n  }\n  const seen = new Set<string>();\n  for (const [index, branch] of branches.entries()) {\n    const path = `alternatives.anyOf[${index}]`;\n    if (!branch?.id || branch.id.trim() === \"\") {\n      diagnostics.push({\n        code: \"contract.alternatives.missing-id\",\n        severity: \"error\",\n        message: \"Each alternatives.anyOf branch requires a non-empty id.\",\n        path,\n      });\n      continue;\n    }\n    if (seen.has(branch.id)) {\n      diagnostics.push({\n        code: \"contract.alternatives.duplicate-id\",\n        severity: \"error\",\n        message: `Duplicate alternatives.anyOf branch id: ${branch.id}`,\n        path: `${path}.id`,\n      });\n    }\n    seen.add(branch.id);\n    if (!bodyHasRules(branch.contract ?? {})) {\n      diagnostics.push({\n        code: \"contract.alternatives.empty-branch\",\n        severity: \"error\",\n        message: `Branch ${branch.id} must declare at least one run/tools/llm/observations/controls/retry rule.`,\n        path: `${path}.contract`,\n      });\n    }\n    const nested = (branch.contract as TraceContractBody & { alternatives?: unknown })\n      ?.alternatives;\n    if (nested !== undefined) {\n      diagnostics.push({\n        code: \"contract.alternatives.nested\",\n        severity: \"error\",\n        message:\n          \"Nested alternatives.anyOf is not supported. Keep one alternatives level only.\",\n        path: `${path}.contract.alternatives`,\n      });\n    }\n  }\n  return diagnostics;\n}\n\nfunction emptyPassResult(input: TraceCheckInput, runId?: string): TraceCheckResult {\n  return {\n    ok: true,\n    status: \"pass\",\n    format: input.read.format,\n    ...(runId !== undefined ? { runId } : {}),\n    summary: { passed: 0, failed: 0, warnings: 0, errors: 0, rulesEvaluated: 0 },\n    findings: [],\n    diagnostics: [],\n    ruleExecutions: [],\n  };\n}\n\nfunction mergeContractResults(\n  input: TraceCheckInput,\n  parts: readonly TraceCheckResult[],\n  extraFindings: readonly TraceCheckFinding[] = [],\n): TraceCheckResult {\n  const findings = [...parts.flatMap((part) => part.findings), ...extraFindings];\n  const diagnostics = parts.flatMap((part) => part.diagnostics);\n  const ruleExecutions = parts.flatMap((part) => part.ruleExecutions);\n  const failed = findings.filter(\n    (finding) => finding.status === \"fail\" && finding.severity === \"error\",\n  ).length;\n  const errors = diagnostics.filter((item) => item.severity === \"error\").length;\n  const status: TraceCheckResult[\"status\"] =\n    errors > 0 ? \"error\" : failed > 0 ? \"fail\" : \"pass\";\n  const runId = parts.find((part) => part.runId !== undefined)?.runId;\n  return {\n    ok: status === \"pass\",\n    status,\n    format: input.read.format,\n    ...(runId !== undefined ? { runId } : {}),\n    summary: {\n      passed: findings.filter((finding) => finding.status === \"pass\").length,\n      failed,\n      warnings: findings.filter(\n        (finding) => finding.status === \"warning\" || finding.severity === \"warning\",\n      ).length,\n      errors,\n      rulesEvaluated: ruleExecutions.length,\n    },\n    findings,\n    diagnostics,\n    ruleExecutions,\n  };\n}\n\nfunction evaluateBody(\n  input: TraceCheckInput,\n  body: TraceContractBody,\n  options: { runId?: string } = {},\n): TraceCheckResult {\n  const rules = contractToRules(body);\n  if (rules.length === 0) {\n    return emptyPassResult(input, options.runId);\n  }\n  return runTraceChecks(input, {\n    rules,\n    ...(options.runId !== undefined ? { runId: options.runId } : {}),\n  });\n}\n\n/**\n * Define a normalized trace contract object.\n *\n * @experimental\n */\nexport function defineTraceContract(input: TraceContractInput): TraceContract {\n  const shapeErrors = [\n    ...validateAllowedStatusesShape(input.run?.allowedStatuses),\n    ...validateAlternativesShape(input.alternatives),\n    ...validateScopeShape(input.scope),\n    ...validateProvenanceShape(input.observations),\n  ].filter((item) => item.severity === \"error\");\n  if (shapeErrors.length > 0) {\n    throw new TypeError(shapeErrors.map((item) => item.message).join(\" \"));\n  }\n  const body = cloneBody(input);\n  const alternatives = input.alternatives\n    ? {\n        anyOf: input.alternatives.anyOf.map((branch) => ({\n          id: branch.id,\n          ...(branch.description !== undefined ? { description: branch.description } : {}),\n          contract: cloneBody(branch.contract),\n        })),\n      }\n    : undefined;\n  const scope = input.scope\n    ? {\n        ...(input.scope.runId !== undefined ? { runId: input.scope.runId } : {}),\n        ...(input.scope.subAgentId !== undefined ? { subAgentId: input.scope.subAgentId } : {}),\n        ...(input.scope.groupId !== undefined ? { groupId: input.scope.groupId } : {}),\n        ...(input.scope.workflowStep !== undefined\n          ? { workflowStep: input.scope.workflowStep }\n          : {}),\n        ...(input.scope.rootEventId !== undefined\n          ? { rootEventId: input.scope.rootEventId }\n          : {}),\n      }\n    : undefined;\n  return {\n    ...body,\n    ...(scope ? { scope } : {}),\n    ...(alternatives ? { alternatives } : {}),\n  };\n}\n\n/**\n * Evaluate a trace contract against an opened trace read result.\n *\n * Base rules always apply. When `alternatives.anyOf` is present, at least one\n * complete branch must also pass.\n *\n * @experimental\n */\nexport function evaluateTraceContract(\n  input: TraceCheckInput,\n  contract: TraceContract,\n  options: { runId?: string } = {},\n): TraceCheckResult {\n  const shapeErrors = [\n    ...validateAllowedStatusesShape(contract.run?.allowedStatuses),\n    ...validateAlternativesShape(contract.alternatives),\n    ...validateScopeShape(contract.scope),\n    ...validateProvenanceShape(contract.observations),\n  ].filter((item) => item.severity === \"error\");\n  if (shapeErrors.length > 0) {\n    return {\n      ok: false,\n      status: \"error\",\n      format: input.read.format,\n      ...(options.runId !== undefined ? { runId: options.runId } : {}),\n      summary: {\n        passed: 0,\n        failed: 0,\n        warnings: 0,\n        errors: shapeErrors.length,\n        rulesEvaluated: 0,\n      },\n      findings: [],\n      diagnostics: shapeErrors.map((item) => ({\n        code: \"AI_CHECK_INVALID_CONFIG\",\n        message: item.message,\n        severity: \"error\" as const,\n        ruleId: item.code,\n      })),\n      ruleExecutions: [],\n    };\n  }\n\n  const scoped = resolveTraceContractScope(input, contract.scope);\n  if (scoped.diagnostics.length > 0) {\n    return {\n      ok: false,\n      status: \"error\",\n      format: input.read.format,\n      ...(options.runId !== undefined ? { runId: options.runId } : {}),\n      ...(scoped.resolved?.runId !== undefined ? { runId: scoped.resolved.runId } : {}),\n      summary: {\n        passed: 0,\n        failed: 0,\n        warnings: 0,\n        errors: scoped.diagnostics.length,\n        rulesEvaluated: 0,\n      },\n      findings: [],\n      diagnostics: scoped.diagnostics,\n      ruleExecutions: [],\n    };\n  }\n\n  const effectiveInput = scoped.resolved?.input ?? input;\n  const effectiveRunId = scoped.resolved?.runId ?? options.runId;\n  const base = evaluateBody(effectiveInput, contract, {\n    ...(effectiveRunId !== undefined ? { runId: effectiveRunId } : {}),\n  });\n  const scopeFinding: TraceCheckFinding | undefined = scoped.resolved\n    ? {\n        ruleId: \"contract.scope.selected\",\n        severity: \"info\",\n        status: \"pass\",\n        message: `Selected actor ${scoped.resolved.runId} with ${scoped.resolved.evidenceEventCount} evidence event(s).`,\n        expected: scoped.resolved.matchedSelectors,\n        actual: {\n          runId: scoped.resolved.runId,\n          evidenceEventCount: scoped.resolved.evidenceEventCount,\n          ...(scoped.resolved.rootEventId !== undefined\n            ? { rootEventId: scoped.resolved.rootEventId }\n            : {}),\n        },\n        evidence: [\n          {\n            runId: scoped.resolved.runId,\n            kind: \"RUN\",\n            path: \"scope\",\n          },\n        ],\n      }\n    : undefined;\n\n  const branches = contract.alternatives?.anyOf ?? [];\n  if (branches.length === 0) {\n    return scopeFinding\n      ? mergeContractResults(effectiveInput, [base], [scopeFinding])\n      : base;\n  }\n\n  const branchEvaluations = branches.map((branch) => {\n    const result = evaluateBody(effectiveInput, branch.contract, {\n      ...(effectiveRunId !== undefined ? { runId: effectiveRunId } : {}),\n    });\n    return { branch, result };\n  });\n  const satisfied = branchEvaluations\n    .filter((item) => item.result.ok && item.result.status === \"pass\")\n    .map((item) => item.branch.id);\n  const failedBranches = branchEvaluations.filter(\n    (item) => !(item.result.ok && item.result.status === \"pass\"),\n  );\n\n  if (satisfied.length > 0) {\n    const passFinding: TraceCheckFinding = {\n      ruleId: \"contract.alternatives.anyOf\",\n      severity: \"info\",\n      status: \"pass\",\n      message: `Satisfied alternative branch(es): ${satisfied.join(\", \")}.`,\n      expected: { anyOf: branches.map((branch) => branch.id) },\n      actual: {\n        satisfied,\n        failed: failedBranches.map((item) => item.branch.id),\n      },\n      evidence: [],\n    };\n    return mergeContractResults(\n      effectiveInput,\n      [base],\n      [...(scopeFinding ? [scopeFinding] : []), passFinding],\n    );\n  }\n\n  const noneFinding: TraceCheckFinding = {\n    ruleId: \"contract.alternatives.none-satisfied\",\n    severity: \"error\",\n    status: \"fail\",\n    message: \"No alternatives.anyOf branch fully satisfied its contract.\",\n    expected: { anyOf: branches.map((branch) => branch.id) },\n    actual: {\n      branchFailures: Object.fromEntries(\n        failedBranches.map((item) => [\n          item.branch.id,\n          item.result.findings\n            .filter((finding) => finding.status === \"fail\")\n            .map((finding) => ({\n              ruleId: finding.ruleId,\n              message: finding.message,\n            })),\n        ]),\n      ),\n    },\n    evidence: [],\n  };\n  const prefixedBranchFindings = failedBranches.flatMap((item) =>\n    item.result.findings\n      .filter((finding) => finding.status === \"fail\")\n      .map((finding) => ({\n        ...finding,\n        ruleId: `contract.alternatives.${item.branch.id}.${finding.ruleId}`,\n      })),\n  );\n  return mergeContractResults(\n    effectiveInput,\n    [base],\n    [...(scopeFinding ? [scopeFinding] : []), noneFinding, ...prefixedBranchFindings],\n  );\n}\n\n/**\n * Convenience: evaluate a contract against a TraceReadResult directly.\n *\n * @experimental Additive wrapper over `evaluateTraceContract({ read }, …)`.\n */\nexport function evaluateTraceContractRead(\n  read: TraceReadResult,\n  contract: TraceContract,\n  options: { runId?: string } = {},\n): TraceCheckResult {\n  return evaluateTraceContract({ read }, contract, options);\n}\n\n/**\n * Lint a TraceContract for invalid or brittle shapes (does not evaluate a trace).\n *\n * @experimental\n */\nexport function lintTraceContract(contract: TraceContract): TraceContractLintDiagnostic[] {\n  const diagnostics = [\n    ...validateAlternativesShape(contract.alternatives),\n    ...validateScopeShape(contract.scope),\n    ...validateProvenanceShape(contract.observations),\n  ];\n  const branches = contract.alternatives?.anyOf ?? [];\n  if (branches.length === 1) {\n    diagnostics.push({\n      code: \"contract.alternatives.single-branch\",\n      severity: \"warning\",\n      message:\n        \"alternatives.anyOf has a single branch. Prefer base rules unless a second valid path exists.\",\n      path: \"alternatives.anyOf\",\n    });\n  }\n  const required = [\n    ...(contract.tools?.required ?? []),\n    ...(contract.tools?.requiredTools ?? []),\n  ];\n  if (required.length > 0 && branches.length === 0) {\n    diagnostics.push({\n      code: \"contract.brittle.unconditional-required\",\n      severity: \"info\",\n      message:\n        \"tools.required is unconditional. Use alternatives.anyOf when a legitimate shortcut may skip a tool.\",\n      path: \"tools.required\",\n    });\n  }\n  const order = contract.tools?.requiredOrder ?? [];\n  if (order.length >= 2 && contract.tools?.requiredOrderMode === undefined) {\n    diagnostics.push({\n      code: \"contract.brittle.first-occurrence-default\",\n      severity: \"info\",\n      message:\n        \"requiredOrder defaults to first-occurrence. Set requiredOrderMode when repeated calls must fail.\",\n      path: \"tools.requiredOrderMode\",\n    });\n  }\n  const orderRules = contract.tools?.orderRules ?? [];\n  const seenPairs = new Set<string>();\n  for (const [index, rule] of orderRules.entries()) {\n    const key = `${rule.before}\\0${rule.after}`;\n    if (seenPairs.has(key)) {\n      diagnostics.push({\n        code: \"contract.tools.orderRules.duplicate\",\n        severity: \"warning\",\n        message: `Duplicate orderRules pair ${rule.before} → ${rule.after}.`,\n        path: `tools.orderRules[${index}]`,\n      });\n    }\n    seenPairs.add(key);\n    if (rule.before === rule.after) {\n      diagnostics.push({\n        code: \"contract.tools.orderRules.self\",\n        severity: \"error\",\n        message: \"orderRules before and after must differ.\",\n        path: `tools.orderRules[${index}]`,\n      });\n    }\n  }\n  if ((contract.tools?.arguments?.length ?? 0) > 0) {\n    for (const [index, check] of (contract.tools?.arguments ?? []).entries()) {\n      if (!check.path.startsWith(\"/\") && check.path !== \"\") {\n        diagnostics.push({\n          code: \"contract.tools.arguments.path\",\n          severity: \"error\",\n          message: \"tools.arguments path must be a JSON Pointer (\\\"\\\" or start with \\\"/\\\").\",\n          path: `tools.arguments[${index}].path`,\n        });\n      }\n    }\n  }\n  return diagnostics;\n}\n\n/**\n * Explain a TraceContract as short human-readable lines (does not evaluate a trace).\n *\n * @experimental\n */\nexport function explainTraceContract(contract: TraceContract): string[] {\n  const lines: string[] = [];\n  if (contract.scope) {\n    const parts = Object.entries(contract.scope)\n      .filter(([, value]) => typeof value === \"string\" && value.trim() !== \"\")\n      .map(([key, value]) => `${key}=${value}`);\n    if (parts.length > 0) {\n      lines.push(`Scope: select actor by [${parts.join(\", \")}] before evaluation.`);\n    }\n  }\n  if (contract.run?.requireCompleted !== false) {\n    lines.push(\"Base: run must complete (no running events).\");\n  }\n  if (contract.run?.allowedStatuses?.length) {\n    lines.push(`Base: run status in [${contract.run.allowedStatuses.join(\", \")}].`);\n  }\n  if (contract.run?.maxDurationMs !== undefined) {\n    lines.push(`Base: run duration <= ${contract.run.maxDurationMs}ms.`);\n  }\n  if (contract.tools) {\n    const required = [\n      ...new Set([\n        ...(contract.tools.required ?? []),\n        ...(contract.tools.requiredTools ?? []),\n        ...(contract.tools.requiredOrder ?? []),\n      ]),\n    ];\n    if (required.length > 0) {\n      lines.push(`Base: required tools [${required.join(\", \")}].`);\n    }\n    const forbidden = [\n      ...(contract.tools.forbidden ?? []),\n      ...(contract.tools.forbiddenTools ?? []),\n    ];\n    if (forbidden.length > 0) {\n      lines.push(`Base: forbidden tools [${forbidden.join(\", \")}].`);\n    }\n    if ((contract.tools.requiredOrder?.length ?? 0) >= 2) {\n      const mode = contract.tools.requiredOrderMode ?? \"first-occurrence\";\n      lines.push(\n        `Base: requiredOrder [${contract.tools.requiredOrder!.join(\" → \")}] mode=${mode}.`,\n      );\n    }\n    if ((contract.tools.orderRules?.length ?? 0) > 0) {\n      const defaultMode = contract.tools.defaultOccurrenceMode ?? \"first-occurrence\";\n      lines.push(\n        `Base: ${contract.tools.orderRules!.length} orderRules (defaultOccurrenceMode=${defaultMode}).`,\n      );\n    }\n    if ((contract.tools.arguments?.length ?? 0) > 0) {\n      lines.push(\n        `Base: ${contract.tools.arguments!.length} structured tool-argument check(s).`,\n      );\n    }\n  }\n  if (contract.llm) {\n    if (contract.llm.maxCalls !== undefined) {\n      lines.push(`Base: LLM maxCalls=${contract.llm.maxCalls}.`);\n    }\n    if (contract.llm.maxTotalTokens !== undefined) {\n      lines.push(`Base: LLM maxTotalTokens=${contract.llm.maxTotalTokens}.`);\n    }\n    if (contract.llm.allowedModels?.length) {\n      lines.push(`Base: LLM allowedModels [${contract.llm.allowedModels.join(\", \")}].`);\n    }\n  }\n  if ((contract.steps?.orderRelations?.length ?? 0) > 0) {\n    const relations = contract.steps!.orderRelations!;\n    const summary = relations\n      .map(\n        (relation) =>\n          `${relation.before.kind}:${relation.before.name} → ${relation.after.kind}:${relation.after.name}` +\n          ` mode=${relation.mode ?? \"first-occurrence\"}`,\n      )\n      .join(\"; \");\n    lines.push(`Base: ${relations.length} steps.orderRelations [${summary}].`);\n  }\n  if (contract.observations?.required?.length) {\n    lines.push(`Base: required observations [${contract.observations.required.join(\", \")}].`);\n  }\n  if (contract.observations?.failOn?.length) {\n    lines.push(`Base: fail on observations [${contract.observations.failOn.join(\", \")}].`);\n  }\n  if (contract.observations?.requireProvenance) {\n    const flags = [\n      contract.observations.requireProvenance.method ? \"method\" : undefined,\n      contract.observations.requireProvenance.evidence ? \"evidence\" : undefined,\n      contract.observations.requireProvenance.sameRunEventReference\n        ? \"sameRunEventReference\"\n        : undefined,\n    ].filter((item): item is string => item !== undefined);\n    if (flags.length > 0) {\n      lines.push(\n        `Base: require structural observation provenance [${flags.join(\", \")}] (not semantic truth).`,\n      );\n    }\n  }\n  if (contract.controls) {\n    lines.push(\"Base: declared-versus-enforced control checks enabled.\");\n  }\n  if (contract.retry) {\n    const opCount = contract.retry.operations?.length ?? 0;\n    lines.push(\n      opCount > 0\n        ? `Base: retry/side-effect safety checks enabled (${opCount} recovery operation oracle(s)).`\n        : \"Base: retry/side-effect safety checks enabled.\",\n    );\n  }\n  const branches = contract.alternatives?.anyOf ?? [];\n  if (branches.length > 0) {\n    lines.push(\n      `Alternatives: at least one of [${branches.map((branch) => branch.id).join(\", \")}] must fully pass.`,\n    );\n    for (const branch of branches) {\n      const detail = branch.description ? ` — ${branch.description}` : \"\";\n      lines.push(`  branch ${branch.id}${detail}`);\n    }\n  }\n  if (lines.length === 0) {\n    lines.push(\"Empty contract: no base rules and no alternatives.\");\n  }\n  return lines;\n}\n","/**\n * Evidence v2 contract binding (6.28) — package a resolved serializable\n * TraceContract / check-preset snapshot and bind its digest to check results.\n *\n * Does not claim producer identity, trusted time, or semantic proof.\n */\n\nimport { defineTraceContract, type TraceContract, type TraceContractInput } from \"../checks/contract.js\";\nimport { stringContainsHighConfidenceCredential } from \"../safety/credential-value-patterns.js\";\nimport { sha256Equals, sha256Hex } from \"./hash.js\";\nimport {\n  EVIDENCE_RESOLVED_CONTRACT_FILENAME,\n  type EvidenceContractBinding,\n  type EvidenceContractBindingSource,\n  type EvidenceContractBindingStatus,\n  type EvidenceCheckContractBinding,\n  type EvidencePackagedFile,\n} from \"./types.js\";\n\nexport const EVIDENCE_CONTRACT_CANONICALIZATION_VERSION = \"1\" as const;\n\nexport const EVIDENCE_CONTRACT_PARTIAL_NOTE =\n  \"Custom or programmatic rules are not serializable; Evidence records rule IDs only and does not claim complete reviewer replay.\";\n\nexport const EVIDENCE_CONTRACT_UNAVAILABLE_NOTE =\n  \"No resolved TraceContract or check preset was packaged with this Evidence artifact.\";\n\nexport const EVIDENCE_CONTRACT_ASSURANCE_NOTE =\n  \"Contract binding verifies packaged digest integrity only; it does not prove producer identity, trusted time, source completeness, semantic truth, or external acceptance.\";\n\nexport const EVIDENCE_CONTRACT_UNSAFE_NOTE =\n  \"Resolved TraceContract contains high-confidence credential-like expected values; Evidence refuses complete packaging rather than silently redacting evaluated expectations.\";\n\n/**\n * Walk JSON-like contract values looking for high-confidence credential strings\n * under `expected` / `oneOf` (and nested) fields only. Does not mutate input.\n */\nexport function contractContainsUnsafeExpectedValues(value: unknown): boolean {\n  return scanForExpectedFields(value, 0);\n}\n\n/** Recurse looking for `expected` / `oneOf` keys; do not treat other strings as secrets. */\nfunction scanForExpectedFields(value: unknown, depth: number): boolean {\n  if (depth > 32) return false;\n  if (Array.isArray(value)) {\n    return value.some((item) => scanForExpectedFields(item, depth + 1));\n  }\n  if (value === null || typeof value !== \"object\") return false;\n  const record = value as Record<string, unknown>;\n  for (const [key, child] of Object.entries(record)) {\n    if (key === \"expected\" || key === \"oneOf\") {\n      if (valueTreeContainsCredential(child, depth + 1)) return true;\n      continue;\n    }\n    if (scanForExpectedFields(child, depth + 1)) return true;\n  }\n  return false;\n}\n\nfunction valueTreeContainsCredential(value: unknown, depth: number): boolean {\n  if (depth > 32) return false;\n  if (typeof value === \"string\") {\n    return stringContainsHighConfidenceCredential(value);\n  }\n  if (Array.isArray(value)) {\n    return value.some((item) => valueTreeContainsCredential(item, depth + 1));\n  }\n  if (value === null || typeof value !== \"object\") return false;\n  return Object.values(value as Record<string, unknown>).some((child) =>\n    valueTreeContainsCredential(child, depth + 1),\n  );\n}\n\n/** Deterministic JSON (sorted keys) with trailing newline. */\nexport function serializeCanonicalJson(value: unknown): string {\n  return `${JSON.stringify(stableValue(value), null, 2)}\\n`;\n}\n\nfunction stableValue(value: unknown): unknown {\n  if (Array.isArray(value)) return value.map(stableValue);\n  if (value === null || typeof value !== \"object\") return value;\n  if (typeof value === \"function\") return undefined;\n  const record = value as Record<string, unknown>;\n  return Object.fromEntries(\n    Object.keys(record)\n      .filter((key) => record[key] !== undefined && typeof record[key] !== \"function\")\n      .sort((a, b) => a.localeCompare(b))\n      .map((key) => [key, stableValue(record[key])]),\n  );\n}\n\nfunction sortedUniqueStrings(values: readonly string[]): string[] {\n  return [...new Set(values.map((item) => item.trim()).filter((item) => item !== \"\"))].sort((a, b) =>\n    a.localeCompare(b),\n  );\n}\n\n/**\n * Normalize TraceContract aliases and make common evaluator defaults explicit\n * for canonicalization version `\"1\"`.\n */\nexport function resolveSerializableTraceContract(\n  input: TraceContractInput | TraceContract,\n): TraceContract {\n  const defined = defineTraceContract(input);\n  const tools = defined.tools\n    ? {\n        ...defined.tools,\n        required: sortedUniqueStrings([\n          ...(defined.tools.required ?? []),\n          ...(defined.tools.requiredTools ?? []),\n        ]),\n        forbidden: sortedUniqueStrings([\n          ...(defined.tools.forbidden ?? []),\n          ...(defined.tools.forbiddenTools ?? []),\n        ]),\n        ...(defined.tools.allowed ? { allowed: sortedUniqueStrings(defined.tools.allowed) } : {}),\n        ...(defined.tools.requiredOrder\n          ? {\n              requiredOrder: [...defined.tools.requiredOrder],\n              requiredOrderMode: defined.tools.requiredOrderMode ?? \"first-occurrence\",\n            }\n          : {}),\n      }\n    : undefined;\n\n  // Drop alias-only fields from the resolved snapshot.\n  if (tools) {\n    delete (tools as { requiredTools?: unknown }).requiredTools;\n    delete (tools as { forbiddenTools?: unknown }).forbiddenTools;\n    if (tools.required?.length === 0) delete (tools as { required?: unknown }).required;\n    if (tools.forbidden?.length === 0) delete (tools as { forbidden?: unknown }).forbidden;\n  }\n\n  const run = defined.run\n    ? {\n        ...defined.run,\n        // Evaluator default: requireCompleted is true unless explicitly false.\n        requireCompleted: defined.run.requireCompleted !== false,\n      }\n    : undefined;\n\n  return {\n    ...defined,\n    ...(run ? { run } : {}),\n    ...(tools && Object.keys(tools).length > 0 ? { tools } : {}),\n  };\n}\n\n/**\n * Static rule-id inventory implied by a resolved TraceContract (no evaluation).\n */\nexport function collectResolvedContractRuleIds(contract: TraceContract): string[] {\n  const ids: string[] = [];\n  if (contract.run) {\n    if (contract.run.allowedStatuses?.length) ids.push(\"contract.run.allowedStatuses\");\n    if (contract.run.requireCompleted === true) ids.push(\"run.requireCompleted\");\n    if (contract.run.maxDurationMs !== undefined) ids.push(\"run.duration\");\n  }\n  if (contract.tools) {\n    if (\n      (contract.tools.required?.length ?? 0) > 0 ||\n      (contract.tools.forbidden?.length ?? 0) > 0 ||\n      contract.tools.allowed ||\n      contract.tools.maxCalls !== undefined\n    ) {\n      ids.push(\"tool.usage\");\n    }\n    if (contract.tools.requiredOrder?.length) {\n      for (let i = 0; i < contract.tools.requiredOrder.length - 1; i += 1) {\n        ids.push(`contract.tool.order.${i}`);\n      }\n    }\n    if (contract.tools.orderRules?.length) {\n      for (let index = 0; index < contract.tools.orderRules.length; index += 1) {\n        ids.push(`contract.tool.orderRule.${index}`);\n      }\n    }\n    if (contract.tools.arguments?.length) ids.push(\"contract.tool.arguments\");\n  }\n  if (contract.llm) ids.push(\"llm.usage\");\n  if (contract.observations?.required?.length) ids.push(\"contract.observation.required\");\n  if (contract.observations?.failOn?.length) ids.push(\"outcome.status\");\n  if (contract.observations?.requireProvenance) ids.push(\"contract.observation.provenance\");\n  if (contract.controls) ids.push(\"contract.controls\");\n  if (contract.retry) ids.push(\"contract.retry\");\n  if (contract.scope) ids.push(\"contract.scope.selected\");\n  if (contract.alternatives?.anyOf?.length) ids.push(\"contract.alternatives.anyOf\");\n  return sortedUniqueStrings(ids);\n}\n\nexport interface ResolvedContractDocument {\n  canonicalizationVersion: typeof EVIDENCE_CONTRACT_CANONICALIZATION_VERSION;\n  kind: \"trace-contract\" | \"check-preset\";\n  resolved: Record<string, unknown>;\n  origin: {\n    source: EvidenceContractBindingSource;\n    preset?: string;\n    path?: string;\n  };\n}\n\nexport interface BuildEvidenceContractPackageInput {\n  engineVersion: string;\n  source: EvidenceContractBindingSource;\n  /** Serializable TraceContract (preferred for `complete`). */\n  contract?: TraceContractInput | TraceContract;\n  /**\n   * Pre-resolved check preset / CLI shorthand snapshot (caller expands).\n   * Used when `contract` is omitted or as origin metadata beside a contract.\n   */\n  preset?: {\n    name: string;\n    resolved: Record<string, unknown>;\n  };\n  /** Original config path (omit or redact when sensitive). */\n  path?: string;\n  contractId?: string;\n  contractVersion?: string;\n  /**\n   * Stable IDs for programmatic / custom rules that cannot be serialized.\n   * Presence forces `status: \"partial\"`.\n   */\n  unsupportedRuleIds?: readonly string[];\n  /** Override rule ID list (defaults to static inventory from the contract / preset select). */\n  ruleIds?: readonly string[];\n  note?: string;\n}\n\nexport interface EvidenceContractPackage {\n  /** Packaged `contract.resolved.json` when a serializable snapshot exists. */\n  file?: EvidencePackagedFile;\n  binding: EvidenceContractBinding;\n  /** Fields to merge into `check-results.json`. */\n  checkBinding: EvidenceCheckContractBinding;\n  /** Canonical document bytes when packaged (same as `file.content`). */\n  resolvedJson?: string;\n}\n\nfunction buildUnavailablePackage(\n  engineVersion: string,\n  note?: string,\n): EvidenceContractPackage {\n  const binding: EvidenceContractBinding = {\n    status: \"unavailable\",\n    source: \"programmatic\",\n    canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n    engineVersion,\n    ruleIds: [],\n    note: note ?? EVIDENCE_CONTRACT_UNAVAILABLE_NOTE,\n  };\n  return {\n    binding,\n    checkBinding: {\n      canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n      engineVersion,\n      evaluatedRuleIds: [],\n      bindingStatus: \"unavailable\",\n    },\n  };\n}\n\n/**\n * Build a resolved contract artifact + Evidence binding for packaging.\n *\n * Pass no `contract` and no `preset` to record an honest `unavailable` binding\n * (missing-contract case). Pass `unsupportedRuleIds` to force `partial`.\n */\nexport function buildEvidenceContractPackage(\n  input: BuildEvidenceContractPackageInput,\n): EvidenceContractPackage {\n  const unsupported = sortedUniqueStrings(input.unsupportedRuleIds ?? []);\n  const hasContract = input.contract !== undefined;\n  const hasPreset = input.preset !== undefined;\n\n  if (!hasContract && !hasPreset) {\n    return buildUnavailablePackage(input.engineVersion, input.note);\n  }\n\n  let kind: ResolvedContractDocument[\"kind\"] = \"trace-contract\";\n  let resolved: Record<string, unknown>;\n  let ruleIds: string[];\n\n  if (hasContract) {\n    const normalized = resolveSerializableTraceContract(input.contract!);\n    resolved = stableValue(normalized) as Record<string, unknown>;\n    ruleIds = collectResolvedContractRuleIds(normalized);\n  } else {\n    kind = \"check-preset\";\n    resolved = stableValue(input.preset!.resolved) as Record<string, unknown>;\n    const select = Array.isArray(input.preset!.resolved.select)\n      ? (input.preset!.resolved.select as unknown[]).filter(\n          (item): item is string => typeof item === \"string\",\n        )\n      : [];\n    ruleIds = sortedUniqueStrings(select);\n  }\n\n  if (input.ruleIds !== undefined) {\n    ruleIds = sortedUniqueStrings(input.ruleIds);\n  }\n  if (unsupported.length > 0) {\n    ruleIds = sortedUniqueStrings([...ruleIds, ...unsupported]);\n  }\n\n  // Refuse unsafe expected literals — never mutate then claim complete.\n  if (contractContainsUnsafeExpectedValues(resolved)) {\n    return {\n      binding: {\n        status: \"unavailable\",\n        source: input.source,\n        ...(input.contractId !== undefined ? { contractId: input.contractId } : {}),\n        ...(input.contractVersion !== undefined\n          ? { contractVersion: input.contractVersion }\n          : {}),\n        canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n        engineVersion: input.engineVersion,\n        ruleIds,\n        ...(unsupported.length > 0 ? { unsupportedRuleIds: unsupported } : {}),\n        note: input.note ?? EVIDENCE_CONTRACT_UNSAFE_NOTE,\n      },\n      checkBinding: {\n        canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n        engineVersion: input.engineVersion,\n        evaluatedRuleIds: ruleIds,\n        bindingStatus: \"unavailable\",\n        ...(unsupported.length > 0 ? { unsupportedRuleIds: unsupported } : {}),\n        origin: {\n          source: input.source,\n          ...(input.preset?.name ? { preset: input.preset.name } : {}),\n        },\n      },\n    };\n  }\n\n  const document: ResolvedContractDocument = {\n    canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n    kind,\n    resolved,\n    origin: {\n      source: input.source,\n      ...(input.preset?.name ? { preset: input.preset.name } : {}),\n      ...(input.path !== undefined && input.path.trim() !== \"\"\n        ? { path: input.path.trim() }\n        : {}),\n    },\n  };\n\n  const resolvedJson = serializeCanonicalJson(document);\n  const digest = sha256Hex(resolvedJson);\n  const status: EvidenceContractBindingStatus =\n    unsupported.length > 0 ? \"partial\" : \"complete\";\n\n  const binding: EvidenceContractBinding = {\n    status,\n    source: input.source,\n    ...(input.contractId !== undefined ? { contractId: input.contractId } : {}),\n    ...(input.contractVersion !== undefined\n      ? { contractVersion: input.contractVersion }\n      : {}),\n    canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n    engineVersion: input.engineVersion,\n    path: EVIDENCE_RESOLVED_CONTRACT_FILENAME,\n    sha256: digest,\n    ruleIds,\n    ...(unsupported.length > 0 ? { unsupportedRuleIds: unsupported } : {}),\n    note:\n      input.note ??\n      (status === \"partial\"\n        ? EVIDENCE_CONTRACT_PARTIAL_NOTE\n        : EVIDENCE_CONTRACT_ASSURANCE_NOTE),\n  };\n\n  const checkBinding: EvidenceCheckContractBinding = {\n    contractDigest: digest,\n    canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n    engineVersion: input.engineVersion,\n    evaluatedRuleIds: ruleIds,\n    bindingStatus: status,\n    ...(input.preset?.name\n      ? {\n          origin: {\n            source: input.source,\n            preset: input.preset.name,\n          },\n        }\n      : {\n          origin: {\n            source: input.source,\n          },\n        }),\n    ...(unsupported.length > 0 ? { unsupportedRuleIds: unsupported } : {}),\n  };\n\n  return {\n    file: {\n      path: EVIDENCE_RESOLVED_CONTRACT_FILENAME,\n      content: resolvedJson,\n      role: \"contract\",\n    },\n    binding,\n    checkBinding,\n    resolvedJson,\n  };\n}\n\n/**\n * Merge contract-binding fields into a check-results JSON object (additive).\n */\nexport function bindCheckResultsToContract(\n  checkResults: Record<string, unknown>,\n  checkBinding: EvidenceCheckContractBinding,\n): Record<string, unknown> {\n  return {\n    ...checkResults,\n    contract: {\n      ...checkBinding,\n    },\n  };\n}\n\nexport function serializeCheckResultsJson(value: unknown): string {\n  return serializeCanonicalJson(value);\n}\n\n/**\n * Parse the optional `contract` object from check-results.json when present.\n */\nexport function readCheckResultsContractBinding(\n  checkResultsJson: string,\n): EvidenceCheckContractBinding | undefined {\n  try {\n    const parsed = JSON.parse(checkResultsJson) as { contract?: unknown };\n    if (parsed.contract === null || typeof parsed.contract !== \"object\" || Array.isArray(parsed.contract)) {\n      return undefined;\n    }\n    return parsed.contract as EvidenceCheckContractBinding;\n  } catch {\n    return undefined;\n  }\n}\n\nexport interface EvidenceContractVerifyIssue {\n  code:\n    | \"contract_file_missing\"\n    | \"contract_hash_mismatch\"\n    | \"contract_digest_mismatch\"\n    | \"contract_binding_invalid\";\n  severity: \"error\" | \"warning\";\n  message: string;\n  path?: string;\n}\n\n/**\n * Verify digest binding between manifest.contract, contract.resolved.json, and\n * check-results.json. Older Evidence without `manifest.contract` is a no-op.\n */\nexport function verifyEvidenceContractBinding(parts: {\n  binding?: EvidenceContractBinding;\n  resolvedContractBytes?: string | Uint8Array;\n  checkResultsJson?: string;\n}): EvidenceContractVerifyIssue[] {\n  const issues: EvidenceContractVerifyIssue[] = [];\n  const binding = parts.binding;\n  if (binding === undefined) return issues;\n\n  if (\n    binding.canonicalizationVersion !== EVIDENCE_CONTRACT_CANONICALIZATION_VERSION\n  ) {\n    issues.push({\n      code: \"contract_binding_invalid\",\n      severity: \"error\",\n      message: `Unsupported contract canonicalizationVersion: ${String(binding.canonicalizationVersion)}`,\n    });\n  }\n\n  if (binding.status === \"unavailable\") {\n    if (binding.path !== undefined || binding.sha256 !== undefined) {\n      issues.push({\n        code: \"contract_binding_invalid\",\n        severity: \"error\",\n        message: \"unavailable contract binding must not reference a packaged contract file.\",\n      });\n    }\n    return issues;\n  }\n\n  const expectedPath = binding.path ?? EVIDENCE_RESOLVED_CONTRACT_FILENAME;\n  if (parts.resolvedContractBytes === undefined) {\n    issues.push({\n      code: \"contract_file_missing\",\n      severity: \"error\",\n      message: `Referenced contract file missing: ${expectedPath}`,\n      path: expectedPath,\n    });\n    return issues;\n  }\n\n  const actual = sha256Hex(parts.resolvedContractBytes);\n  if (binding.sha256 !== undefined && !sha256Equals(binding.sha256, actual)) {\n    issues.push({\n      code: \"contract_hash_mismatch\",\n      severity: \"error\",\n      message: `SHA-256 mismatch for ${expectedPath}`,\n      path: expectedPath,\n    });\n  }\n\n  if (parts.checkResultsJson !== undefined) {\n    const checkBinding = readCheckResultsContractBinding(parts.checkResultsJson);\n    if (checkBinding?.contractDigest !== undefined && binding.sha256 !== undefined) {\n      if (!sha256Equals(checkBinding.contractDigest, binding.sha256)) {\n        issues.push({\n          code: \"contract_digest_mismatch\",\n          severity: \"error\",\n          message:\n            \"check-results.json contractDigest does not match evidence.json contract.sha256.\",\n          path: \"check-results.json\",\n        });\n      }\n    } else if (binding.status === \"complete\" || binding.status === \"partial\") {\n      issues.push({\n        code: \"contract_digest_mismatch\",\n        severity: \"error\",\n        message:\n          \"check-results.json is missing contract.contractDigest for a packaged contract binding.\",\n        path: \"check-results.json\",\n      });\n    }\n  }\n\n  return issues;\n}\n","import type { InspectKind, InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\n\nconst REDACT_SUBSTRINGS = [\n  \"authorization\",\n  \"cookie\",\n  \"token\",\n  \"apikey\",\n  \"password\",\n  \"secret\",\n  \"email\",\n] as const;\n\nfunction shouldRedactKey(key: string): boolean {\n  const k = key.toLowerCase();\n  for (const s of REDACT_SUBSTRINGS) {\n    if (k.includes(s)) return true;\n  }\n  return false;\n}\n\nexport function safeString(value: unknown, maxLength?: number): string {\n  if (value === null || value === undefined) return \"\";\n  let s: string;\n  if (typeof value === \"string\") s = value;\n  else if (typeof value === \"number\" || typeof value === \"boolean\") s = String(value);\n  else s = stableJson(value, false);\n  if (maxLength !== undefined && maxLength >= 0 && s.length > maxLength) {\n    return `${s.slice(0, maxLength)}…`;\n  }\n  return s;\n}\n\n/** Escape markdown table pipes and normalize line breaks for safe inline text. */\nexport function escapeMarkdown(value: string): string {\n  return value\n    .replace(/\\|/g, \"\\\\|\")\n    .replace(/\\r\\n/g, \"\\n\")\n    .replace(/\\r/g, \"\\n\")\n    .replace(/\\n/g, \" \");\n}\n\nexport function escapeHtml(value: string): string {\n  return value\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&#39;\");\n}\n\nfunction sortKeysDeep(input: unknown): unknown {\n  if (input === null || typeof input !== \"object\") return input;\n  if (Array.isArray(input)) return input.map(sortKeysDeep);\n  const o = input as Record<string, unknown>;\n  const out: Record<string, unknown> = {};\n  for (const k of Object.keys(o).sort()) {\n    out[k] = sortKeysDeep(o[k]);\n  }\n  return out;\n}\n\nexport function stableJson(value: unknown, pretty?: boolean): string {\n  const sorted = sortKeysDeep(value);\n  return pretty === true ? JSON.stringify(sorted, null, 2) : JSON.stringify(sorted);\n}\n\nexport function compactAttributes(\n  attrs: Record<string, unknown> | undefined,\n  options?: { maxLength?: number; redacted?: boolean },\n): Record<string, unknown> {\n  if (attrs === undefined) return {};\n  const maxLen = options?.maxLength ?? 500;\n  const redacted = options?.redacted ?? true;\n  const out: Record<string, unknown> = {};\n  for (const key of Object.keys(attrs).sort()) {\n    if (redacted && shouldRedactKey(key)) {\n      out[key] = \"[REDACTED]\";\n      continue;\n    }\n    const v = attrs[key];\n    out[key] = compactValue(v, maxLen, redacted);\n  }\n  return out;\n}\n\nfunction compactValue(value: unknown, maxLen: number, redacted: boolean): unknown {\n  if (value === null || typeof value !== \"object\") {\n    return typeof value === \"string\" ? safeString(value, maxLen) : value;\n  }\n  if (Array.isArray(value)) {\n    const arr = value.slice(0, 20).map((x) => compactValue(x, maxLen, redacted));\n    if (value.length > 20) arr.push(`…(+${value.length - 20} more)`);\n    return arr;\n  }\n  const o = value as Record<string, unknown>;\n  const inner: Record<string, unknown> = {};\n  for (const k of Object.keys(o)) {\n    if (redacted && shouldRedactKey(k)) inner[k] = \"[REDACTED]\";\n    else inner[k] = compactValue(o[k], maxLen, redacted);\n  }\n  return inner;\n}\n\nexport function summarizeTree(tree: InspectRunTree): Record<string, unknown> {\n  const flat = flattenTree(tree);\n  const errorNodes = flat.filter((n) => n.event.status === \"error\").length;\n  return {\n    runId: tree.runId,\n    name: tree.name,\n    status: tree.status,\n    startedAt: tree.startedAt,\n    endedAt: tree.endedAt,\n    durationMs: tree.durationMs,\n    stepCount: flat.length,\n    errorStepCount: errorNodes,\n    totalEvents: tree.metadata.totalEvents,\n    confidenceBreakdown: { ...tree.metadata.confidenceBreakdown },\n    kinds: { ...tree.metadata.kinds },\n  };\n}\n\n/** Depth-first pre-order flatten (matches typical tree display). */\nexport function flattenTree(tree: InspectRunTree): InspectNode[] {\n  const out: InspectNode[] = [];\n  function walk(nodes: InspectNode[]): void {\n    for (const n of nodes) {\n      out.push(n);\n      if (n.children.length > 0) walk(n.children);\n    }\n  }\n  walk(tree.children);\n  return out;\n}\n\nexport function zeroKinds(): Record<InspectKind, number> {\n  return {\n    RUN: 0,\n    AGENT: 0,\n    LLM: 0,\n    TOOL: 0,\n    CHAIN: 0,\n    RETRIEVER: 0,\n    DECISION: 0,\n    RESULT: 0,\n    ERROR: 0,\n    LOGIC: 0,\n    LOG: 0,\n    OUTCOME: 0,\n  };\n}\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport { escapeHtml, flattenTree } from \"../exporters/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    const errClass = ev.status === \"error\" ? \" is-error\" : \"\";\n    parts.push(`<li class=\"tree-node${errClass}\">`);\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\n/**\n * Execution-tree HTML fragment for the Evidence Tree view (already escaped).\n */\nexport function buildEvidenceTreeViewHtml(trees: readonly InspectRunTree[]): string {\n  if (trees.length === 0) {\n    return `<p class=\"muted\">No execution trees available.</p>`;\n  }\n  const parts: string[] = [];\n  for (const tree of trees) {\n    parts.push(`<article class=\"run-block\">`);\n    parts.push(`<h3><code>${escapeHtml(tree.runId)}</code></h3>`);\n    if (tree.name) {\n      parts.push(`<p class=\"muted\">Name: ${escapeHtml(tree.name)}</p>`);\n    }\n    parts.push(\n      `<p>Status: <strong>${escapeHtml(String(tree.status ?? \"unknown\"))}</strong>${\n        tree.durationMs !== undefined ? ` · ${escapeHtml(String(tree.durationMs))}ms` : \"\"\n      }</p>`,\n    );\n    parts.push(\n      tree.children.length > 0\n        ? renderTreeHtml(tree.children)\n        : `<p class=\"muted\">No steps recorded.</p>`,\n    );\n    parts.push(`</article>`);\n  }\n  return parts.join(\"\\n\");\n}\n\nfunction timelineRows(tree: InspectRunTree): {\n  name: string;\n  kind: string;\n  status: string;\n  offsetMs: number;\n  durationMs: number;\n  isError: boolean;\n}[] {\n  const flat = flattenTree(tree);\n  const origin =\n    tree.startedAt ??\n    flat.reduce<number | undefined>((min, n) => {\n      const t = n.event.timestamp;\n      if (!Number.isFinite(t)) return min;\n      return min === undefined ? t : Math.min(min, t);\n    }, undefined) ??\n    0;\n  return flat\n    .filter((n) => n.event.kind !== \"RUN\")\n    .map((n) => {\n      const started = Number.isFinite(n.event.timestamp) ? n.event.timestamp : origin;\n      const durationMs =\n        n.event.durationMs !== undefined && Number.isFinite(n.event.durationMs)\n          ? Math.max(0, n.event.durationMs)\n          : 0;\n      return {\n        name: n.event.name,\n        kind: n.event.kind,\n        status: n.event.status ?? \"?\",\n        offsetMs: Math.max(0, started - origin),\n        durationMs,\n        isError: n.event.status === \"error\",\n      };\n    })\n    .sort((a, b) => a.offsetMs - b.offsetMs || a.name.localeCompare(b.name));\n}\n\n/**\n * Timeline / waterfall HTML fragment (escaped; no external assets).\n */\nexport function buildEvidenceTimelineViewHtml(trees: readonly InspectRunTree[]): string {\n  if (trees.length === 0) {\n    return `<p class=\"muted\">No timeline data available.</p>`;\n  }\n  const parts: string[] = [];\n  for (const tree of trees) {\n    const rows = timelineRows(tree);\n    const maxEnd = rows.reduce(\n      (max, row) => Math.max(max, row.offsetMs + Math.max(row.durationMs, 1)),\n      1,\n    );\n    parts.push(`<article class=\"run-block\">`);\n    parts.push(`<h3><code>${escapeHtml(tree.runId)}</code></h3>`);\n    if (rows.length === 0) {\n      parts.push(`<p class=\"muted\">No step timings recorded.</p>`);\n    } else {\n      parts.push(`<div class=\"waterfall\" role=\"list\">`);\n      for (const row of rows) {\n        const left = (row.offsetMs / maxEnd) * 100;\n        const width = Math.max(0.8, (Math.max(row.durationMs, 1) / maxEnd) * 100);\n        const err = row.isError ? \" is-error\" : \"\";\n        parts.push(\n          `<div class=\"wf-row${err}\" role=\"listitem\"><div class=\"wf-label\"><span class=\"nm\">${escapeHtml(row.name)}</span> <span class=\"meta\">[${escapeHtml(row.kind)}] ${escapeHtml(row.status)} · ${escapeHtml(String(row.durationMs))}ms @+${escapeHtml(String(row.offsetMs))}ms</span></div><div class=\"wf-track\"><span class=\"wf-bar\" style=\"left:${left.toFixed(2)}%;width:${width.toFixed(2)}%\"></span></div></div>`,\n        );\n      }\n      parts.push(`</div>`);\n    }\n    parts.push(`</article>`);\n  }\n  return parts.join(\"\\n\");\n}\n\nfunction findNodeByEventId(nodes: InspectNode[], eventId: string): InspectNode | undefined {\n  for (const node of nodes) {\n    if (node.event.eventId === eventId) return node;\n    const child = findNodeByEventId(node.children, eventId);\n    if (child) return child;\n  }\n  return undefined;\n}\n\nfunction buildAncestorChain(tree: InspectRunTree, failure: InspectNode): InspectNode[] {\n  const chain: InspectNode[] = [failure];\n  let parentId = failure.event.parentId;\n  const guard = new Set<string>([failure.event.eventId]);\n  while (parentId && !guard.has(parentId)) {\n    guard.add(parentId);\n    const parent = findNodeByEventId(tree.children, parentId);\n    if (!parent) break;\n    chain.unshift(parent);\n    parentId = parent.event.parentId;\n  }\n  return chain;\n}\n\n/**\n * First causal failure view: earliest error by timestamp, with parent chain.\n * Does not invent relationships; if no parentId chain exists, shows the error alone.\n */\nexport function buildEvidenceCausalFailureViewHtml(\n  trees: readonly InspectRunTree[],\n): string {\n  if (trees.length === 0) {\n    return `<p class=\"muted\">No runs available for causal analysis.</p>`;\n  }\n  const parts: string[] = [];\n  for (const tree of trees) {\n    parts.push(`<article class=\"run-block\">`);\n    parts.push(`<h3><code>${escapeHtml(tree.runId)}</code></h3>`);\n    const errors = flattenTree(tree)\n      .filter((n) => n.event.status === \"error\" || n.event.kind === \"ERROR\")\n      .sort((a, b) => a.event.timestamp - b.event.timestamp);\n    if (errors.length === 0) {\n      parts.push(\n        `<p class=\"muted\">No error-status events found. Run status: <strong>${escapeHtml(String(tree.status ?? \"unknown\"))}</strong>.</p>`,\n      );\n      parts.push(`</article>`);\n      continue;\n    }\n    const first = errors[0]!;\n    const chain = buildAncestorChain(tree, first);\n    parts.push(`<p>First error by timestamp:</p>`);\n    parts.push(`<ol class=\"causal-chain\">`);\n    for (const node of chain) {\n      const isTip = node.event.eventId === first.event.eventId;\n      const msg =\n        typeof node.event.attributes?.message === \"string\"\n          ? node.event.attributes.message\n          : typeof node.event.attributes?.error === \"string\"\n            ? node.event.attributes.error\n            : undefined;\n      parts.push(\n        `<li class=\"${isTip ? \"causal-tip\" : \"\"}\"><span class=\"nm\">${escapeHtml(node.event.name)}</span> <span class=\"meta\">[${escapeHtml(node.event.kind)}] ${escapeHtml(node.event.status ?? \"?\")} · ${escapeHtml(node.event.eventId)}</span>${\n          msg ? `<div class=\"causal-msg\">${escapeHtml(msg.slice(0, 400))}</div>` : \"\"\n        }</li>`,\n      );\n    }\n    parts.push(`</ol>`);\n    if (errors.length > 1) {\n      parts.push(\n        `<p class=\"muted\">${escapeHtml(String(errors.length - 1))} additional error event(s) not shown in the primary chain.</p>`,\n      );\n    }\n    parts.push(`</article>`);\n  }\n  return parts.join(\"\\n\");\n}\n\n/** Extra CSS for tree / timeline / causal panels (inlined into evidence shell). */\nexport const EVIDENCE_VIEW_CSS = `\nul.tree{list-style:none;padding-left:1rem;margin:.5rem 0}\nul.tree.nested{padding-left:1.25rem;border-left:1px solid var(--line);margin:.25rem 0}\n.tree-node.is-error .nm,.wf-row.is-error .nm,.causal-tip .nm{color:var(--unsafe)}\n.waterfall{display:flex;flex-direction:column;gap:.45rem;max-width:52rem}\n.wf-row{display:grid;grid-template-columns:minmax(10rem,18rem) 1fr;gap:.6rem;align-items:center}\n.wf-track{position:relative;height:.7rem;background:#e8e8e4;border-radius:.25rem;overflow:hidden}\n.wf-bar{position:absolute;top:0;bottom:0;background:var(--accent);border-radius:.25rem}\n.wf-row.is-error .wf-bar{background:var(--unsafe)}\n.causal-chain{max-width:44rem}\n.causal-msg{margin:.25rem 0 0;color:var(--muted);font-size:.92rem}\n.run-block{margin:0 0 1.25rem;padding-bottom:1rem;border-bottom:1px solid var(--line)}\n.run-block:last-child{border-bottom:0}\n@media (max-width:720px){\n  .wf-row{grid-template-columns:1fr}\n}\n`.trim();\n","import { escapeHtml } from \"../exporters/helpers.js\";\n\nimport { EVIDENCE_VIEW_CSS } from \"./views.js\";\nimport type { EvidenceManifest, EvidenceSafeStatus } from \"./types.js\";\n\nexport const EVIDENCE_HTML_FILENAME = \"evidence.html\";\n\nconst EVIDENCE_HTML_NOTE =\n  \"Generated locally by AgentInspect. Share-checked evidence for review — not a compliance or security certification.\";\n\n/** View ids reserved for later 6.10 chunks; shell renders stubs except summary. */\nexport const EVIDENCE_VIEW_IDS = [\n  \"summary\",\n  \"tree\",\n  \"timeline\",\n  \"causal\",\n  \"tools-llm\",\n  \"outcomes\",\n  \"contracts\",\n  \"circuit\",\n  \"diff\",\n  \"safety\",\n  \"provenance\",\n] as const;\n\nexport type EvidenceViewId = (typeof EVIDENCE_VIEW_IDS)[number];\n\nexport interface EvidenceHtmlShellInput {\n  title?: string;\n  runIds: readonly string[];\n  assessmentStatus: EvidenceSafeStatus;\n  sourceStatus?: EvidenceSafeStatus;\n  redactionProfile: string;\n  verificationPolicy: string;\n  generatorName: string;\n  generatorVersion: string;\n  createdAt?: string;\n  evidenceFormatVersion?: string;\n  /** Optional short summary markdown already safe for display (will be escaped). */\n  summaryText?: string;\n  /** Bounded check counts (no finding payloads / prompts). */\n  checkSummary?: {\n    aggregateStatus: EvidenceSafeStatus;\n    runs: readonly {\n      runId: string;\n      status: EvidenceSafeStatus;\n      sourceStatus?: EvidenceSafeStatus;\n      errors: number;\n      warnings: number;\n      findings: number;\n    }[];\n  };\n  /** Max chars for embedded JSON payload (default 64 KiB). */\n  maxEmbeddedJsonChars?: number;\n  /**\n   * Pre-escaped HTML bodies for views. Missing ids keep the stub panel.\n   * Callers must pass only trusted, escaped fragments (use evidence view builders).\n   */\n  viewBodies?: Partial<Record<EvidenceViewId, string>>;\n  /**\n   * Safe contract-binding metadata only (status / digest / note). Never embed\n   * expected-value payloads in HTML (6.29.3).\n   */\n  contractBinding?: {\n    status: string;\n    sha256?: string;\n    note?: string;\n    ruleCount?: number;\n  };\n}\n\nfunction statusClass(status: string): string {\n  if (status === \"SAFE\") return \"st-safe\";\n  if (status === \"SAFE WITH WARNINGS\") return \"st-warn\";\n  if (status === \"UNSAFE\") return \"st-unsafe\";\n  return \"st-unknown\";\n}\n\nfunction viewLabel(id: EvidenceViewId): string {\n  switch (id) {\n    case \"summary\":\n      return \"Summary\";\n    case \"tree\":\n      return \"Tree\";\n    case \"timeline\":\n      return \"Timeline\";\n    case \"causal\":\n      return \"Causal failure\";\n    case \"tools-llm\":\n      return \"Tools / LLM\";\n    case \"outcomes\":\n      return \"Outcomes\";\n    case \"contracts\":\n      return \"Contracts / checks\";\n    case \"circuit\":\n      return \"Circuit / guardrails\";\n    case \"diff\":\n      return \"Diff\";\n    case \"safety\":\n      return \"Safety / redaction\";\n    case \"provenance\":\n      return \"Provenance\";\n    default: {\n      const _exhaustive: never = id;\n      return _exhaustive;\n    }\n  }\n}\n\n/**\n * Encode JSON for embedding in HTML without breaking out of a script/pre context.\n * Escapes `<` so `</script>` cannot appear in payload text.\n */\nexport function encodeEmbeddedEvidenceJson(value: unknown): string {\n  return JSON.stringify(value).replace(/</g, \"\\\\u003c\").replace(/>/g, \"\\\\u003e\");\n}\n\nfunction buildEmbeddedPayload(input: EvidenceHtmlShellInput): Record<string, unknown> {\n  return {\n    evidenceFormatVersion: input.evidenceFormatVersion ?? \"1.0\",\n    generator: {\n      name: input.generatorName,\n      version: input.generatorVersion,\n    },\n    createdAt: input.createdAt,\n    runIds: [...input.runIds],\n    assessment: {\n      status: input.assessmentStatus,\n      ...(input.sourceStatus !== undefined ? { sourceStatus: input.sourceStatus } : {}),\n    },\n    policy: {\n      redactionProfile: input.redactionProfile,\n      verificationPolicy: input.verificationPolicy,\n    },\n    checkSummary: input.checkSummary,\n    ...(input.contractBinding !== undefined\n      ? {\n          contract: {\n            status: input.contractBinding.status,\n            ...(input.contractBinding.sha256 !== undefined\n              ? { sha256: input.contractBinding.sha256 }\n              : {}),\n            ...(input.contractBinding.ruleCount !== undefined\n              ? { ruleCount: input.contractBinding.ruleCount }\n              : {}),\n            ...(input.contractBinding.note !== undefined\n              ? { note: input.contractBinding.note }\n              : {}),\n          },\n        }\n      : {}),\n  };\n}\n\n/**\n * Build a self-contained offline `evidence.html` shell (no external assets/network).\n * View panels beyond Summary are stubs filled in later 6.10 chunks.\n */\nexport function buildEvidenceHtmlShell(input: EvidenceHtmlShellInput): string {\n  if (input.runIds.length === 0) {\n    throw new Error(\"Evidence HTML shell requires at least one run id.\");\n  }\n\n  const maxChars = input.maxEmbeddedJsonChars ?? 64 * 1024;\n  let embedded = encodeEmbeddedEvidenceJson(buildEmbeddedPayload(input));\n  if (embedded.length > maxChars) {\n    embedded = encodeEmbeddedEvidenceJson({\n      truncated: true,\n      evidenceFormatVersion: input.evidenceFormatVersion ?? \"1.0\",\n      runIds: [...input.runIds],\n      assessment: { status: input.assessmentStatus },\n      note: \"Embedded payload truncated to bound; open evidence.json / trace files for full detail.\",\n    });\n  }\n\n  const title = escapeHtml(input.title ?? \"AgentInspect evidence\");\n  const runList = input.runIds\n    .map((id) => `<li><code>${escapeHtml(id)}</code></li>`)\n    .join(\"\");\n  const summaryBody =\n    input.summaryText !== undefined && input.summaryText.trim() !== \"\"\n      ? `<pre class=\"summary-md\">${escapeHtml(input.summaryText)}</pre>`\n      : `<p class=\"muted\">Open <code>summary.md</code> in this bundle for the full text summary.</p>`;\n\n  const checkRows =\n    input.checkSummary?.runs\n      .map(\n        (run) =>\n          `<tr><td><code>${escapeHtml(run.runId)}</code></td><td class=\"${statusClass(run.status)}\">${escapeHtml(run.status)}</td><td>${run.errors}</td><td>${run.warnings}</td><td>${run.findings}</td></tr>`,\n      )\n      .join(\"\") ?? \"\";\n\n  const nav = EVIDENCE_VIEW_IDS.map(\n    (id) =>\n      `<a class=\"nav-link\" href=\"#view-${id}\" data-view=\"${id}\">${escapeHtml(viewLabel(id))}</a>`,\n  ).join(\"\\n\");\n\n  const stubPanels = EVIDENCE_VIEW_IDS.filter((id) => id !== \"summary\")\n    .map((id) => {\n      const body = input.viewBodies?.[id];\n      if (body !== undefined && body.trim() !== \"\") {\n        return `  <section id=\"view-${id}\" class=\"panel\" hidden>\n    <h2>${escapeHtml(viewLabel(id))}</h2>\n    ${body}\n  </section>`;\n      }\n      return `  <section id=\"view-${id}\" class=\"panel\" hidden>\n    <h2>${escapeHtml(viewLabel(id))}</h2>\n    <p class=\"muted\">This view will be filled in a later AgentInspect 6.10 release. The shell is offline-ready.</p>\n  </section>`;\n    })\n    .join(\"\\n\");\n\n  return `<!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<meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'none'; style-src 'unsafe-inline'; script-src 'unsafe-inline'; img-src data:; base-uri 'none'; form-action 'none'; frame-ancestors 'none'\"/>\n<meta name=\"referrer\" content=\"no-referrer\"/>\n<title>${title}</title>\n<style>\n:root{--bg:#f7f7f5;--fg:#1a1a1a;--muted:#5c5c5c;--line:#d8d8d4;--accent:#0b5fff;--safe:#0a7a3e;--warn:#9a6700;--unsafe:#b42318;--unknown:#5c5c5c}\n*{box-sizing:border-box}\nbody{margin:0;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;background:var(--bg);color:var(--fg);line-height:1.5}\na{color:var(--accent)}\nheader{padding:1.25rem 1.5rem;border-bottom:1px solid var(--line);background:#fff}\nheader h1{margin:0 0 .35rem;font-size:1.35rem}\n.note{margin:0;color:var(--muted);font-size:.92rem;max-width:52rem}\n.layout{display:grid;grid-template-columns:14rem 1fr;min-height:70vh}\nnav{padding:1rem;border-right:1px solid var(--line);background:#fff}\nnav .nav-link{display:block;padding:.4rem .55rem;margin:0 0 .2rem;border-radius:.35rem;text-decoration:none;color:inherit}\nnav .nav-link:hover,nav .nav-link:focus{background:#eef3ff;outline:2px solid var(--accent);outline-offset:1px}\nmain{padding:1.25rem 1.5rem}\n.panel[hidden]{display:none}\n.badge{display:inline-block;padding:.15rem .55rem;border-radius:.3rem;font-size:.85rem;font-weight:600}\n.st-safe{color:var(--safe)}.st-warn{color:var(--warn)}.st-unsafe{color:var(--unsafe)}.st-unknown{color:var(--unknown)}\ntable{border-collapse:collapse;width:100%;max-width:48rem;background:#fff}\nth,td{border:1px solid var(--line);padding:.4rem .55rem;text-align:left;vertical-align:top}\nth{background:#f0f0ec}\n.summary-md,pre.data{white-space:pre-wrap;word-break:break-word;background:#fff;border:1px solid var(--line);padding:.75rem;max-width:52rem}\n.muted{color:var(--muted)}\nul.runs{margin:.4rem 0 1rem;padding-left:1.2rem}\n@media print{\n  nav{display:none}\n  .layout{display:block}\n  .panel[hidden]{display:block!important;page-break-before:always}\n  header{border:0}\n}\n@media (max-width:720px){\n  .layout{grid-template-columns:1fr}\n  nav{border-right:0;border-bottom:1px solid var(--line);display:flex;flex-wrap:wrap;gap:.25rem}\n}\n${EVIDENCE_VIEW_CSS}\n</style>\n</head>\n<body>\n<header>\n  <h1>${title}</h1>\n  <p class=\"note\">${escapeHtml(EVIDENCE_HTML_NOTE)}</p>\n</header>\n<div class=\"layout\">\n<nav aria-label=\"Evidence views\">\n${nav}\n</nav>\n<main id=\"main\">\n  <section id=\"view-summary\" class=\"panel\" tabindex=\"-1\">\n    <h2>Summary</h2>\n    <p>Artifact status: <span class=\"badge ${statusClass(input.assessmentStatus)}\">${escapeHtml(input.assessmentStatus)}</span>\n    ${\n      input.sourceStatus !== undefined\n        ? ` · Source status: <span class=\"badge ${statusClass(input.sourceStatus)}\">${escapeHtml(input.sourceStatus)}</span>`\n        : \"\"\n    }</p>\n    <p>Profile: <code>${escapeHtml(input.redactionProfile)}</code> · Verification: <code>${escapeHtml(input.verificationPolicy)}</code></p>\n${\n      input.contractBinding !== undefined\n        ? `    <p>Contract binding: <code>${escapeHtml(input.contractBinding.status)}</code>${\n            input.contractBinding.ruleCount !== undefined\n              ? ` · Rules: <code>${escapeHtml(String(input.contractBinding.ruleCount))}</code>`\n              : \"\"\n          }${\n            input.contractBinding.sha256 !== undefined\n              ? ` · Digest: <code>${escapeHtml(input.contractBinding.sha256.slice(0, 16))}…</code>`\n              : \"\"\n          }</p>${\n            input.contractBinding.note !== undefined && input.contractBinding.note.trim() !== \"\"\n              ? `\\n    <p class=\"muted\">${escapeHtml(input.contractBinding.note)}</p>`\n              : \"\"\n          }\\n`\n        : \"\"\n    }    <p>Generator: <code>${escapeHtml(input.generatorName)}@${escapeHtml(input.generatorVersion)}</code>\n    ${input.createdAt ? ` · Created: <code>${escapeHtml(input.createdAt)}</code>` : \"\"}</p>\n    <h3>Runs</h3>\n    <ul class=\"runs\">${runList}</ul>\n    ${\n      checkRows\n        ? `<h3>Check summary</h3>\n    <table>\n      <thead><tr><th>runId</th><th>artifact</th><th>errors</th><th>warnings</th><th>findings</th></tr></thead>\n      <tbody>${checkRows}</tbody>\n    </table>`\n        : \"\"\n    }\n    <h3>Text summary</h3>\n    ${summaryBody}\n  </section>\n${stubPanels}\n</main>\n</div>\n<script type=\"application/json\" id=\"ai-evidence-data\">${embedded}</script>\n<script>\n(function(){\n  var links=document.querySelectorAll(\"nav .nav-link\");\n  var panels=document.querySelectorAll(\"main .panel\");\n  function show(id){\n    for(var i=0;i<panels.length;i++){\n      var p=panels[i];\n      var on=p.id===\"view-\"+id;\n      if(on){p.removeAttribute(\"hidden\");}else{p.setAttribute(\"hidden\",\"\");}\n    }\n    for(var j=0;j<links.length;j++){\n      var a=links[j];\n      if(a.getAttribute(\"data-view\")===id){a.setAttribute(\"aria-current\",\"page\");}\n      else{a.removeAttribute(\"aria-current\");}\n    }\n  }\n  for(var k=0;k<links.length;k++){\n    links[k].addEventListener(\"click\",function(ev){\n      var id=ev.currentTarget.getAttribute(\"data-view\");\n      if(!id)return;\n      ev.preventDefault();\n      if(history.replaceState){history.replaceState(null,\"\",\"#view-\"+id);}\n      show(id);\n      var panel=document.getElementById(\"view-\"+id);\n      if(panel)panel.focus();\n    });\n  }\n  var hash=(location.hash||\"\").replace(/^#view-/,\"\");\n  var initial=\"summary\";\n  for(var n=0;n<links.length;n++){\n    if(links[n].getAttribute(\"data-view\")===hash){initial=hash;break;}\n  }\n  show(initial);\n})();\n</script>\n</body>\n</html>\n`;\n}\n\n/**\n * Convenience: build shell fields from an EvidenceManifest (views still stubbed).\n */\nexport function buildEvidenceHtmlShellFromManifest(\n  manifest: EvidenceManifest,\n  extras?: Partial<\n    Pick<EvidenceHtmlShellInput, \"summaryText\" | \"checkSummary\" | \"title\" | \"viewBodies\">\n  >,\n): string {\n  return buildEvidenceHtmlShell({\n    title: extras?.title,\n    runIds: manifest.source.runIds,\n    assessmentStatus: manifest.assessment.status,\n    sourceStatus: manifest.assessment.sourceStatus,\n    redactionProfile: manifest.policy.redactionProfile,\n    verificationPolicy: manifest.policy.verificationPolicy,\n    generatorName: manifest.generator.name,\n    generatorVersion: manifest.generator.version,\n    createdAt: manifest.createdAt,\n    evidenceFormatVersion: manifest.evidenceFormatVersion,\n    summaryText: extras?.summaryText,\n    checkSummary: extras?.checkSummary,\n    viewBodies: extras?.viewBodies,\n  });\n}\n","import type {\n  RunCompletedEvent,\n  RunStartedEvent,\n  StepCompletedEvent,\n  StepStartedEvent,\n  StepType,\n  TraceEvent,\n} from \"../types.js\";\n\nimport type { RunComparable, StepComparable } from \"./types.js\";\n\ntype StepAcc = {\n  id: string;\n  parentId?: string;\n  name: string;\n  type: StepType;\n  order: number;\n  timestamp: number;\n  metadata?: Record<string, unknown>;\n  status?: \"success\" | \"error\";\n  durationMs?: number;\n  errorMsg?: string;\n};\n\nfunction extractOutputPreview(meta: Record<string, unknown> | undefined): unknown {\n  if (meta === undefined) return undefined;\n  if (\"outputPreview\" in meta) return meta.outputPreview;\n  if (\"resultPreview\" in meta) return meta.resultPreview;\n  return undefined;\n}\n\nfunction mapStepStatus(s: \"success\" | \"error\" | undefined): string {\n  if (s === undefined) return \"running\";\n  return s;\n}\n\n/**\n * Normalize v0.1 manual JSONL events into a comparable run tree.\n * Does not mutate input events.\n */\nexport function manualTraceEventsToComparableRun(events: TraceEvent[]): RunComparable {\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 rs = started as RunStartedEvent;\n  const runId = rs.runId;\n\n  const completedAll = events.filter((e) => e.event === \"run_completed\");\n  const lastCompleted = completedAll[completedAll.length - 1] as RunCompletedEvent | undefined;\n\n  let runStatus: string | undefined;\n  if (lastCompleted === undefined) runStatus = \"running\";\n  else runStatus = lastCompleted.status;\n\n  const durationMs =\n    lastCompleted !== undefined && Number.isFinite(lastCompleted.durationMs)\n      ? lastCompleted.durationMs\n      : undefined;\n\n  const steps = new Map<string, StepAcc>();\n  let order = 0;\n\n  for (const e of events) {\n    if (e.event !== \"step_started\") continue;\n    const s = e as StepStartedEvent;\n    const meta = s.metadata ? { ...(s.metadata as Record<string, unknown>) } : undefined;\n    steps.set(s.stepId, {\n      id: s.stepId,\n      parentId: s.parentId,\n      name: s.name,\n      type: s.type,\n      order: order++,\n      timestamp: s.timestamp,\n      metadata: meta,\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.durationMs = e.durationMs;\n    if (e.error?.message) acc.errorMsg = e.error.message;\n    const extra = e as StepCompletedEvent & { metadata?: Record<string, unknown> };\n    if (extra.metadata !== undefined && typeof extra.metadata === \"object\") {\n      acc.metadata = { ...(acc.metadata ?? {}), ...extra.metadata };\n    }\n  }\n\n  const nodes = new Map<string, StepComparable>();\n\n  for (const acc of steps.values()) {\n    let meta = acc.metadata ? { ...acc.metadata } : undefined;\n    if (acc.parentId !== undefined && !steps.has(acc.parentId)) {\n      meta = { ...(meta ?? {}), agent_inspect_diff_parent_missing: true };\n    }\n\n    // Previews are compared as their own \"output\" dimension; strip them from\n    // the metadata copy so one preview change is not also reported as a\n    // metadata diff.\n    const outputPreview = extractOutputPreview(meta);\n    if (meta !== undefined && (\"outputPreview\" in meta || \"resultPreview\" in meta)) {\n      delete meta.outputPreview;\n      delete meta.resultPreview;\n    }\n\n    const sc: StepComparable = {\n      id: acc.id,\n      name: acc.name,\n      type: acc.type,\n      status: mapStepStatus(acc.status),\n      durationMs: acc.durationMs,\n      error: acc.errorMsg,\n      metadata: meta && Object.keys(meta).length > 0 ? meta : undefined,\n      outputPreview,\n      children: [],\n    };\n    nodes.set(acc.id, sc);\n  }\n\n  const roots: StepComparable[] = [];\n  const sortByOrder = (a: StepComparable, b: StepComparable) => {\n    const oa = steps.get(a.id)?.order ?? 0;\n    const ob = steps.get(b.id)?.order ?? 0;\n    return oa - ob;\n  };\n\n  for (const acc of steps.values()) {\n    const node = nodes.get(acc.id)!;\n    if (acc.parentId !== undefined && nodes.has(acc.parentId)) {\n      nodes.get(acc.parentId)!.children.push(node);\n    } else {\n      roots.push(node);\n    }\n  }\n\n  roots.sort(sortByOrder);\n  for (const n of nodes.values()) {\n    n.children.sort(sortByOrder);\n  }\n\n  return {\n    runId,\n    name: rs.name,\n    status: runStatus,\n    durationMs,\n    steps: roots,\n  };\n}\n","import { stableJson } from \"../exporters/helpers.js\";\n\nimport type {\n  DiffKind,\n  DiffOptions,\n  DiffPath,\n  DiffPathSegment,\n  RunComparable,\n  RunDiffItem,\n  RunDiffResult,\n  RunDiffSummary,\n  StepComparable,\n} from \"./types.js\";\n\nconst DEFAULT_THRESHOLD_MS = 0;\n\nfunction pathSeg(step: StepComparable, index: number): DiffPathSegment {\n  return { index, name: step.name, stepId: step.id };\n}\n\nfunction buildPath(segments: DiffPathSegment[]): DiffPath {\n  return { path: [...segments] };\n}\n\n/** Pair steps: match by id, then same index, then name+type. */\nexport function pairSteps(\n  left: StepComparable[],\n  right: StepComparable[],\n): Array<[StepComparable | undefined, StepComparable | undefined]> {\n  const usedRight = new Set<string>();\n  const pairs: Array<[StepComparable | undefined, StepComparable | undefined]> = [];\n\n  for (let i = 0; i < left.length; i++) {\n    const L = left[i]!;\n    let R = right.find((r) => !usedRight.has(r.id) && r.id === L.id);\n    if (R === undefined && i < right.length && !usedRight.has(right[i]!.id)) {\n      const cand = right[i]!;\n      if (cand.name === L.name && (cand.type ?? \"\") === (L.type ?? \"\")) {\n        R = cand;\n      }\n    }\n    if (R === undefined) {\n      R = right.find(\n        (r) =>\n          !usedRight.has(r.id) &&\n          r.name === L.name &&\n          (r.type ?? \"\") === (L.type ?? \"\"),\n      );\n    }\n    if (R !== undefined) {\n      usedRight.add(R.id);\n      pairs.push([L, R]);\n    } else {\n      pairs.push([L, undefined]);\n    }\n  }\n\n  for (const R of right) {\n    if (!usedRight.has(R.id)) {\n      pairs.push([undefined, R]);\n    }\n  }\n\n  return pairs;\n}\n\nfunction compareLeafSteps(\n  L: StepComparable,\n  R: StepComparable,\n  segments: DiffPathSegment[],\n  opts: Required<Pick<DiffOptions, \"ignoreDuration\" | \"durationThresholdMs\">>,\n  out: RunDiffItem[],\n): void {\n  const path = buildPath(segments);\n\n  if (L.name !== R.name) {\n    out.push({\n      kind: \"structure\",\n      severity: \"warning\",\n      message: \"Step name differs\",\n      path,\n      left: L.name,\n      right: R.name,\n    });\n  }\n\n  if ((L.type ?? \"\") !== (R.type ?? \"\")) {\n    out.push({\n      kind: \"step-type\",\n      severity: \"warning\",\n      message: \"Step type differs\",\n      path,\n      left: L.type,\n      right: R.type,\n    });\n  }\n\n  if ((L.status ?? \"\") !== (R.status ?? \"\")) {\n    out.push({\n      kind: \"step-status\",\n      severity: \"warning\",\n      message: \"Step status differs\",\n      path,\n      left: L.status,\n      right: R.status,\n    });\n  }\n\n  const le = L.error ?? \"\";\n  const re = R.error ?? \"\";\n  if (le !== re) {\n    out.push({\n      kind: \"error\",\n      severity: \"error\",\n      message: \"Step error message differs\",\n      path,\n      left: le || undefined,\n      right: re || undefined,\n    });\n  }\n\n  if (!opts.ignoreDuration) {\n    const ld = L.durationMs;\n    const rd = R.durationMs;\n    const th = opts.durationThresholdMs;\n    let differs = false;\n    if (ld === undefined && rd === undefined) differs = false;\n    else if (ld === undefined || rd === undefined) differs = true;\n    else differs = Math.abs(ld - rd) > th;\n    if (differs) {\n      out.push({\n        kind: \"duration\",\n        severity: \"info\",\n        message: \"Step duration differs\",\n        path,\n        left: ld,\n        right: rd,\n      });\n    }\n  }\n\n  const lm = stableJson(L.metadata ?? {});\n  const rm = stableJson(R.metadata ?? {});\n  if (lm !== rm) {\n    out.push({\n      kind: \"metadata\",\n      severity: \"info\",\n      message: \"Step metadata differs\",\n      path,\n      left: L.metadata,\n      right: R.metadata,\n    });\n  }\n\n  const lo = stableJson(L.outputPreview ?? null);\n  const ro = stableJson(R.outputPreview ?? null);\n  if (lo !== ro) {\n    out.push({\n      kind: \"output\",\n      severity: \"info\",\n      message: \"Output preview differs\",\n      path,\n      left: L.outputPreview,\n      right: R.outputPreview,\n    });\n  }\n}\n\nfunction compareRecursive(\n  L: StepComparable,\n  R: StepComparable,\n  segments: DiffPathSegment[],\n  opts: Required<Pick<DiffOptions, \"ignoreDuration\" | \"durationThresholdMs\">>,\n  out: RunDiffItem[],\n): void {\n  compareLeafSteps(L, R, segments, opts, out);\n\n  const pairs = pairSteps(L.children, R.children);\n  let ci = 0;\n  for (const [lch, rch] of pairs) {\n    if (lch !== undefined && rch !== undefined) {\n      compareRecursive(lch, rch, [...segments, pathSeg(lch, ci)], opts, out);\n    } else if (lch !== undefined) {\n      out.push({\n        kind: \"step-removed\",\n        severity: \"warning\",\n        message: `Step only in left run: ${lch.name}`,\n        path: buildPath([...segments, pathSeg(lch, ci)]),\n        left: lch.id,\n        right: undefined,\n      });\n    } else if (rch !== undefined) {\n      out.push({\n        kind: \"step-added\",\n        severity: \"warning\",\n        message: `Step only in right run: ${rch.name}`,\n        path: buildPath([...segments, pathSeg(rch, ci)]),\n        left: undefined,\n        right: rch.id,\n      });\n    }\n    ci += 1;\n  }\n}\n\nfunction mergeDiffDefaults(options?: DiffOptions): Required<\n  Pick<DiffOptions, \"ignoreDuration\" | \"durationThresholdMs\" | \"focus\" | \"check\">\n> {\n  return {\n    ignoreDuration: options?.ignoreDuration ?? false,\n    durationThresholdMs:\n      options?.durationThresholdMs !== undefined\n        ? options.durationThresholdMs\n        : DEFAULT_THRESHOLD_MS,\n    focus: options?.focus ?? \"all\",\n    check: options?.check ?? \"all\",\n  };\n}\n\nfunction kindMatchesFilter(kind: DiffKind, merged: ReturnType<typeof mergeDiffDefaults>): boolean {\n  const { focus, check } = merged;\n\n  if (check !== \"all\") {\n    if (check === \"structure\") {\n      if (![\"step-added\", \"step-removed\", \"structure\", \"step-type\"].includes(kind)) return false;\n    } else if (check === \"outputs\") {\n      if (![\"metadata\", \"output\"].includes(kind)) return false;\n    } else if (check === \"errors\") {\n      if (![\"run-status\", \"step-status\", \"error\"].includes(kind)) return false;\n    } else if (check === \"timing\") {\n      if (kind !== \"duration\") return false;\n    }\n  }\n\n  if (focus !== \"all\") {\n    if (focus === \"errors\") {\n      if (![\"run-status\", \"step-status\", \"error\"].includes(kind)) return false;\n    } else if (focus === \"structure\") {\n      if (![\"step-added\", \"step-removed\", \"structure\", \"step-type\"].includes(kind)) return false;\n    } else if (focus === \"outputs\") {\n      if (![\"metadata\", \"output\"].includes(kind)) return false;\n    }\n  }\n\n  return true;\n}\n\nexport function diffRuns(\n  left: RunComparable,\n  right: RunComparable,\n  options?: DiffOptions,\n): RunDiffResult {\n  const merged = mergeDiffDefaults(options);\n  const opts = {\n    ignoreDuration: merged.ignoreDuration,\n    durationThresholdMs: merged.durationThresholdMs,\n  };\n\n  const raw: RunDiffItem[] = [];\n\n  if ((left.status ?? \"\") !== (right.status ?? \"\")) {\n    raw.push({\n      kind: \"run-status\",\n      severity: \"warning\",\n      message: \"Run completion status differs\",\n      left: left.status,\n      right: right.status,\n    });\n  }\n\n  if (!merged.ignoreDuration) {\n    const ld = left.durationMs;\n    const rd = right.durationMs;\n    const th = merged.durationThresholdMs;\n    let differs = false;\n    if (ld === undefined && rd === undefined) differs = false;\n    else if (ld === undefined || rd === undefined) differs = true;\n    else differs = Math.abs(ld - rd) > th;\n    if (differs) {\n      raw.push({\n        kind: \"duration\",\n        severity: \"info\",\n        message: \"Run duration differs\",\n        left: ld,\n        right: rd,\n      });\n    }\n  }\n\n  const pairs = pairSteps(left.steps, right.steps);\n  let idx = 0;\n  for (const [ls, rs] of pairs) {\n    if (ls !== undefined && rs !== undefined) {\n      compareRecursive(ls, rs, [pathSeg(ls, idx)], opts, raw);\n      idx += 1;\n    } else if (ls !== undefined) {\n      raw.push({\n        kind: \"step-removed\",\n        severity: \"warning\",\n        message: `Step only in left run: ${ls.name}`,\n        path: buildPath([pathSeg(ls, idx)]),\n        left: ls.id,\n        right: undefined,\n      });\n      idx += 1;\n    } else if (rs !== undefined) {\n      raw.push({\n        kind: \"step-added\",\n        severity: \"warning\",\n        message: `Step only in right run: ${rs.name}`,\n        path: buildPath([pathSeg(rs, idx)]),\n        left: undefined,\n        right: rs.id,\n      });\n      idx += 1;\n    }\n  }\n\n  const differences = raw.filter((d) => kindMatchesFilter(d.kind, merged));\n\n  let errors = 0;\n  let warnings = 0;\n  let info = 0;\n  for (const d of differences) {\n    if (d.severity === \"error\") errors += 1;\n    else if (d.severity === \"warning\") warnings += 1;\n    else info += 1;\n  }\n\n  const firstVisible = differences[0];\n  const firstDivergence: RunDiffItem | undefined =\n    firstVisible !== undefined\n      ? {\n          kind: \"first-divergence\",\n          severity: firstVisible.severity,\n          message: `First divergence: ${firstVisible.message}`,\n          path: firstVisible.path,\n          left: firstVisible.left,\n          right: firstVisible.right,\n        }\n      : undefined;\n\n  const summary: RunDiffSummary = {\n    leftRunId: left.runId,\n    rightRunId: right.runId,\n    totalDifferences: differences.length,\n    errors,\n    warnings,\n    info,\n    firstDivergence,\n  };\n\n  return { summary, differences };\n}\n","import chalk from \"chalk\";\n\nimport type { RenderDiffOptions, RunDiffResult } from \"./types.js\";\n\nfunction formatPath(path?: import(\"./types.js\").DiffPath): string {\n  if (path === undefined || path.path.length === 0) {\n    return \"(run)\";\n  }\n  return path.path.map((s) => s.name).join(\" > \");\n}\n\nfunction formatValue(v: unknown, verbose: boolean): string {\n  if (v === undefined) return \"(undefined)\";\n  if (typeof v === \"string\") return v;\n  if (typeof v === \"number\" || typeof v === \"boolean\") return String(v);\n  const s = JSON.stringify(v);\n  if (verbose || s.length <= 120) return s;\n  return `${s.slice(0, 117)}...`;\n}\n\nexport function renderRunDiff(result: RunDiffResult, options?: RenderDiffOptions): string {\n  const json = options?.json === true;\n  const verbose = options?.verbose === true;\n  const color = options?.color === true;\n\n  if (json) {\n    return JSON.stringify(result, null, 2);\n  }\n\n  const sev = (s: string, level: \"error\" | \"warning\" | \"info\"): string => {\n    if (!color) return s;\n    if (level === \"error\") return chalk.red(s);\n    if (level === \"warning\") return chalk.yellow(s);\n    return chalk.gray(s);\n  };\n\n  const lines: string[] = [];\n  const { summary } = result;\n\n  lines.push(\"Run diff\");\n  lines.push(`Left:  ${summary.leftRunId}`);\n  lines.push(`Right: ${summary.rightRunId}`);\n  lines.push(\"\");\n  lines.push(\"Summary:\");\n  lines.push(`  Differences: ${summary.totalDifferences}`);\n  lines.push(`  Errors: ${summary.errors}`);\n  lines.push(`  Warnings: ${summary.warnings}`);\n  lines.push(`  Info: ${summary.info}`);\n  lines.push(\"\");\n\n  const fd = summary.firstDivergence;\n  const firstKind = result.differences[0]?.kind;\n  if (fd !== undefined) {\n    lines.push(\"First divergence:\");\n    const where = formatPath(fd.path);\n    const displayKind = firstKind ?? fd.kind;\n    lines.push(`  ${displayKind} at ${where}`);\n    if (fd.left !== undefined || fd.right !== undefined) {\n      lines.push(`    left: ${formatValue(fd.left, verbose)}`);\n      lines.push(`    right: ${formatValue(fd.right, verbose)}`);\n    }\n    lines.push(\"\");\n  }\n\n  lines.push(\"Differences:\");\n  if (result.differences.length === 0) {\n    lines.push(\"  (none)\");\n    return lines.join(\"\\n\");\n  }\n\n  const showSides = (kind: string): boolean =>\n    verbose ||\n    [\n      \"run-status\",\n      \"step-status\",\n      \"error\",\n      \"duration\",\n      \"step-type\",\n      \"structure\",\n      \"step-added\",\n      \"step-removed\",\n    ].includes(kind);\n\n  for (const d of result.differences) {\n    const tag = sev(`[${d.severity}]`, d.severity);\n    const pathStr = d.path !== undefined ? ` ${formatPath(d.path)}` : \"\";\n    lines.push(`  ${tag} ${d.kind}${pathStr}`);\n    lines.push(`    ${d.message}`);\n    if (d.left !== undefined || d.right !== undefined) {\n      if (showSides(d.kind)) {\n        lines.push(`    left: ${formatValue(d.left, verbose)}`);\n        lines.push(`    right: ${formatValue(d.right, verbose)}`);\n      }\n    }\n  }\n\n  return lines.join(\"\\n\");\n}\n","import type { TraceEvent } from \"../types.js\";\n\nimport { manualTraceEventsToComparableRun } from \"./comparable.js\";\nimport { diffRuns } from \"./engine.js\";\nimport type { DiffOptions, RunDiffResult } from \"./types.js\";\n\nexport type {\n  DiffSeverity,\n  DiffKind,\n  DiffPathSegment,\n  DiffPath,\n  RunDiffItem,\n  StepComparable,\n  RunComparable,\n  RunDiffSummary,\n  RunDiffResult,\n  DiffOptions,\n  RenderDiffOptions,\n} from \"./types.js\";\n\nexport { manualTraceEventsToComparableRun } from \"./comparable.js\";\nexport { diffRuns } from \"./engine.js\";\nexport { renderRunDiff } from \"./renderer.js\";\n\n/**\n * @experimental Compare two v0.1 manual traces as normalized trees (read-only).\n * Subject to refinement before a future stability declaration.\n */\nexport function diffTraceEvents(\n  leftEvents: TraceEvent[],\n  rightEvents: TraceEvent[],\n  options?: DiffOptions,\n): RunDiffResult {\n  const left = manualTraceEventsToComparableRun(leftEvents);\n  const right = manualTraceEventsToComparableRun(rightEvents);\n  return diffRuns(left, right, options);\n}\n","import { escapeHtml } from \"../exporters/helpers.js\";\nimport {\n  extractOutcomesFromPersistedEvents,\n  renderObservedOutcomesHtml,\n  summarizeObservedOutcomes,\n} from \"../outcomes/index.js\";\nimport { persistedInspectEventsToTraceEvents } from \"../persisted/to-trace-event.js\";\nimport { diffTraceEvents, renderRunDiff } from \"../diff/index.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\n\nexport interface EvidenceCheckFindingSummary {\n  runId: string;\n  ruleId: string;\n  severity: string;\n  message: string;\n  category?: string;\n  detector?: string;\n  confidence?: string;\n  action?: string;\n}\n\nexport interface EvidenceContractsViewInput {\n  aggregateStatus: string;\n  runs: readonly {\n    runId: string;\n    status: string;\n    sourceStatus?: string;\n    errors: number;\n    warnings: number;\n    findings: number;\n  }[];\n  findingSummaries?: readonly EvidenceCheckFindingSummary[];\n}\n\nfunction boundMessage(message: string, max = 200): string {\n  const trimmed = message.trim();\n  if (trimmed.length <= max) return trimmed;\n  return `${trimmed.slice(0, max)}…`;\n}\n\n/**\n * Contracts / checks HTML: aggregate status + bounded finding taxonomy (no evidence payloads).\n */\nexport function buildEvidenceContractsViewHtml(input: EvidenceContractsViewInput): string {\n  const rows = input.runs\n    .map(\n      (run) =>\n        `<tr><td><code>${escapeHtml(run.runId)}</code></td><td>${escapeHtml(run.status)}</td><td>${escapeHtml(run.sourceStatus ?? \"—\")}</td><td>${run.errors}</td><td>${run.warnings}</td><td>${run.findings}</td></tr>`,\n    )\n    .join(\"\");\n\n  const findings = input.findingSummaries ?? [];\n  const findingRows =\n    findings.length === 0\n      ? `<p class=\"muted\">No structured check findings recorded for the redacted artifact.</p>`\n      : `<table>\n  <thead><tr><th>runId</th><th>severity</th><th>rule</th><th>category</th><th>detector</th><th>message</th></tr></thead>\n  <tbody>${findings\n    .map(\n      (f) =>\n        `<tr><td><code>${escapeHtml(f.runId)}</code></td><td>${escapeHtml(f.severity)}</td><td><code>${escapeHtml(f.ruleId)}</code></td><td>${escapeHtml(f.category ?? \"—\")}</td><td>${escapeHtml(f.detector ?? \"—\")}</td><td>${escapeHtml(boundMessage(f.message))}</td></tr>`,\n    )\n    .join(\"\")}</tbody>\n</table>`;\n\n  return `<p>Aggregate artifact status: <strong>${escapeHtml(input.aggregateStatus)}</strong></p>\n<table>\n  <thead><tr><th>runId</th><th>artifact</th><th>source</th><th>errors</th><th>warnings</th><th>findings</th></tr></thead>\n  <tbody>${rows}</tbody>\n</table>\n<h3>Finding summaries</h3>\n${findingRows}\n<p class=\"muted\">TraceContract / check details are best-effort local results — not a compliance certification.</p>`;\n}\n\n/**\n * Observed outcomes view from persisted inspect events (redacted artifact).\n */\nexport function buildEvidenceOutcomesViewHtml(\n  runs: readonly { runId: string; events: readonly PersistedInspectEvent[] }[],\n): string {\n  if (runs.length === 0) {\n    return `<p class=\"muted\">No runs available for outcome extraction.</p>`;\n  }\n  const parts: string[] = [];\n  for (const run of runs) {\n    const forRun = run.events.filter((event) => event.runId === run.runId);\n    const summary = summarizeObservedOutcomes(extractOutcomesFromPersistedEvents(forRun));\n    parts.push(`<article class=\"run-block\">`);\n    parts.push(`<h3><code>${escapeHtml(run.runId)}</code></h3>`);\n    parts.push(renderObservedOutcomesHtml(summary));\n    parts.push(`</article>`);\n  }\n  return parts.join(\"\\n\");\n}\n\n/**\n * Diff view: when two event sets are supplied, render a local run diff.\n * Otherwise show an empty-state explaining baseline/candidate is optional.\n */\nexport function buildEvidenceDiffViewHtml(parts?: {\n  leftRunId: string;\n  rightRunId: string;\n  leftEvents: readonly PersistedInspectEvent[];\n  rightEvents: readonly PersistedInspectEvent[];\n}): string {\n  if (\n    parts === undefined ||\n    parts.leftEvents.length === 0 ||\n    parts.rightEvents.length === 0\n  ) {\n    return `<p class=\"muted\">No baseline/candidate pair was supplied for this evidence bundle. Attach two runs (or a reporter baseline) to populate this view.</p>`;\n  }\n\n  try {\n    const left = persistedInspectEventsToTraceEvents(\n      parts.leftEvents.filter((e) => e.runId === parts.leftRunId),\n    );\n    const right = persistedInspectEventsToTraceEvents(\n      parts.rightEvents.filter((e) => e.runId === parts.rightRunId),\n    );\n    if (left.length === 0 || right.length === 0) {\n      return `<p class=\"muted\">Could not normalize both runs for diff (missing v0.1-compatible events).</p>`;\n    }\n    const result = diffTraceEvents(left, right);\n    const text = renderRunDiff(result, { color: false, verbose: false });\n    return `<p>Comparing <code>${escapeHtml(parts.leftRunId)}</code> → <code>${escapeHtml(parts.rightRunId)}</code></p>\n<pre class=\"summary-md\">${escapeHtml(text)}</pre>`;\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return `<p class=\"muted\">Diff unavailable: ${escapeHtml(message)}</p>`;\n  }\n}\n","import { escapeHtml, flattenTree } from \"../exporters/helpers.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { EvidenceCheckFindingSummary } from \"./views-contract.js\";\nimport type { EvidenceSafeStatus, EvidenceSourceHash } from \"./types.js\";\n\nexport interface EvidenceSafetyViewInput {\n  artifactStatus: EvidenceSafeStatus | string;\n  sourceStatus?: EvidenceSafeStatus | string;\n  redactionProfile: string;\n  verificationPolicy: string;\n  redaction?: {\n    totalFindings: number;\n    runs: readonly { runId: string; findings: number; detectors: string[] }[];\n  };\n  findingSummaries?: readonly EvidenceCheckFindingSummary[];\n}\n\nexport interface EvidenceProvenanceViewInput {\n  generatorName: string;\n  generatorVersion: string;\n  evidenceFormatVersion: string;\n  createdAt?: string;\n  runIds: readonly string[];\n  traceSchemaVersions: readonly string[];\n  sourceHashes: readonly EvidenceSourceHash[];\n  packagedFiles: readonly { path: string; role?: string }[];\n  note?: string;\n}\n\n/**\n * Safety / redaction view: artifact vs source status + detector summary (no raw secrets).\n */\nexport function buildEvidenceSafetyViewHtml(input: EvidenceSafetyViewInput): string {\n  const findingRows =\n    (input.findingSummaries ?? []).length === 0\n      ? `<p class=\"muted\">No safety findings on the redacted artifact.</p>`\n      : `<table>\n  <thead><tr><th>runId</th><th>severity</th><th>category</th><th>detector</th><th>action</th><th>message</th></tr></thead>\n  <tbody>${(input.findingSummaries ?? [])\n    .map((f) => {\n      const msg =\n        f.message.length > 160 ? `${f.message.slice(0, 160)}…` : f.message;\n      return `<tr><td><code>${escapeHtml(f.runId)}</code></td><td>${escapeHtml(f.severity)}</td><td>${escapeHtml(f.category ?? \"—\")}</td><td>${escapeHtml(f.detector ?? \"—\")}</td><td>${escapeHtml(f.action ?? \"—\")}</td><td>${escapeHtml(msg)}</td></tr>`;\n    })\n    .join(\"\")}</tbody>\n</table>`;\n\n  const redactionBlock =\n    input.redaction === undefined\n      ? `<p class=\"muted\">No redaction report attached.</p>`\n      : `<p>Total redaction findings: <strong>${input.redaction.totalFindings}</strong></p>\n<ul>${input.redaction.runs\n          .map(\n            (run) =>\n              `<li><code>${escapeHtml(run.runId)}</code>: ${run.findings} finding(s); detectors: ${escapeHtml(run.detectors.join(\", \") || \"none\")}</li>`,\n          )\n          .join(\"\")}</ul>`;\n\n  return `<p>Artifact status: <strong>${escapeHtml(String(input.artifactStatus))}</strong>\n  ${\n    input.sourceStatus !== undefined\n      ? ` · Source status: <strong>${escapeHtml(String(input.sourceStatus))}</strong>`\n      : \"\"\n  }</p>\n<p>Redaction profile: <code>${escapeHtml(input.redactionProfile)}</code> · Verification: <code>${escapeHtml(input.verificationPolicy)}</code></p>\n<h3>Redaction</h3>\n${redactionBlock}\n<h3>Safety findings (artifact)</h3>\n${findingRows}\n<p class=\"muted\">Best-effort local verification only — not a compliance certification. Gate sharing on artifact status.</p>`;\n}\n\n/**\n * Provenance / mapping view: generator, schema versions, source hashes, packaged roles.\n */\nexport function buildEvidenceProvenanceViewHtml(input: EvidenceProvenanceViewInput): string {\n  const hashes =\n    input.sourceHashes.length === 0\n      ? `<p class=\"muted\">No source hashes recorded.</p>`\n      : `<table>\n  <thead><tr><th>runId</th><th>algorithm</th><th>hash</th></tr></thead>\n  <tbody>${input.sourceHashes\n    .map(\n      (h) =>\n        `<tr><td><code>${escapeHtml(h.runId)}</code></td><td>${escapeHtml(h.algorithm)}</td><td><code>${escapeHtml(h.hash)}</code></td></tr>`,\n    )\n    .join(\"\")}</tbody>\n</table>`;\n\n  const files =\n    input.packagedFiles.length === 0\n      ? `<p class=\"muted\">No packaged files listed.</p>`\n      : `<ul>${input.packagedFiles\n          .map(\n            (f) =>\n              `<li><code>${escapeHtml(f.path)}</code>${f.role ? ` <span class=\"meta\">(${escapeHtml(f.role)})</span>` : \"\"}</li>`,\n          )\n          .join(\"\")}</ul>`;\n\n  return `<p>Generator: <code>${escapeHtml(input.generatorName)}@${escapeHtml(input.generatorVersion)}</code>\n  · Evidence format: <code>${escapeHtml(input.evidenceFormatVersion)}</code>\n  ${input.createdAt ? ` · Created: <code>${escapeHtml(input.createdAt)}</code>` : \"\"}</p>\n<p>Runs: ${input.runIds.map((id) => `<code>${escapeHtml(id)}</code>`).join(\", \")}</p>\n<p>Trace schema versions: ${\n    input.traceSchemaVersions.length > 0\n      ? input.traceSchemaVersions.map((v) => `<code>${escapeHtml(v)}</code>`).join(\", \")\n      : \"<span class=\\\"muted\\\">unknown</span>\"\n  }</p>\n<h3>Source hashes (pre-redaction input)</h3>\n${hashes}\n<h3>Packaged files</h3>\n${files}\n<p class=\"muted\">${escapeHtml(input.note ?? \"Reader/mapping losses are reported elsewhere when present; relationships are never invented without confidence policy.\")}</p>`;\n}\n\n/**\n * Tools / LLM metadata view: names, kinds, statuses, durations — no prompts/outputs.\n */\nexport function buildEvidenceToolsLlmViewHtml(trees: readonly InspectRunTree[]): string {\n  if (trees.length === 0) {\n    return `<p class=\"muted\">No runs available for tool/LLM metadata.</p>`;\n  }\n  const parts: string[] = [];\n  for (const tree of trees) {\n    const nodes = flattenTree(tree).filter(\n      (n) => n.event.kind === \"TOOL\" || n.event.kind === \"LLM\" || n.event.kind === \"AGENT\",\n    );\n    parts.push(`<article class=\"run-block\">`);\n    parts.push(`<h3><code>${escapeHtml(tree.runId)}</code></h3>`);\n    if (nodes.length === 0) {\n      parts.push(`<p class=\"muted\">No TOOL/LLM/AGENT events in this run.</p>`);\n    } else {\n      parts.push(`<table>\n  <thead><tr><th>name</th><th>kind</th><th>status</th><th>durationMs</th></tr></thead>\n  <tbody>${nodes\n    .map((n) => {\n      const dur =\n        n.event.durationMs !== undefined && Number.isFinite(n.event.durationMs)\n          ? String(n.event.durationMs)\n          : \"—\";\n      return `<tr><td>${escapeHtml(n.event.name)}</td><td>${escapeHtml(n.event.kind)}</td><td>${escapeHtml(n.event.status ?? \"?\")}</td><td>${escapeHtml(dur)}</td></tr>`;\n    })\n    .join(\"\")}</tbody>\n</table>`);\n    }\n    parts.push(`</article>`);\n  }\n  return parts.join(\"\\n\");\n}\n\n/**\n * Circuit / guardrails placeholder filled with conservative empty state unless findings supplied.\n */\nexport function buildEvidenceCircuitViewHtml(parts?: {\n  findings?: readonly { runId: string; name: string; status: string; detail?: string }[];\n}): string {\n  const findings = parts?.findings ?? [];\n  if (findings.length === 0) {\n    return `<p class=\"muted\">No circuit or guardrail findings were attached to this evidence bundle.</p>`;\n  }\n  return `<table>\n  <thead><tr><th>runId</th><th>name</th><th>status</th><th>detail</th></tr></thead>\n  <tbody>${findings\n    .map(\n      (f) =>\n        `<tr><td><code>${escapeHtml(f.runId)}</code></td><td>${escapeHtml(f.name)}</td><td>${escapeHtml(f.status)}</td><td>${escapeHtml(f.detail ?? \"—\")}</td></tr>`,\n    )\n    .join(\"\")}</tbody>\n</table>`;\n}\n","import { assertEvidenceRelativePath } from \"./paths.js\";\n\nexport interface ZipEntry {\n  path: string;\n  content: string | Uint8Array;\n}\n\nconst CRC_TABLE = (() => {\n  const table = new Uint32Array(256);\n  for (let n = 0; n < 256; n += 1) {\n    let c = n;\n    for (let k = 0; k < 8; k += 1) {\n      c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n    }\n    table[n] = c >>> 0;\n  }\n  return table;\n})();\n\nfunction crc32(data: Uint8Array): number {\n  let crc = 0xffffffff;\n  for (let i = 0; i < data.length; i += 1) {\n    crc = CRC_TABLE[(crc ^ data[i]!) & 0xff]! ^ (crc >>> 8);\n  }\n  return (crc ^ 0xffffffff) >>> 0;\n}\n\nfunction toBytes(content: string | Uint8Array): Uint8Array {\n  return typeof content === \"string\" ? Buffer.from(content, \"utf8\") : content;\n}\n\nfunction u16(value: number): Buffer {\n  const buf = Buffer.alloc(2);\n  buf.writeUInt16LE(value >>> 0, 0);\n  return buf;\n}\n\nfunction u32(value: number): Buffer {\n  const buf = Buffer.alloc(4);\n  buf.writeUInt32LE(value >>> 0, 0);\n  return buf;\n}\n\n/**\n * Build a minimal ZIP archive (STORE method) with traversal-safe relative paths.\n * No external dependencies — suitable for Evidence `--format zip`.\n */\nexport function buildZipArchive(entries: readonly ZipEntry[]): Buffer {\n  if (entries.length === 0) {\n    throw new Error(\"ZIP archive requires at least one entry.\");\n  }\n\n  const locals: Buffer[] = [];\n  const centrals: Buffer[] = [];\n  let offset = 0;\n\n  const seen = new Set<string>();\n  for (const entry of entries) {\n    const name = assertEvidenceRelativePath(entry.path);\n    if (seen.has(name)) {\n      throw new Error(`Duplicate ZIP entry path: ${name}`);\n    }\n    seen.add(name);\n\n    const nameBytes = Buffer.from(name, \"utf8\");\n    const data = toBytes(entry.content);\n    const checksum = crc32(data);\n    const size = data.byteLength;\n\n    const local = Buffer.concat([\n      u32(0x04034b50),\n      u16(20), // version needed\n      u16(0), // flags\n      u16(0), // method STORE\n      u16(0), // time\n      u16(0), // date\n      u32(checksum),\n      u32(size),\n      u32(size),\n      u16(nameBytes.length),\n      u16(0), // extra length\n      nameBytes,\n      Buffer.from(data),\n    ]);\n\n    const central = Buffer.concat([\n      u32(0x02014b50),\n      u16(20), // version made by\n      u16(20), // version needed\n      u16(0),\n      u16(0),\n      u16(0),\n      u16(0),\n      u32(checksum),\n      u32(size),\n      u32(size),\n      u16(nameBytes.length),\n      u16(0),\n      u16(0),\n      u16(0),\n      u16(0),\n      u32(0),\n      u32(offset),\n      nameBytes,\n    ]);\n\n    locals.push(local);\n    centrals.push(central);\n    offset += local.length;\n  }\n\n  const centralDir = Buffer.concat(centrals);\n  const end = Buffer.concat([\n    u32(0x06054b50),\n    u16(0),\n    u16(0),\n    u16(entries.length),\n    u16(entries.length),\n    u32(centralDir.length),\n    u32(offset),\n    u16(0),\n  ]);\n\n  return Buffer.concat([...locals, centralDir, end]);\n}\n","/**\n * Evidence integrity verification (bundle verify) — schema, presence, hashes.\n */\nimport { readdir, readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { sha256Equals, sha256Hex } from \"./hash.js\";\nimport { parseEvidenceManifestJson } from \"./manifest.js\";\nimport { assertEvidenceRelativePath } from \"./paths.js\";\nimport {\n  EVIDENCE_MANIFEST_FILENAME,\n  EVIDENCE_RESOLVED_CONTRACT_FILENAME,\n  type EvidenceManifest,\n} from \"./types.js\";\nimport { verifyEvidenceContractBinding } from \"./contract-binding.js\";\n\nexport type EvidenceVerifyStatus = \"pass\" | \"fail\";\n\nexport interface EvidenceVerifyIssue {\n  code:\n    | \"manifest_missing\"\n    | \"manifest_invalid\"\n    | \"file_missing\"\n    | \"file_unexpected\"\n    | \"hash_mismatch\"\n    | \"assessment_missing\"\n    | \"provenance_missing\"\n    | \"path_unsafe\"\n    | \"io_error\"\n    | \"contract_file_missing\"\n    | \"contract_hash_mismatch\"\n    | \"contract_digest_mismatch\"\n    | \"contract_binding_invalid\";\n  severity: \"error\" | \"warning\";\n  message: string;\n  path?: string;\n}\n\nexport interface EvidenceVerifyResult {\n  ok: boolean;\n  status: EvidenceVerifyStatus;\n  root: string;\n  manifest?: EvidenceManifest;\n  issues: EvidenceVerifyIssue[];\n  checkedFiles: number;\n}\n\nexport interface EvidenceVerifyOptions {\n  /** Unexpected files: default fail for share/strict-style verification. */\n  unexpectedFiles?: \"fail\" | \"warn\" | \"ignore\";\n}\n\nasync function listFilesRecursive(root: string): Promise<string[]> {\n  const out: string[] = [];\n  async function walk(dir: string): Promise<void> {\n    const entries = await readdir(dir, { withFileTypes: true });\n    for (const entry of entries) {\n      const abs = path.join(dir, entry.name);\n      if (entry.isDirectory()) {\n        await walk(abs);\n      } else if (entry.isFile()) {\n        const rel = path.relative(root, abs).split(path.sep).join(\"/\");\n        out.push(rel);\n      }\n    }\n  }\n  await walk(root);\n  return out.sort((a, b) => a.localeCompare(b));\n}\n\n/**\n * Verify an Evidence v2 directory (contains `evidence.json`).\n * Does not extract ZIP archives — callers should unpack first when needed.\n */\nexport async function verifyEvidenceDirectory(\n  rootPath: string,\n  options: EvidenceVerifyOptions = {},\n): Promise<EvidenceVerifyResult> {\n  const unexpectedMode = options.unexpectedFiles ?? \"fail\";\n  const root = path.resolve(rootPath);\n  const issues: EvidenceVerifyIssue[] = [];\n\n  let rootStat;\n  try {\n    rootStat = await stat(root);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return {\n      ok: false,\n      status: \"fail\",\n      root,\n      issues: [{ code: \"io_error\", severity: \"error\", message: `Cannot read path: ${message}` }],\n      checkedFiles: 0,\n    };\n  }\n  if (!rootStat.isDirectory()) {\n    return {\n      ok: false,\n      status: \"fail\",\n      root,\n      issues: [\n        {\n          code: \"io_error\",\n          severity: \"error\",\n          message: \"Evidence verify expects a directory containing evidence.json (unpack ZIP first).\",\n        },\n      ],\n      checkedFiles: 0,\n    };\n  }\n\n  const manifestPath = path.join(root, EVIDENCE_MANIFEST_FILENAME);\n  let manifestText: string;\n  try {\n    manifestText = await readFile(manifestPath, \"utf-8\");\n  } catch {\n    return {\n      ok: false,\n      status: \"fail\",\n      root,\n      issues: [\n        {\n          code: \"manifest_missing\",\n          severity: \"error\",\n          message: `Missing ${EVIDENCE_MANIFEST_FILENAME}`,\n          path: EVIDENCE_MANIFEST_FILENAME,\n        },\n      ],\n      checkedFiles: 0,\n    };\n  }\n\n  let manifest: EvidenceManifest;\n  try {\n    manifest = parseEvidenceManifestJson(manifestText);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return {\n      ok: false,\n      status: \"fail\",\n      root,\n      issues: [\n        {\n          code: \"manifest_invalid\",\n          severity: \"error\",\n          message,\n          path: EVIDENCE_MANIFEST_FILENAME,\n        },\n      ],\n      checkedFiles: 0,\n    };\n  }\n\n  if (!manifest.assessment?.status) {\n    issues.push({\n      code: \"assessment_missing\",\n      severity: \"error\",\n      message: \"Manifest assessment.status is required.\",\n    });\n  }\n  if (!manifest.generator?.name || !manifest.generator?.version) {\n    issues.push({\n      code: \"provenance_missing\",\n      severity: \"error\",\n      message: \"Manifest generator.name and generator.version are required.\",\n    });\n  }\n  if (!manifest.source?.runIds?.length) {\n    issues.push({\n      code: \"provenance_missing\",\n      severity: \"error\",\n      message: \"Manifest source.runIds must be non-empty.\",\n    });\n  }\n\n  const listed = new Set<string>();\n  for (const file of manifest.files) {\n    let rel: string;\n    try {\n      rel = assertEvidenceRelativePath(file.path);\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      issues.push({\n        code: \"path_unsafe\",\n        severity: \"error\",\n        message,\n        path: file.path,\n      });\n      continue;\n    }\n    if (rel === EVIDENCE_MANIFEST_FILENAME) {\n      issues.push({\n        code: \"manifest_invalid\",\n        severity: \"error\",\n        message: `${EVIDENCE_MANIFEST_FILENAME} must not list itself in files[].`,\n        path: rel,\n      });\n      continue;\n    }\n    listed.add(rel);\n    const abs = path.join(root, ...rel.split(\"/\"));\n    let bytes: Buffer;\n    try {\n      bytes = await readFile(abs);\n    } catch {\n      issues.push({\n        code: \"file_missing\",\n        severity: \"error\",\n        message: `Listed file missing: ${rel}`,\n        path: rel,\n      });\n      continue;\n    }\n    const actual = sha256Hex(bytes);\n    if (!sha256Equals(file.sha256, actual)) {\n      issues.push({\n        code: \"hash_mismatch\",\n        severity: \"error\",\n        message: `SHA-256 mismatch for ${rel}`,\n        path: rel,\n      });\n    }\n  }\n\n  let onDisk: string[] = [];\n  try {\n    onDisk = await listFilesRecursive(root);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    issues.push({ code: \"io_error\", severity: \"error\", message });\n  }\n\n  for (const rel of onDisk) {\n    if (rel === EVIDENCE_MANIFEST_FILENAME) continue;\n    if (listed.has(rel)) continue;\n    if (unexpectedMode === \"ignore\") continue;\n    issues.push({\n      code: \"file_unexpected\",\n      severity: unexpectedMode === \"warn\" ? \"warning\" : \"error\",\n      message: `Unexpected file not listed in manifest: ${rel}`,\n      path: rel,\n    });\n  }\n\n  if (manifest.contract !== undefined) {\n    const contractRel =\n      manifest.contract.path ?? EVIDENCE_RESOLVED_CONTRACT_FILENAME;\n    let resolvedBytes: string | undefined;\n    try {\n      resolvedBytes = await readFile(path.join(root, ...contractRel.split(\"/\")), \"utf-8\");\n    } catch {\n      resolvedBytes = undefined;\n    }\n    let checkResultsJson: string | undefined;\n    try {\n      checkResultsJson = await readFile(path.join(root, \"check-results.json\"), \"utf-8\");\n    } catch {\n      checkResultsJson = undefined;\n    }\n    for (const issue of verifyEvidenceContractBinding({\n      binding: manifest.contract,\n      ...(resolvedBytes !== undefined ? { resolvedContractBytes: resolvedBytes } : {}),\n      ...(checkResultsJson !== undefined ? { checkResultsJson } : {}),\n    })) {\n      issues.push(issue);\n    }\n  }\n\n  const hasError = issues.some((issue) => issue.severity === \"error\");\n  return {\n    ok: !hasError,\n    status: hasError ? \"fail\" : \"pass\",\n    root,\n    manifest,\n    issues,\n    checkedFiles: listed.size,\n  };\n}\n","/**\n * Helpers for CI Evidence v2 packages (same files as share-safe bundles).\n */\nimport { buildEvidenceHtmlShell } from \"./html-shell.js\";\nimport {\n  buildEvidenceManifest,\n  collectTraceSchemaVersions,\n  serializeEvidenceManifest,\n} from \"./manifest.js\";\nimport { sha256Hex } from \"./hash.js\";\nimport {\n  EVIDENCE_ASSESSMENT_NOTE,\n  EVIDENCE_FORMAT_VERSION,\n  EVIDENCE_MANIFEST_FILENAME,\n  EVIDENCE_RESOLVED_CONTRACT_FILENAME,\n  type EvidenceContractBinding,\n  type EvidenceManifest,\n  type EvidenceSafeStatus,\n} from \"./types.js\";\nimport { EVIDENCE_HTML_FILENAME } from \"./html-shell.js\";\nimport {\n  bindCheckResultsToContract,\n  buildEvidenceContractPackage,\n  serializeCheckResultsJson,\n  type BuildEvidenceContractPackageInput,\n} from \"./contract-binding.js\";\n\nexport interface EvidenceCiPackageInput {\n  generatorVersion: string;\n  runIds: readonly string[];\n  /** Pre-redaction source bytes keyed by run id (for sourceHashes). */\n  sourceContents: ReadonlyMap<string, string> | Record<string, string>;\n  /** Redacted combined JSONL written as trace.jsonl. */\n  redactedTraceJsonl: string;\n  redactionProfile: \"local\" | \"share\" | \"strict\";\n  assessmentStatus: EvidenceSafeStatus;\n  sourceStatus?: EvidenceSafeStatus;\n  checkResultsJson: string;\n  createdAt?: string;\n  summaryText?: string;\n  /** Optional TraceFacts/parity summary embedded in evidence.json (6.14+). */\n  semantics?: EvidenceManifest[\"semantics\"];\n  /**\n   * Optional TraceContract / preset binding (6.28+).\n   * When omitted, no contract section is written (older Evidence shape).\n   * Pass `{ engineVersion, source }` with neither contract nor preset to record `unavailable`.\n   */\n  contractPackage?: BuildEvidenceContractPackageInput;\n}\n\nexport interface EvidenceCiPackageFiles {\n  \"evidence.html\": string;\n  \"evidence.json\": string;\n  \"check-results.json\": string;\n  \"trace.jsonl\": string;\n  \"contract.resolved.json\"?: string;\n  manifest: EvidenceManifest;\n}\n\nfunction asMap(\n  value: ReadonlyMap<string, string> | Record<string, string>,\n): Map<string, string> {\n  if (value instanceof Map) return new Map(value);\n  return new Map(Object.entries(value));\n}\n\n/**\n * Build the standard CI evidence files (in memory) using Evidence v2 helpers.\n * Order (6.29.3): resolve → safety → bind → HTML → manifest last.\n * Optionally packages `contract.resolved.json` and binds digests (6.28+).\n */\nexport function buildEvidenceCiPackage(input: EvidenceCiPackageInput): EvidenceCiPackageFiles {\n  const sources = asMap(input.sourceContents);\n  const sourceHashes = input.runIds.map((runId) => ({\n    runId,\n    algorithm: \"sha256\" as const,\n    hash: sha256Hex(sources.get(runId) ?? \"\"),\n  }));\n  const schemaVersions = new Set<string>();\n  for (const content of sources.values()) {\n    for (const version of collectTraceSchemaVersions(content)) {\n      schemaVersions.add(version);\n    }\n  }\n  for (const version of collectTraceSchemaVersions(input.redactedTraceJsonl)) {\n    schemaVersions.add(version);\n  }\n\n  const createdAt = input.createdAt ?? new Date().toISOString();\n\n  let checkResultsJson = input.checkResultsJson;\n  let contractBinding: EvidenceContractBinding | undefined;\n  let contractFileContent: string | undefined;\n\n  if (input.contractPackage !== undefined) {\n    const packaged = buildEvidenceContractPackage({\n      ...input.contractPackage,\n      engineVersion: input.contractPackage.engineVersion || input.generatorVersion,\n    });\n    contractBinding = packaged.binding;\n    if (packaged.resolvedJson !== undefined) {\n      contractFileContent = packaged.resolvedJson;\n    }\n    let parsed: Record<string, unknown>;\n    try {\n      parsed = JSON.parse(checkResultsJson) as Record<string, unknown>;\n    } catch {\n      parsed = { raw: checkResultsJson };\n    }\n    checkResultsJson = serializeCheckResultsJson(\n      bindCheckResultsToContract(parsed, packaged.checkBinding),\n    );\n  }\n\n  const evidenceHtml = buildEvidenceHtmlShell({\n    title: \"AgentInspect evidence\",\n    runIds: input.runIds,\n    assessmentStatus: input.assessmentStatus,\n    sourceStatus: input.sourceStatus,\n    redactionProfile: input.redactionProfile,\n    verificationPolicy: input.redactionProfile,\n    generatorName: \"agent-inspect\",\n    generatorVersion: input.generatorVersion,\n    createdAt,\n    summaryText: input.summaryText,\n    checkSummary: {\n      aggregateStatus: input.assessmentStatus,\n      runs: input.runIds.map((runId) => ({\n        runId,\n        status: input.assessmentStatus,\n        sourceStatus: input.sourceStatus,\n        errors: input.assessmentStatus === \"UNSAFE\" || input.assessmentStatus === \"UNKNOWN\" ? 1 : 0,\n        warnings: input.assessmentStatus === \"SAFE WITH WARNINGS\" ? 1 : 0,\n        findings: 0,\n      })),\n    },\n    ...(contractBinding !== undefined\n      ? {\n          contractBinding: {\n            status: contractBinding.status,\n            ...(contractBinding.sha256 !== undefined\n              ? { sha256: contractBinding.sha256 }\n              : {}),\n            ...(contractBinding.note !== undefined ? { note: contractBinding.note } : {}),\n            ruleCount: contractBinding.ruleIds.length,\n          },\n        }\n      : {}),\n  });\n\n  const packaged = [\n    { path: EVIDENCE_HTML_FILENAME, content: evidenceHtml },\n    { path: \"check-results.json\", content: checkResultsJson },\n    { path: \"trace.jsonl\", content: input.redactedTraceJsonl },\n    ...(contractFileContent !== undefined\n      ? [{ path: EVIDENCE_RESOLVED_CONTRACT_FILENAME, content: contractFileContent }]\n      : []),\n  ];\n\n  const manifest = buildEvidenceManifest({\n    generatorVersion: input.generatorVersion,\n    runIds: input.runIds,\n    traceSchemaVersions: [...schemaVersions].sort((a, b) => a.localeCompare(b)),\n    sourceHashes,\n    redactionProfile: input.redactionProfile,\n    verificationPolicy: input.redactionProfile,\n    assessmentStatus: input.assessmentStatus,\n    sourceStatus: input.sourceStatus,\n    files: packaged,\n    createdAt,\n    note: EVIDENCE_ASSESSMENT_NOTE,\n    ...(input.semantics !== undefined ? { semantics: input.semantics } : {}),\n    ...(contractBinding !== undefined ? { contract: contractBinding } : {}),\n  });\n\n  return {\n    \"evidence.html\": evidenceHtml,\n    \"evidence.json\": serializeEvidenceManifest(manifest),\n    \"check-results.json\": checkResultsJson,\n    \"trace.jsonl\": input.redactedTraceJsonl,\n    ...(contractFileContent !== undefined\n      ? { [EVIDENCE_RESOLVED_CONTRACT_FILENAME]: contractFileContent }\n      : {}),\n    manifest,\n  };\n}\n\nexport { EVIDENCE_FORMAT_VERSION, EVIDENCE_HTML_FILENAME, EVIDENCE_MANIFEST_FILENAME };\n","export type {\n  EvidenceCheckContractBinding,\n  EvidenceContractBinding,\n  EvidenceContractBindingSource,\n  EvidenceContractBindingStatus,\n  EvidenceFileEntry,\n  EvidenceFileRole,\n  EvidenceFormatVersion,\n  EvidenceManifest,\n  EvidencePackagedFile,\n  EvidenceRedactionProfile,\n  EvidenceSafeStatus,\n  EvidenceSemantics,\n  EvidenceSourceHash,\n  EvidenceVerificationPolicy,\n} from \"./types.js\";\n\nexport {\n  EVIDENCE_ASSESSMENT_NOTE,\n  EVIDENCE_FORMAT_VERSION,\n  EVIDENCE_MANIFEST_FILENAME,\n  EVIDENCE_RESOLVED_CONTRACT_FILENAME,\n} from \"./types.js\";\n\nexport { isSha256Hex, sha256Equals, sha256Hex } from \"./hash.js\";\nexport { assertEvidenceRelativePath } from \"./paths.js\";\nexport {\n  buildEvidenceFileEntries,\n  buildEvidenceManifest,\n  collectTraceSchemaVersions,\n  inferEvidenceFileRole,\n  parseEvidenceManifestJson,\n  serializeEvidenceManifest,\n  validateEvidenceManifest,\n} from \"./manifest.js\";\nexport {\n  EVIDENCE_CONTRACT_ASSURANCE_NOTE,\n  EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n  EVIDENCE_CONTRACT_PARTIAL_NOTE,\n  EVIDENCE_CONTRACT_UNAVAILABLE_NOTE,\n  EVIDENCE_CONTRACT_UNSAFE_NOTE,\n  bindCheckResultsToContract,\n  buildEvidenceContractPackage,\n  collectResolvedContractRuleIds,\n  contractContainsUnsafeExpectedValues,\n  readCheckResultsContractBinding,\n  resolveSerializableTraceContract,\n  serializeCanonicalJson,\n  serializeCheckResultsJson,\n  verifyEvidenceContractBinding,\n  type BuildEvidenceContractPackageInput,\n  type EvidenceContractPackage,\n  type EvidenceContractVerifyIssue,\n  type ResolvedContractDocument,\n} from \"./contract-binding.js\";\nexport {\n  EVIDENCE_HTML_FILENAME,\n  EVIDENCE_VIEW_IDS,\n  buildEvidenceHtmlShell,\n  buildEvidenceHtmlShellFromManifest,\n  encodeEmbeddedEvidenceJson,\n  type EvidenceHtmlShellInput,\n  type EvidenceViewId,\n} from \"./html-shell.js\";\nexport {\n  EVIDENCE_VIEW_CSS,\n  buildEvidenceCausalFailureViewHtml,\n  buildEvidenceTimelineViewHtml,\n  buildEvidenceTreeViewHtml,\n} from \"./views.js\";\nexport {\n  buildEvidenceContractsViewHtml,\n  buildEvidenceDiffViewHtml,\n  buildEvidenceOutcomesViewHtml,\n  type EvidenceCheckFindingSummary,\n  type EvidenceContractsViewInput,\n} from \"./views-contract.js\";\nexport {\n  buildEvidenceCircuitViewHtml,\n  buildEvidenceProvenanceViewHtml,\n  buildEvidenceSafetyViewHtml,\n  buildEvidenceToolsLlmViewHtml,\n  type EvidenceProvenanceViewInput,\n  type EvidenceSafetyViewInput,\n} from \"./views-safety.js\";\nexport { buildZipArchive, type ZipEntry } from \"./zip.js\";\nexport {\n  verifyEvidenceDirectory,\n  type EvidenceVerifyIssue,\n  type EvidenceVerifyOptions,\n  type EvidenceVerifyResult,\n  type EvidenceVerifyStatus,\n} from \"./verify.js\";\nexport {\n  buildEvidenceCiPackage,\n  type EvidenceCiPackageFiles,\n  type EvidenceCiPackageInput,\n} from \"./ci.js\";\n","import type { RedactionProfile } from \"../types.js\";\n\nexport type SuiteCaseStatus = \"pass\" | \"fail\" | \"error\" | \"skipped\";\n\nexport type SuiteDiagnosticCode =\n  | \"AI_SUITE_CONFIG_INVALID\"\n  | \"AI_SUITE_CONFIG_LOAD_FAILED\"\n  | \"AI_SUITE_CASE_TRACE_MISSING\"\n  | \"AI_SUITE_CASE_CHECK_FAILED\"\n  | \"AI_SUITE_CASE_EVAL_FAILED\"\n  | \"AI_SUITE_CASE_OBSERVATION_FAILED\"\n  | \"AI_SUITE_TRACE_UNREADABLE\";\n\nexport interface SuiteDiagnostic {\n  code: SuiteDiagnosticCode;\n  severity: \"error\" | \"warning\" | \"info\";\n  message: string;\n  caseId?: string;\n}\n\nexport interface SuiteCaseConfig {\n  id: string;\n  trace?: string;\n  runId?: string;\n  input?: string;\n  requireTools?: string[];\n  forbidTools?: string[];\n  maxDurationMs?: number;\n  expectedObservations?: string[];\n}\n\nexport interface SuiteChecksConfig {\n  select?: string[];\n  run?: {\n    maxDurationMs?: number;\n    maxDepth?: number;\n  };\n  tool?: {\n    required?: string[];\n    forbidden?: string[];\n  };\n  llm?: {\n    allowedModels?: string[];\n    maxTotalTokens?: number;\n  };\n}\n\nexport interface SuiteEvalConfig {\n  requireSuccess?: boolean;\n  requiredTools?: string[];\n  forbiddenTools?: string[];\n  maxDurationMs?: number;\n  maxDepth?: number;\n  maxRetries?: number;\n  maxTotalTokens?: number;\n}\n\nexport interface SuiteArtifactsConfig {\n  outputDir?: string;\n}\n\nexport interface SuiteConfig {\n  name: string;\n  traces: string;\n  cases: SuiteCaseConfig[];\n  checks?: SuiteChecksConfig;\n  eval?: SuiteEvalConfig;\n  redactionProfile?: RedactionProfile;\n  artifacts?: SuiteArtifactsConfig;\n  baseline?: string;\n  candidate?: string;\n}\n\nexport interface SuiteCaseResult {\n  id: string;\n  status: SuiteCaseStatus;\n  tracePath?: string;\n  runId?: string;\n  checkOk?: boolean;\n  evalOk?: boolean;\n  observationsOk?: boolean;\n  message?: string;\n  diagnostics: SuiteDiagnostic[];\n}\n\nexport interface SuiteRunSummary {\n  passed: number;\n  failed: number;\n  errors: number;\n  skipped: number;\n}\n\nexport interface SuiteRunResult {\n  ok: boolean;\n  status: \"pass\" | \"fail\" | \"error\";\n  suiteName: string;\n  configPath: string;\n  tracesDir: string;\n  startedAt: string;\n  finishedAt: string;\n  summary: SuiteRunSummary;\n  cases: SuiteCaseResult[];\n  diagnostics: SuiteDiagnostic[];\n}\n\nexport interface LoadSuiteConfigOptions {\n  configPath?: string;\n  cwd?: string;\n}\n\nexport interface ValidateSuiteConfigResult {\n  ok: boolean;\n  diagnostics: SuiteDiagnostic[];\n}\n\nexport interface RunSuiteOptions {\n  configPath?: string;\n  cwd?: string;\n  nowMs?: number;\n}\n\nexport interface RenderSuiteReportOptions {\n  format?: \"markdown\" | \"json\";\n}\n\nexport const DEFAULT_SUITE_CONFIG_NAMES = [\n  \"agent-inspect.suite.json\",\n  \"agent-inspect.suite.js\",\n  \"agent-inspect.suite.mjs\",\n  \"agent-inspect.suite.cjs\",\n] as const;\n\nexport const DEFAULT_SUITE_ARTIFACTS_DIR = \".agent-inspect/suite-runs\";\n","import { access } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type {\n  SuiteCaseConfig,\n  SuiteConfig,\n  SuiteDiagnostic,\n  ValidateSuiteConfigResult,\n} from \"./types.js\";\n\nfunction diagnostic(\n  code: SuiteDiagnostic[\"code\"],\n  message: string,\n  severity: SuiteDiagnostic[\"severity\"] = \"error\",\n  caseId?: string,\n): SuiteDiagnostic {\n  return { code, message, severity, ...(caseId !== undefined ? { caseId } : {}) };\n}\n\nfunction asString(value: unknown, label: string): string | undefined {\n  if (value === undefined) return undefined;\n  if (typeof value !== \"string\" || value.trim() === \"\") {\n    throw new Error(`${label} must be a non-empty string.`);\n  }\n  return value.trim();\n}\n\nfunction asStringArray(value: unknown, label: string): string[] | undefined {\n  if (value === undefined) return undefined;\n  if (!Array.isArray(value) || value.some((item) => typeof item !== \"string\")) {\n    throw new Error(`${label} must be an array of strings.`);\n  }\n  return value;\n}\n\nfunction asPositiveNumber(value: unknown, label: string): number | undefined {\n  if (value === undefined) return undefined;\n  if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n    throw new Error(`${label} must be a non-negative number.`);\n  }\n  return value;\n}\n\nfunction validateCaseConfig(\n  value: unknown,\n  index: number,\n): { caseConfig?: SuiteCaseConfig; diagnostics: SuiteDiagnostic[] } {\n  const diagnostics: SuiteDiagnostic[] = [];\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    diagnostics.push(\n      diagnostic(\"AI_SUITE_CONFIG_INVALID\", `cases[${index}] must be an object.`),\n    );\n    return { diagnostics };\n  }\n\n  const raw = value as Record<string, unknown>;\n  try {\n    const id = asString(raw.id, `cases[${index}].id`);\n    if (id === undefined) {\n      diagnostics.push(\n        diagnostic(\"AI_SUITE_CONFIG_INVALID\", `cases[${index}].id is required.`),\n      );\n      return { diagnostics };\n    }\n\n    const trace = asString(raw.trace, `cases[${index}].trace`);\n    const runId = asString(raw.runId, `cases[${index}].runId`);\n    const input = asString(raw.input, `cases[${index}].input`);\n\n    return {\n      caseConfig: {\n        id,\n        ...(trace !== undefined ? { trace } : {}),\n        ...(runId !== undefined ? { runId } : {}),\n        ...(input !== undefined ? { input } : {}),\n        ...(asStringArray(raw.requireTools, `cases[${index}].requireTools`) !== undefined\n          ? { requireTools: asStringArray(raw.requireTools, `cases[${index}].requireTools`) }\n          : {}),\n        ...(asStringArray(raw.forbidTools, `cases[${index}].forbidTools`) !== undefined\n          ? { forbidTools: asStringArray(raw.forbidTools, `cases[${index}].forbidTools`) }\n          : {}),\n        ...(asPositiveNumber(raw.maxDurationMs, `cases[${index}].maxDurationMs`) !== undefined\n          ? {\n              maxDurationMs: asPositiveNumber(\n                raw.maxDurationMs,\n                `cases[${index}].maxDurationMs`,\n              ),\n            }\n          : {}),\n        ...(asStringArray(\n          raw.expectedObservations,\n          `cases[${index}].expectedObservations`,\n        ) !== undefined\n          ? {\n              expectedObservations: asStringArray(\n                raw.expectedObservations,\n                `cases[${index}].expectedObservations`,\n              ),\n            }\n          : {}),\n      },\n      diagnostics,\n    };\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    diagnostics.push(diagnostic(\"AI_SUITE_CONFIG_INVALID\", message));\n    return { diagnostics };\n  }\n}\n\nexport function normalizeSuiteConfig(value: unknown): SuiteConfig {\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    throw new Error(\"Suite config must export an object.\");\n  }\n  const raw = value as Record<string, unknown>;\n  const name = asString(raw.name, \"name\");\n  const traces = asString(raw.traces, \"traces\");\n  if (name === undefined) throw new Error(\"name is required.\");\n  if (traces === undefined) throw new Error(\"traces is required.\");\n\n  if (!Array.isArray(raw.cases) || raw.cases.length === 0) {\n    throw new Error(\"cases must be a non-empty array.\");\n  }\n\n  const cases: SuiteCaseConfig[] = [];\n  for (let index = 0; index < raw.cases.length; index += 1) {\n    const { caseConfig, diagnostics } = validateCaseConfig(raw.cases[index], index);\n    if (diagnostics.length > 0) {\n      throw new Error(diagnostics.map((item) => item.message).join(\"; \"));\n    }\n    if (caseConfig !== undefined) cases.push(caseConfig);\n  }\n\n  const ids = new Set<string>();\n  for (const suiteCase of cases) {\n    if (ids.has(suiteCase.id)) {\n      throw new Error(`Duplicate case id \"${suiteCase.id}\".`);\n    }\n    ids.add(suiteCase.id);\n  }\n\n  const redactionProfile =\n    raw.redactionProfile === \"local\" ||\n    raw.redactionProfile === \"share\" ||\n    raw.redactionProfile === \"strict\"\n      ? raw.redactionProfile\n      : undefined;\n  if (\n    raw.redactionProfile !== undefined &&\n    redactionProfile === undefined\n  ) {\n    throw new Error('redactionProfile must be \"local\", \"share\", or \"strict\".');\n  }\n\n  const config: SuiteConfig = { name, traces, cases };\n  if (raw.checks !== undefined) {\n    if (typeof raw.checks !== \"object\" || Array.isArray(raw.checks)) {\n      throw new Error(\"checks must be an object.\");\n    }\n    config.checks = raw.checks as SuiteConfig[\"checks\"];\n  }\n  if (raw.eval !== undefined) {\n    if (typeof raw.eval !== \"object\" || Array.isArray(raw.eval)) {\n      throw new Error(\"eval must be an object.\");\n    }\n    config.eval = raw.eval as SuiteConfig[\"eval\"];\n  }\n  if (raw.artifacts !== undefined) {\n    if (typeof raw.artifacts !== \"object\" || Array.isArray(raw.artifacts)) {\n      throw new Error(\"artifacts must be an object.\");\n    }\n    const outputDir = asString(\n      (raw.artifacts as Record<string, unknown>).outputDir,\n      \"artifacts.outputDir\",\n    );\n    config.artifacts = outputDir !== undefined ? { outputDir } : {};\n  }\n  if (raw.baseline !== undefined) {\n    const baseline = asString(raw.baseline, \"baseline\");\n    if (baseline !== undefined) config.baseline = baseline;\n  }\n  if (raw.candidate !== undefined) {\n    const candidate = asString(raw.candidate, \"candidate\");\n    if (candidate !== undefined) config.candidate = candidate;\n  }\n  if (redactionProfile !== undefined) config.redactionProfile = redactionProfile;\n  return config;\n}\n\nexport async function validateSuiteConfig(\n  config: SuiteConfig,\n  options: { configDir: string },\n): Promise<ValidateSuiteConfigResult> {\n  const diagnostics: SuiteDiagnostic[] = [];\n  const tracesDir = path.resolve(options.configDir, config.traces);\n  try {\n    await access(tracesDir);\n  } catch {\n    diagnostics.push(\n      diagnostic(\"AI_SUITE_CONFIG_INVALID\", `traces directory not found: ${tracesDir}`),\n    );\n  }\n\n  for (const suiteCase of config.cases) {\n    if (suiteCase.input !== undefined) {\n      const inputPath = path.resolve(options.configDir, suiteCase.input);\n      try {\n        await access(inputPath);\n      } catch {\n        diagnostics.push(\n          diagnostic(\n            \"AI_SUITE_CONFIG_INVALID\",\n            `input fixture not found: ${suiteCase.input}`,\n            \"warning\",\n            suiteCase.id,\n          ),\n        );\n      }\n    }\n  }\n\n  return { ok: diagnostics.every((item) => item.severity !== \"error\"), diagnostics };\n}\n","import { access, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport {\n  DEFAULT_SUITE_CONFIG_NAMES,\n  type LoadSuiteConfigOptions,\n  type SuiteConfig,\n  type SuiteDiagnostic,\n} from \"./types.js\";\nimport { normalizeSuiteConfig } from \"./validate.js\";\n\nconst CONFIG_EXTENSIONS = new Set([\".json\", \".js\", \".mjs\", \".cjs\"]);\nconst TS_CONFIG_EXTENSIONS = new Set([\".ts\", \".mts\", \".cts\"]);\n\nfunction diagnostic(\n  code: SuiteDiagnostic[\"code\"],\n  message: string,\n): SuiteDiagnostic {\n  return { code, message, severity: \"error\" };\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n  try {\n    await access(filePath);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport async function resolveSuiteConfigPath(\n  options: LoadSuiteConfigOptions = {},\n): Promise<string> {\n  const cwd = path.resolve(options.cwd ?? process.cwd());\n  if (options.configPath !== undefined && options.configPath.trim() !== \"\") {\n    return path.resolve(cwd, options.configPath.trim());\n  }\n\n  for (const name of DEFAULT_SUITE_CONFIG_NAMES) {\n    const candidate = path.join(cwd, name);\n    if (await fileExists(candidate)) return candidate;\n  }\n\n  throw new Error(\n    `No suite config found. Create one with \\`agent-inspect suite init\\` or pass --config.`,\n  );\n}\n\nexport async function loadSuiteConfig(\n  options: LoadSuiteConfigOptions = {},\n): Promise<{ config: SuiteConfig; configPath: string; configDir: string }> {\n  let configPath: string;\n  try {\n    configPath = await resolveSuiteConfigPath(options);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    throw Object.assign(new Error(message), {\n      diagnostics: [diagnostic(\"AI_SUITE_CONFIG_LOAD_FAILED\", message)],\n    });\n  }\n\n  const extension = path.extname(configPath);\n  if (TS_CONFIG_EXTENSIONS.has(extension)) {\n    const message =\n      \"TypeScript suite configs require an explicit precompiled JavaScript config or future --config-loader support.\";\n    throw Object.assign(new Error(message), {\n      diagnostics: [diagnostic(\"AI_SUITE_CONFIG_LOAD_FAILED\", message)],\n    });\n  }\n  if (!CONFIG_EXTENSIONS.has(extension)) {\n    const message = \"Unsupported suite config extension. Use .json, .js, .mjs, or .cjs.\";\n    throw Object.assign(new Error(message), {\n      diagnostics: [diagnostic(\"AI_SUITE_CONFIG_LOAD_FAILED\", message)],\n    });\n  }\n\n  try {\n    let raw: unknown;\n    if (extension === \".json\") {\n      raw = JSON.parse(await readFile(configPath, \"utf-8\"));\n    } else {\n      const mod = await import(pathToFileURL(configPath).href);\n      raw = \"default\" in mod ? mod.default : mod;\n    }\n    const config = normalizeSuiteConfig(raw);\n    return {\n      config,\n      configPath,\n      configDir: path.dirname(configPath),\n    };\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    throw Object.assign(new Error(message), {\n      diagnostics: [diagnostic(\"AI_SUITE_CONFIG_LOAD_FAILED\", message)],\n    });\n  }\n}\n\nexport function defaultSuiteConfigTemplate(): SuiteConfig {\n  return {\n    name: \"my-agent-suite\",\n    traces: \"./.agent-inspect\",\n    cases: [\n      {\n        id: \"example-case\",\n        runId: \"example-run\",\n        requireTools: [\"searchDocs\"],\n        maxDurationMs: 30_000,\n        expectedObservations: [\"answerReady\"],\n      },\n    ],\n    checks: {\n      select: [\"run.status\"],\n    },\n    redactionProfile: \"local\",\n    artifacts: {\n      outputDir: \".agent-inspect/suite-runs\",\n    },\n  };\n}\n","import { access } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { getTraceFilePath } from \"../utils.js\";\nimport type { SuiteCaseConfig } from \"./types.js\";\n\nexport interface ResolvedSuiteCase {\n  caseId: string;\n  tracePath?: string;\n  runId?: string;\n  missing: boolean;\n  reason?: string;\n}\n\nasync function exists(filePath: string): Promise<boolean> {\n  try {\n    await access(filePath);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport async function resolveSuiteCaseTrace(\n  suiteCase: SuiteCaseConfig,\n  options: { configDir: string; tracesDir: string },\n): Promise<ResolvedSuiteCase> {\n  if (suiteCase.trace !== undefined) {\n    const tracePath = path.resolve(options.configDir, suiteCase.trace);\n    if (await exists(tracePath)) {\n      return { caseId: suiteCase.id, tracePath, missing: false };\n    }\n    return {\n      caseId: suiteCase.id,\n      tracePath,\n      missing: true,\n      reason: `trace file not found: ${suiteCase.trace}`,\n    };\n  }\n\n  const runKey = suiteCase.runId ?? suiteCase.id;\n  const directPath = getTraceFilePath(runKey, options.tracesDir);\n  if (await exists(directPath)) {\n    return { caseId: suiteCase.id, tracePath: directPath, runId: runKey, missing: false };\n  }\n\n  const nestedPath = path.join(options.tracesDir, `${path.basename(runKey)}.jsonl`);\n  if (await exists(nestedPath)) {\n    return { caseId: suiteCase.id, tracePath: nestedPath, runId: runKey, missing: false };\n  }\n\n  return {\n    caseId: suiteCase.id,\n    runId: runKey,\n    missing: true,\n    reason: `no trace found for run id \"${runKey}\" under ${options.tracesDir}`,\n  };\n}\n","import type { PersistedTokenUsage } from \"../types/persisted-inspect-event.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction nonNegativeFinite(value: unknown): number | undefined {\n  return typeof value === \"number\" && Number.isFinite(value) && value >= 0\n    ? value\n    : undefined;\n}\n\n/**\n * Keeps the approved token vocabulary and derives total only when it is absent.\n * Cached / cache-write / reasoning tokens are informational and are never added to total.\n */\nexport function normalizeTokenUsage(\n  value: unknown,\n): PersistedTokenUsage | undefined {\n  if (!isRecord(value)) return undefined;\n\n  const input = nonNegativeFinite(value.input);\n  const output = nonNegativeFinite(value.output);\n  const suppliedTotal = nonNegativeFinite(value.total);\n  const cached = nonNegativeFinite(value.cached);\n  const cacheWrite = nonNegativeFinite(value.cacheWrite);\n  const reasoning = nonNegativeFinite(value.reasoning);\n  const derivedTotal =\n    input !== undefined && output !== undefined && Number.isFinite(input + output)\n      ? input + output\n      : undefined;\n  const total = suppliedTotal ?? derivedTotal;\n\n  if (\n    input === undefined &&\n    output === undefined &&\n    total === undefined &&\n    cached === undefined &&\n    cacheWrite === undefined &&\n    reasoning === undefined\n  ) {\n    return undefined;\n  }\n\n  return {\n    ...(input !== undefined ? { input } : {}),\n    ...(output !== undefined ? { output } : {}),\n    ...(total !== undefined ? { total } : {}),\n    ...(cached !== undefined ? { cached } : {}),\n    ...(cacheWrite !== undefined ? { cacheWrite } : {}),\n    ...(reasoning !== undefined ? { reasoning } : {}),\n  };\n}\n","import { extractCorrelationMetadata } from \"../correlation-metadata.js\";\nimport type { InspectKind } from \"../types/inspect-event.js\";\nimport type {\n  ErrorInfo,\n  StepMetadata,\n  StepType,\n  TraceEvent,\n} from \"../types.js\";\nimport type {\n  PersistedEventSource,\n  PersistedEventStatus,\n  PersistedInspectError,\n  PersistedInspectEvent,\n  PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\nimport { normalizeTokenUsage } from \"./token-usage.js\";\n\nexport interface TraceEventToPersistedOptions {\n  /**\n   * Stable index within the source event list.\n   * Used only to make synthetic eventId deterministic when v0.1 has no eventId.\n   */\n  eventIndex?: number;\n\n  /**\n   * Optional source name override.\n   * Default: \"trace-event\"\n   */\n  sourceName?: string;\n\n  /**\n   * Optional source version override.\n   * Default: \"0.1\"\n   */\n  sourceVersion?: string;\n}\n\nfunction sanitizeIdPart(value: string): string {\n  return value.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n}\n\nfunction nodeIdForEvent(event: TraceEvent): string {\n  switch (event.event) {\n    case \"run_started\":\n    case \"run_completed\":\n      return event.runId;\n    case \"step_started\":\n    case \"step_completed\":\n      return event.stepId;\n    case \"outcome_observed\":\n      return event.outcomeId;\n    default:\n      return \"unknown\";\n  }\n}\n\nfunction createPersistedEventId(event: TraceEvent, eventIndex: number): string {\n  const runId = sanitizeIdPart(event.runId);\n  const ev = sanitizeIdPart(event.event);\n  const node = sanitizeIdPart(nodeIdForEvent(event));\n  return `manual:${runId}:${ev}:${node}:${eventIndex}`;\n}\n\nfunction toIsoTimestamp(\n  ms: number,\n): { iso: string; invalidTimestamp: boolean } {\n  if (typeof ms !== \"number\" || !Number.isFinite(ms)) {\n    return { iso: new Date(0).toISOString(), invalidTimestamp: true };\n  }\n  return { iso: new Date(ms).toISOString(), invalidTimestamp: false };\n}\n\nfunction buildSource(options?: TraceEventToPersistedOptions): PersistedEventSource {\n  return {\n    type: \"manual\",\n    name: options?.sourceName ?? \"trace-event\",\n    version: options?.sourceVersion ?? \"0.1\",\n  };\n}\n\nfunction mapStepTypeToInspectKind(type: StepType): InspectKind {\n  switch (type) {\n    case \"run\":\n      return \"RUN\";\n    case \"llm\":\n      return \"LLM\";\n    case \"tool\":\n      return \"TOOL\";\n    case \"decision\":\n      return \"DECISION\";\n    case \"logic\":\n    case \"state\":\n    case \"custom\":\n      return \"LOGIC\";\n    default:\n      return \"LOGIC\";\n  }\n}\n\nfunction mapRunOrStepStatus(\n  status: \"success\" | \"error\",\n): PersistedEventStatus {\n  return status === \"success\" ? \"ok\" : \"error\";\n}\n\nfunction mapErrorInfo(\n  error: ErrorInfo | undefined,\n): {\n  persisted?: PersistedInspectError;\n  errorStack?: string;\n} {\n  if (!error?.message) {\n    return {};\n  }\n  const out: {\n    persisted: PersistedInspectError;\n    errorStack?: string;\n  } = {\n    persisted: {\n      message: error.message,\n      name: \"Error\",\n    },\n  };\n  if (typeof error.stack === \"string\" && error.stack.length > 0) {\n    out.errorStack = error.stack;\n  }\n  return out;\n}\n\nfunction mapTokenUsageFromMetadata(\n  metadata: StepMetadata | undefined,\n): PersistedTokenUsage | undefined {\n  return normalizeTokenUsage(metadata?.tokens);\n}\n\nfunction compactAttributes(\n  entries: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n  const out: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(entries)) {\n    if (value !== undefined) {\n      out[key] = value;\n    }\n  }\n  return Object.keys(out).length > 0 ? out : undefined;\n}\n\n/**\n * Maps one v0.1 {@link TraceEvent} to a v0.2 {@link PersistedInspectEvent}.\n * Does not mutate `event`.\n */\nexport function traceEventToPersistedInspectEvent(\n  event: TraceEvent,\n  options?: TraceEventToPersistedOptions,\n): PersistedInspectEvent {\n  const eventIndex = options?.eventIndex ?? 0;\n  const eventId = createPersistedEventId(event, eventIndex);\n  const source = buildSource(options);\n  const tsMain = toIsoTimestamp(event.timestamp);\n\n  switch (event.event) {\n    case \"run_started\": {\n      const tsStart = toIsoTimestamp(event.startTime);\n      const correlation = extractCorrelationMetadata(event.metadata);\n      const attributes = compactAttributes({\n        legacyEvent: \"run_started\",\n        metadata:\n          event.metadata !== undefined ? { ...event.metadata } : undefined,\n        correlationId: correlation?.correlationId,\n        requestId: correlation?.requestId,\n        decisionId: correlation?.decisionId,\n        groupId: correlation?.groupId,\n        invalidTimestamp:\n          tsMain.invalidTimestamp || tsStart.invalidTimestamp ? true : undefined,\n      });\n\n      return {\n        schemaVersion: \"0.2\",\n        eventId,\n        runId: event.runId,\n        kind: \"RUN\",\n        name: event.name,\n        status: \"running\",\n        timestamp: tsMain.iso,\n        startedAt: tsStart.iso,\n        confidence: \"explicit\",\n        source,\n        attributes,\n      };\n    }\n\n    case \"run_completed\": {\n      const tsEnd = toIsoTimestamp(event.endTime);\n      const { persisted: error, errorStack } = mapErrorInfo(event.error);\n      const attributes = compactAttributes({\n        legacyEvent: \"run_completed\",\n        errorStack,\n        invalidTimestamp:\n          tsMain.invalidTimestamp || tsEnd.invalidTimestamp ? true : undefined,\n      });\n\n      return {\n        schemaVersion: \"0.2\",\n        eventId,\n        runId: event.runId,\n        kind: \"RUN\",\n        name: \"run\",\n        status: mapRunOrStepStatus(event.status),\n        timestamp: tsMain.iso,\n        endedAt: tsEnd.iso,\n        durationMs: event.durationMs,\n        confidence: \"explicit\",\n        source,\n        attributes,\n        error,\n      };\n    }\n\n    case \"step_started\": {\n      const tsStart = toIsoTimestamp(event.startTime);\n      const tokenUsage = mapTokenUsageFromMetadata(event.metadata);\n      const attributes = compactAttributes({\n        legacyEvent: \"step_started\",\n        stepId: event.stepId,\n        stepType: event.type,\n        metadata:\n          event.metadata !== undefined ? { ...event.metadata } : undefined,\n        invalidTimestamp:\n          tsMain.invalidTimestamp || tsStart.invalidTimestamp ? true : undefined,\n      });\n\n      const out: PersistedInspectEvent = {\n        schemaVersion: \"0.2\",\n        eventId,\n        runId: event.runId,\n        kind: mapStepTypeToInspectKind(event.type),\n        name: event.name,\n        status: \"running\",\n        timestamp: tsMain.iso,\n        startedAt: tsStart.iso,\n        confidence: \"explicit\",\n        source,\n        attributes,\n      };\n      if (event.parentId !== undefined) {\n        out.parentId = event.parentId;\n      }\n      if (tokenUsage !== undefined) {\n        out.tokenUsage = tokenUsage;\n      }\n      return out;\n    }\n\n    case \"step_completed\": {\n      const tsEnd = toIsoTimestamp(event.endTime);\n      const { persisted: error, errorStack } = mapErrorInfo(event.error);\n      const attributes = compactAttributes({\n        legacyEvent: \"step_completed\",\n        stepId: event.stepId,\n        errorStack,\n        invalidTimestamp:\n          tsMain.invalidTimestamp || tsEnd.invalidTimestamp ? true : undefined,\n      });\n\n      return {\n        schemaVersion: \"0.2\",\n        eventId,\n        runId: event.runId,\n        kind: \"LOGIC\",\n        name: event.stepId,\n        status: mapRunOrStepStatus(event.status),\n        timestamp: tsMain.iso,\n        endedAt: tsEnd.iso,\n        durationMs: event.durationMs,\n        confidence: \"explicit\",\n        source,\n        attributes,\n        error,\n      };\n    }\n\n    case \"outcome_observed\": {\n      const tsObserved = toIsoTimestamp(event.observedAt);\n      const attributes = compactAttributes({\n        legacyEvent: \"outcome_observed\",\n        outcomeId: event.outcomeId,\n        outcomeStatus: event.status,\n        expectation: event.expectation,\n        method: event.method,\n        actual: event.actual,\n        evidence: event.evidence,\n        observedAt: tsObserved.iso,\n        invalidTimestamp:\n          tsMain.invalidTimestamp || tsObserved.invalidTimestamp ? true : undefined,\n      });\n\n      const out: PersistedInspectEvent = {\n        schemaVersion: \"0.2\",\n        eventId,\n        runId: event.runId,\n        kind: \"OUTCOME\",\n        name: event.name,\n        status: event.status === \"failed\" ? \"error\" : \"ok\",\n        timestamp: tsMain.iso,\n        confidence: \"explicit\",\n        source,\n        attributes,\n      };\n      if (event.parentId !== undefined) {\n        out.parentId = event.parentId;\n      }\n      if (event.actual !== undefined) {\n        out.outputSummary = event.actual;\n      }\n      return out;\n    }\n\n    default: {\n      const _exhaustive: never = event;\n      throw new Error(`Unsupported trace event: ${(_exhaustive as TraceEvent).event}`);\n    }\n  }\n}\n\n/**\n * Maps a v0.1 trace event list to persisted v0.2 events (one output per input).\n */\nexport function traceEventsToPersistedInspectEvents(\n  events: readonly TraceEvent[],\n  options?: Omit<TraceEventToPersistedOptions, \"eventIndex\">,\n): PersistedInspectEvent[] {\n  return events.map((event, index) =>\n    traceEventToPersistedInspectEvent(event, { ...options, eventIndex: index }),\n  );\n}\n","import type {\n  InspectEvent,\n  InspectNode,\n  InspectRunTree,\n  RelationshipSummary,\n} from \"../types/inspect-event.js\";\nimport type { LogIngestConfig } from \"../types/log-config.js\";\n\nexport interface TreeBuilderOptions {\n  config?: LogIngestConfig;\n}\n\nfunction inc<T extends string>(map: Record<T, number>, key: T): void {\n  map[key] = (map[key] ?? 0) + 1;\n}\n\nfunction confidenceRank(confidence: InspectEvent[\"confidence\"]): number {\n  switch (confidence) {\n    case \"unknown\":\n      return 0;\n    case \"heuristic\":\n      return 1;\n    case \"correlated\":\n      return 2;\n    case \"explicit\":\n      return 3;\n    default:\n      return 0;\n  }\n}\n\nfunction computeRunStatus(events: InspectEvent[]): InspectRunTree[\"status\"] {\n  // Derive the run status from the RUN node lifecycle, matching\n  // manualTraceEventsToRunTree and extractMetadata: a run is \"running\" only\n  // until its RUN completion is recorded. The v0.1 bridge writes each node as a\n  // \"started\" event (status \"running\") followed by a \"completed\" event, so a\n  // finished run still carries \"running\" started rows; those must not force the\n  // whole run back to \"running\". Events arrive timestamp-sorted, so the last\n  // terminal RUN status wins.\n  let runTerminal: \"ok\" | \"error\" | undefined;\n  let sawRunEvent = false;\n  for (const e of events) {\n    if (e.kind !== \"RUN\") continue;\n    sawRunEvent = true;\n    if (e.status === \"ok\" || e.status === \"error\") {\n      runTerminal = e.status;\n    }\n  }\n  if (sawRunEvent) {\n    return runTerminal ?? \"running\";\n  }\n\n  // Fallback for traces with no RUN node (e.g. log-only ingestion).\n  let hasRunning = false;\n  for (const e of events) {\n    if (e.status === \"error\") return \"error\";\n    if (e.status === \"running\") hasRunning = true;\n  }\n  return hasRunning ? \"running\" : \"ok\";\n}\n\ninterface PendingEdge {\n  childId: string;\n  parentId: string;\n  childTimestamp: number;\n  childConfidence: InspectEvent[\"confidence\"];\n}\n\n/**\n * Link children to parents without self-edges or cycles. Broken edges become roots.\n */\nexport function linkNodesVisibilityFirst(\n  nodes: Map<string, InspectNode>,\n): { roots: InspectNode[]; summary: RelationshipSummary } {\n  let selfParentCount = 0;\n  let unresolvedParentCount = 0;\n  let normalizedEdgeCount = 0;\n  let cycleCount = 0;\n\n  const pending: PendingEdge[] = [];\n  for (const node of nodes.values()) {\n    const parentId = node.event.parentId;\n    if (!parentId) continue;\n    if (parentId === node.event.eventId) {\n      selfParentCount += 1;\n      normalizedEdgeCount += 1;\n      continue;\n    }\n    if (!nodes.has(parentId)) {\n      unresolvedParentCount += 1;\n      continue;\n    }\n    pending.push({\n      childId: node.event.eventId,\n      parentId,\n      childTimestamp: node.event.timestamp,\n      childConfidence: node.event.confidence,\n    });\n  }\n\n  // Prefer keeping higher-confidence / earlier edges; break the weakest last edge in a cycle.\n  pending.sort((a, b) => {\n    const conf = confidenceRank(b.childConfidence) - confidenceRank(a.childConfidence);\n    if (conf !== 0) return conf;\n    return a.childTimestamp - b.childTimestamp;\n  });\n\n  const parentOf = new Map<string, string>();\n  for (const edge of pending) {\n    parentOf.set(edge.childId, edge.parentId);\n    // Detect if accepting this edge creates a cycle (walk from parent toward roots).\n    let cursor: string | undefined = edge.parentId;\n    const seen = new Set<string>([edge.childId]);\n    let cyclic = false;\n    while (cursor) {\n      if (seen.has(cursor)) {\n        cyclic = true;\n        break;\n      }\n      seen.add(cursor);\n      cursor = parentOf.get(cursor);\n    }\n    if (cyclic) {\n      parentOf.delete(edge.childId);\n      cycleCount += 1;\n      normalizedEdgeCount += 1;\n    }\n  }\n\n  for (const [childId, parentId] of parentOf) {\n    nodes.get(parentId)!.children.push(nodes.get(childId)!);\n  }\n\n  const roots: InspectNode[] = [];\n  for (const node of nodes.values()) {\n    if (!parentOf.has(node.event.eventId)) {\n      roots.push(node);\n    }\n  }\n\n  const assignDepth = (n: InspectNode, depth: number, stack: Set<string>) => {\n    if (stack.has(n.event.eventId)) return;\n    n.depth = depth;\n    stack.add(n.event.eventId);\n    for (const c of n.children) assignDepth(c, depth + 1, stack);\n    stack.delete(n.event.eventId);\n  };\n  for (const r of roots) assignDepth(r, 0, new Set());\n\n  return {\n    roots,\n    summary: {\n      rootCount: roots.length,\n      selfParentCount,\n      cycleCount,\n      unresolvedParentCount,\n      normalizedEdgeCount,\n    },\n  };\n}\n\nexport class TreeBuilder {\n  constructor(options?: TreeBuilderOptions) {\n    void options?.config;\n  }\n\n  build(events: InspectEvent[]): InspectRunTree[] {\n    const byRun = new Map<string, InspectEvent[]>();\n    for (const e of events) {\n      if (!byRun.has(e.runId)) byRun.set(e.runId, []);\n      byRun.get(e.runId)!.push(e);\n    }\n\n    const out: InspectRunTree[] = [];\n    for (const [runId, runEvents] of byRun.entries()) {\n      const sorted = [...runEvents].sort((a, b) => a.timestamp - b.timestamp);\n\n      const nodes = new Map<string, InspectNode>();\n      for (const e of sorted) {\n        nodes.set(e.eventId, { event: e, children: [], depth: 0 });\n      }\n\n      const { roots, summary } = linkNodesVisibilityFirst(nodes);\n\n      // metadata\n      const confidenceBreakdown = {\n        explicit: 0,\n        correlated: 0,\n        heuristic: 0,\n        unknown: 0,\n      } as Record<InspectEvent[\"confidence\"], number>;\n      const kinds = {} as Record<InspectEvent[\"kind\"], number>;\n      for (const e of sorted) {\n        inc(confidenceBreakdown, e.confidence);\n        (kinds as any)[e.kind] = ((kinds as any)[e.kind] ?? 0) + 1;\n      }\n\n      const startedAt = sorted.length > 0 ? sorted[0]!.timestamp : undefined;\n      const endedAt = sorted.length > 0 ? sorted[sorted.length - 1]!.timestamp : undefined;\n      const status = computeRunStatus(sorted);\n      const durationMs =\n        startedAt !== undefined &&\n        endedAt !== undefined &&\n        Number.isFinite(startedAt) &&\n        Number.isFinite(endedAt) &&\n        endedAt >= startedAt &&\n        status !== \"running\"\n          ? endedAt - startedAt\n          : undefined;\n\n      const name = sorted.find((e) => e.kind === \"RUN\")?.name;\n\n      out.push({\n        runId,\n        name,\n        status,\n        startedAt,\n        endedAt: status === \"running\" ? undefined : endedAt,\n        durationMs,\n        children: roots,\n        metadata: {\n          totalEvents: sorted.length,\n          confidenceBreakdown,\n          kinds,\n          relationshipSummary: summary,\n        },\n      });\n    }\n\n    // newest first for stable display\n    out.sort((a, b) => (b.startedAt ?? 0) - (a.startedAt ?? 0));\n    return out;\n  }\n}\n","import type { EventSource, InspectEvent } from \"../types/inspect-event.js\";\nimport {\n  isPersistedInspectEvent,\n  type PersistedEventSourceType,\n  type PersistedInspectEvent,\n} from \"../types/persisted-inspect-event.js\";\n\nexport interface PersistedToInspectEventOptions {\n  /**\n   * If true, invalid persisted events are skipped by batch conversion.\n   * If false or omitted, invalid events throw.\n   */\n  skipInvalid?: boolean;\n}\n\nfunction compactAttributes(\n  entries: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n  const out: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(entries)) {\n    if (value !== undefined) {\n      out[key] = value;\n    }\n  }\n  return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction parseIsoToMs(iso: string): { ms: number; invalidTimestamp: boolean } {\n  const parsed = Date.parse(iso);\n  if (!Number.isFinite(parsed)) {\n    return { ms: 0, invalidTimestamp: true };\n  }\n  return { ms: parsed, invalidTimestamp: false };\n}\n\nfunction mapPersistedSourceToInspect(\n  event: PersistedInspectEvent,\n): EventSource {\n  const attrs = event.attributes ?? {};\n  const sourceName = event.source.name;\n\n  if (sourceName === \"pino\") {\n    return {\n      type: \"pino\",\n      file: typeof attrs.sourceFile === \"string\" ? attrs.sourceFile : undefined,\n      line: typeof attrs.sourceLine === \"number\" ? attrs.sourceLine : undefined,\n    };\n  }\n  if (sourceName === \"winston\") {\n    return {\n      type: \"winston\",\n      file: typeof attrs.sourceFile === \"string\" ? attrs.sourceFile : undefined,\n      line: typeof attrs.sourceLine === \"number\" ? attrs.sourceLine : undefined,\n    };\n  }\n\n  const mapType = (t: PersistedEventSourceType): EventSource[\"type\"] => {\n    switch (t) {\n      case \"manual\":\n        return \"manual\";\n      case \"json-log\":\n        return \"json-log\";\n      case \"log4js\":\n        return \"log4js\";\n      case \"adapter\":\n      case \"ai-sdk\":\n      case \"otel\":\n        return \"adapter\";\n      default:\n        return \"json-log\";\n    }\n  };\n\n  return {\n    type: mapType(event.source.type),\n    file: typeof attrs.sourceFile === \"string\" ? attrs.sourceFile : undefined,\n    line: typeof attrs.sourceLine === \"number\" ? attrs.sourceLine : undefined,\n  };\n}\n\nfunction buildInspectAttributes(event: PersistedInspectEvent): Record<string, unknown> {\n  const attrs =\n    event.attributes !== undefined ? { ...event.attributes } : {};\n\n  if (event.inputSummary !== undefined) {\n    attrs.inputSummary = event.inputSummary;\n  }\n  if (event.outputSummary !== undefined) {\n    attrs.outputSummary = event.outputSummary;\n  }\n\n  if (event.error) {\n    if (event.error.name !== undefined) {\n      attrs.errorName = event.error.name;\n    }\n    attrs.errorMessage = event.error.message;\n    if (event.error.code !== undefined) {\n      attrs.errorCode = event.error.code;\n    }\n  }\n\n  if (event.tokenUsage) {\n    attrs.tokens = { ...event.tokenUsage };\n  }\n\n  if (event.source.type === \"ai-sdk\" || event.source.type === \"otel\") {\n    attrs.originalSourceType = event.source.type;\n  }\n\n  if (event.source.name !== undefined) {\n    attrs.sourceName = event.source.name;\n  }\n  if (event.source.version !== undefined) {\n    attrs.sourceVersion = event.source.version;\n  }\n\n  return attrs;\n}\n\n/**\n * Maps one v0.2 {@link PersistedInspectEvent} to in-memory {@link InspectEvent}.\n * Throws if `event` fails {@link isPersistedInspectEvent}.\n */\nexport function persistedInspectEventToInspectEvent(\n  event: PersistedInspectEvent,\n): InspectEvent {\n  if (!isPersistedInspectEvent(event)) {\n    throw new Error(\"Invalid PersistedInspectEvent: failed isPersistedInspectEvent\");\n  }\n\n  const ts = parseIsoToMs(event.timestamp);\n  const attrs = buildInspectAttributes(event);\n  if (ts.invalidTimestamp) {\n    attrs.invalidTimestamp = true;\n  }\n\n  let status: InspectEvent[\"status\"] | undefined;\n  if (\n    event.status === \"running\" ||\n    event.status === \"ok\" ||\n    event.status === \"error\"\n  ) {\n    status = event.status;\n  } else if (event.status === \"unknown\") {\n    attrs.persistedStatus = \"unknown\";\n  }\n\n  const out: InspectEvent = {\n    eventId: event.eventId,\n    runId: event.runId,\n    name: event.name,\n    kind: event.kind,\n    timestamp: ts.ms,\n    confidence: event.confidence,\n    source: mapPersistedSourceToInspect(event),\n    attributes: compactAttributes(attrs),\n  };\n\n  if (event.parentId !== undefined) {\n    out.parentId = event.parentId;\n  }\n  if (status !== undefined) {\n    out.status = status;\n  }\n  if (\n    event.durationMs !== undefined &&\n    Number.isFinite(event.durationMs) &&\n    event.durationMs >= 0\n  ) {\n    out.durationMs = event.durationMs;\n  }\n  if (event.startedAt !== undefined) {\n    const started = parseIsoToMs(event.startedAt);\n    if (!started.invalidTimestamp) {\n      attrs.startedAtMs = started.ms;\n      // Prefer real start instant for span timing when timestamp alone is completion-skewed.\n      out.timestamp = started.ms;\n    }\n  }\n  if (event.endedAt !== undefined) {\n    const ended = parseIsoToMs(event.endedAt);\n    if (!ended.invalidTimestamp) {\n      attrs.endedAtMs = ended.ms;\n      if (\n        out.durationMs === undefined &&\n        typeof attrs.startedAtMs === \"number\" &&\n        ended.ms >= attrs.startedAtMs\n      ) {\n        out.durationMs = ended.ms - attrs.startedAtMs;\n      }\n    }\n  }\n  out.attributes = compactAttributes(attrs);\n\n  return out;\n}\n\n/**\n * Maps persisted v0.2 events to in-memory {@link InspectEvent} rows.\n */\nexport function persistedInspectEventsToInspectEvents(\n  events: readonly PersistedInspectEvent[],\n  options?: PersistedToInspectEventOptions,\n): InspectEvent[] {\n  const skipInvalid = options?.skipInvalid === true;\n  const out: InspectEvent[] = [];\n\n  for (const event of events) {\n    if (!isPersistedInspectEvent(event)) {\n      if (skipInvalid) {\n        continue;\n      }\n      throw new Error(\"Invalid PersistedInspectEvent: failed isPersistedInspectEvent\");\n    }\n    out.push(persistedInspectEventToInspectEvent(event));\n  }\n\n  return out;\n}\n","import { TreeBuilder } from \"../logs/tree-builder.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport type { TraceEvent } from \"../types.js\";\n\nimport { traceEventsToPersistedInspectEvents } from \"./from-trace-event.js\";\nimport { persistedInspectEventsToInspectEvents } from \"./to-inspect-event.js\";\n\nexport interface PersistedTreeBridgeOptions {\n  /**\n   * If true, invalid persisted events are skipped.\n   * If false or omitted, invalid persisted events throw.\n   */\n  skipInvalid?: boolean;\n}\n\n/**\n * Builds {@link InspectRunTree} rows from v0.2 {@link PersistedInspectEvent} input.\n * Uses {@link TreeBuilder} as the canonical tree builder. Does not mutate `events`.\n */\nexport function persistedInspectEventsToRunTrees(\n  events: readonly PersistedInspectEvent[],\n  options?: PersistedTreeBridgeOptions,\n): InspectRunTree[] {\n  const inspectEvents = persistedInspectEventsToInspectEvents(events, {\n    skipInvalid: options?.skipInvalid,\n  });\n  return new TreeBuilder().build(inspectEvents);\n}\n\n/**\n * Builds {@link InspectRunTree} rows from legacy v0.1 {@link TraceEvent} input\n * via the persisted-event model. Does not mutate `events`.\n */\nexport function traceEventsToPersistedRunTrees(\n  events: readonly TraceEvent[],\n): InspectRunTree[] {\n  const persisted = traceEventsToPersistedInspectEvents(events);\n  return persistedInspectEventsToRunTrees(persisted);\n}\n","/**\n * Version-pinned reader/exporter mapping ledger (6.22).\n *\n * Records which external convention version was used and what was lost.\n * Does not bind persisted schema 1.0 to an unstable external convention.\n *\n * @experimental Available through `agent-inspect/readers`.\n */\n\nexport type MappingConfidence = \"explicit\" | \"correlated\" | \"heuristic\" | \"unknown\";\n\nexport type MappingLossKind =\n  | \"none\"\n  | \"dropped\"\n  | \"bounded\"\n  | \"privacy-redacted\"\n  | \"kind-degraded\"\n  | \"unsupported\";\n\n/**\n * One source→target mapping row.\n *\n * @experimental\n */\nexport interface MappingLedgerEntry {\n  source: string;\n  target: string;\n  transformation: string;\n  confidence: MappingConfidence;\n  loss: MappingLossKind;\n  privacyDecision?: string;\n}\n\n/**\n * Ledger published by a reader or exporter mapping.\n *\n * @experimental\n */\nexport interface MappingLedger {\n  id: string;\n  sourceFormat: string;\n  targetFormat: string;\n  /** External convention pin (e.g. OTel GenAI / OpenInference version). */\n  convention?: {\n    name: string;\n    version: string;\n    specUrl?: string;\n  };\n  entries: readonly MappingLedgerEntry[];\n  knownLosses: readonly string[];\n}\n\n/** OpenInference → AgentInspect mapping ledger pin. */\nexport const OPENINFERENCE_MAPPING_LEDGER: MappingLedger = {\n  id: \"openinference-to-agent-inspect\",\n  sourceFormat: \"openinference-json\",\n  targetFormat: \"agent-inspect-persisted-1.0\",\n  convention: {\n    name: \"OpenInference\",\n    version: \"0.2.x\",\n    specUrl: \"https://github.com/Arize-ai/openinference\",\n  },\n  entries: [\n    {\n      source: \"span.context.span_id\",\n      target: \"eventId / trace.spanId\",\n      transformation: \"hex identity when present\",\n      confidence: \"explicit\",\n      loss: \"none\",\n    },\n    {\n      source: \"span.context.trace_id\",\n      target: \"trace.traceId\",\n      transformation: \"hex identity when present\",\n      confidence: \"explicit\",\n      loss: \"none\",\n    },\n    {\n      source: \"span.parent_id\",\n      target: \"parentId\",\n      transformation: \"direct when resolvable in batch\",\n      confidence: \"explicit\",\n      loss: \"none\",\n    },\n    {\n      source: \"attributes.openinference.span.kind\",\n      target: \"kind\",\n      transformation: \"enumerated kind map with degrade-to-LOGIC\",\n      confidence: \"correlated\",\n      loss: \"kind-degraded\",\n      privacyDecision: \"unknown kinds preserved under bounds as attributes\",\n    },\n    {\n      source: \"attributes.llm.input_messages / output_messages\",\n      target: \"inputSummary / outputSummary\",\n      transformation: \"bounded summaries only\",\n      confidence: \"heuristic\",\n      loss: \"privacy-redacted\",\n      privacyDecision: \"raw message bodies are not required and may be omitted\",\n    },\n  ],\n  knownLosses: [\n    \"Chain-of-thought / private reasoning fields are never imported as raw content.\",\n    \"Oversized attributes are bounded or marked unsupported.\",\n    \"Unknown OpenInference kinds degrade to LOGIC with a warning.\",\n  ],\n};\n\n/** OTLP JSON → AgentInspect mapping ledger pin. */\nexport const OTLP_JSON_MAPPING_LEDGER: MappingLedger = {\n  id: \"otlp-json-to-agent-inspect\",\n  sourceFormat: \"otlp-json\",\n  targetFormat: \"agent-inspect-persisted-1.0\",\n  convention: {\n    name: \"OpenTelemetry GenAI semantic conventions\",\n    version: \"1.36.0\",\n    specUrl: \"https://opentelemetry.io/docs/specs/semconv/gen-ai/\",\n  },\n  entries: [\n    {\n      source: \"resourceSpans[].scopeSpans[].spans[]\",\n      target: \"PersistedInspectEvent[]\",\n      transformation: \"one span → one event when mappable\",\n      confidence: \"explicit\",\n      loss: \"none\",\n    },\n    {\n      source: \"span.attributes[gen_ai.*]\",\n      target: \"attributes / tokenUsage / kind\",\n      transformation: \"pinned GenAI attribute family\",\n      confidence: \"correlated\",\n      loss: \"bounded\",\n    },\n    {\n      source: \"span.attributes (unknown keys)\",\n      target: \"attributes.* / unsupportedFields\",\n      transformation: \"preserve under bounds or list as unsupported\",\n      confidence: \"unknown\",\n      loss: \"unsupported\",\n    },\n  ],\n  knownLosses: [\n    \"Schema 1.0 is not bound to Development-status OTel GenAI revisions.\",\n    \"Status rewrite to fit a local narrative is forbidden.\",\n    \"Payload bodies may be omitted; digests are optional application metadata.\",\n  ],\n};\n\nexport const BUILTIN_MAPPING_LEDGERS: readonly MappingLedger[] = Object.freeze([\n  OPENINFERENCE_MAPPING_LEDGER,\n  OTLP_JSON_MAPPING_LEDGER,\n]);\n\nexport function getMappingLedger(id: string): MappingLedger | undefined {\n  return BUILTIN_MAPPING_LEDGERS.find((ledger) => ledger.id === id);\n}\n","import { readdir, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { parseTraceJsonl, type TraceJsonlFormat } from \"../read-trace.js\";\nimport {\n  traceEventToPersistedInspectEvent,\n  traceEventsToPersistedInspectEvents,\n} from \"../persisted/from-trace-event.js\";\nimport { persistedInspectEventsToRunTrees } from \"../persisted/tree-bridge.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\nimport type {\n  PersistedEventStatus,\n  PersistedInspectEvent,\n  PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\nimport { formatProgrammaticDiagnostic } from \"../diagnostics/programmatic.js\";\n\nexport type TraceInput =\n  | { type: \"file\"; path: string }\n  | { type: \"directory\"; path: string }\n  | { type: \"string\"; content: string }\n  | { type: \"buffer\"; content: Buffer }\n  | { type: \"stdin\" };\n\nexport type TraceReadWarningSeverity = \"info\" | \"warning\" | \"error\";\n\nexport interface TraceReadWarning {\n  code: string;\n  message: string;\n  severity?: TraceReadWarningSeverity;\n  sourceFile?: string;\n  line?: number;\n  field?: string;\n}\n\nexport interface TraceReadResult {\n  format: string;\n  events: PersistedInspectEvent[];\n  runs: InspectRunTree[];\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n  sourceFiles: string[];\n}\n\nexport interface TraceFormatCandidate {\n  format: string;\n  confidence: number;\n  readerName?: string;\n  description?: string;\n  warnings?: TraceReadWarning[];\n}\n\nexport type TraceFormatDetectionStatus =\n  | \"detected\"\n  | \"ambiguous\"\n  | \"unsupported\";\n\nexport interface TraceFormatDetectionResult {\n  status: TraceFormatDetectionStatus;\n  format?: string;\n  candidates: TraceFormatCandidate[];\n  warnings: TraceReadWarning[];\n}\n\nexport interface TraceReaderDetectOptions {\n  format?: string;\n}\n\nexport interface TraceReaderReadOptions {\n  format?: string;\n}\n\nexport interface TraceReader {\n  readonly format: string;\n  readonly name?: string;\n  detect(\n    input: TraceInput,\n    options?: TraceReaderDetectOptions,\n  ): TraceFormatCandidate | undefined | Promise<TraceFormatCandidate | undefined>;\n  read(\n    input: TraceInput,\n    options?: TraceReaderReadOptions,\n  ): TraceReadResult | Promise<TraceReadResult>;\n}\n\nexport interface TraceReadOptions {\n  format?: string;\n  readers?: readonly TraceReader[];\n}\n\ninterface ResolvedTraceInput {\n  content: string;\n  sourceFiles: string[];\n}\n\ninterface OpenInferenceDocument {\n  spans: JsonRecord[];\n  confidence: number;\n  description: string;\n  version?: string;\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n}\n\ninterface OpenInferenceMappedSpan {\n  event: PersistedInspectEvent;\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n  spanId: string;\n  parentSpanId?: string;\n}\n\ninterface OtlpDocument {\n  spans: OtlpSpanContext[];\n  confidence: number;\n  description: string;\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n}\n\ninterface OtlpSpanContext {\n  span: JsonRecord;\n  resourceAttributes: Record<string, unknown>;\n  scopeAttributes: Record<string, unknown>;\n  scopeName?: string;\n  scopeVersion?: string;\n  pathPrefix: string;\n}\n\ntype JsonRecord = Record<string, unknown>;\n\nconst DEFAULT_MAX_TRACE_INPUT_BYTES = 10 * 1024 * 1024;\nconst MIN_DETECTION_CONFIDENCE = 0.5;\nconst AMBIGUOUS_CONFIDENCE_DELTA = 0.05;\nconst resolvedInputCache = new WeakMap<TraceInput, Promise<ResolvedTraceInput | undefined>>();\nconst OPENINFERENCE_READER_FORMAT = \"openinference-json\";\nconst OTLP_READER_FORMAT = \"otlp-json\";\n\nconst OPENINFERENCE_SPAN_KEYS = new Set([\n  \"trace_id\",\n  \"traceId\",\n  \"span_id\",\n  \"spanId\",\n  \"parent_span_id\",\n  \"parentSpanId\",\n  \"name\",\n  \"start_time_unix_nano\",\n  \"startTimeUnixNano\",\n  \"end_time_unix_nano\",\n  \"endTimeUnixNano\",\n  \"start_time\",\n  \"startTime\",\n  \"end_time\",\n  \"endTime\",\n  \"attributes\",\n  \"status\",\n  \"kind\",\n  \"span_kind\",\n  \"spanKind\",\n]);\n\nconst OPENINFERENCE_SENSITIVE_ATTRIBUTE_KEYS = [\n  \"input.value\",\n  \"output.value\",\n  \"input.mime_type\",\n  \"output.mime_type\",\n  \"llm.input_messages\",\n  \"llm.output_messages\",\n  \"llm.prompts\",\n  \"llm.completions\",\n  \"retrieval.documents\",\n  \"reranker.input_documents\",\n  \"reranker.output_documents\",\n  \"document.content\",\n  \"gen_ai.prompt\",\n  \"gen_ai.completion\",\n  \"gen_ai.input.messages\",\n  \"gen_ai.output.messages\",\n];\n\nconst OTLP_SPAN_KEYS = new Set([\n  \"traceId\",\n  \"spanId\",\n  \"parentSpanId\",\n  \"name\",\n  \"kind\",\n  \"startTimeUnixNano\",\n  \"endTimeUnixNano\",\n  \"attributes\",\n  \"events\",\n  \"status\",\n  \"droppedAttributesCount\",\n  \"droppedEventsCount\",\n  \"droppedLinksCount\",\n  \"links\",\n  \"flags\",\n]);\n\nexport type TraceReadErrorCode =\n  | \"unsupported_format\"\n  | \"ambiguous_format\"\n  | \"reader_failed\"\n  | \"invalid_input\";\n\nexport class TraceReadError extends Error {\n  readonly code: TraceReadErrorCode;\n  readonly warnings: TraceReadWarning[];\n\n  constructor(\n    code: TraceReadErrorCode,\n    message: string,\n    warnings: TraceReadWarning[] = [],\n  ) {\n    super(message);\n    this.name = \"TraceReadError\";\n    this.code = code;\n    this.warnings = warnings;\n  }\n}\n\nconst TRACE_INPUT_INVALID_MESSAGE = formatProgrammaticDiagnostic(\n  \"AI_TRACE_INPUT_INVALID\",\n);\n\nfunction isTraceInput(input: unknown): input is TraceInput {\n  if (typeof input !== \"object\" || input === null || Array.isArray(input)) {\n    return false;\n  }\n  const record = input as { type?: unknown; path?: unknown; content?: unknown };\n  switch (record.type) {\n    case \"file\":\n    case \"directory\":\n      return typeof record.path === \"string\";\n    case \"string\":\n      return typeof record.content === \"string\";\n    case \"buffer\":\n      return Buffer.isBuffer(record.content);\n    case \"stdin\":\n      return true;\n    default:\n      return false;\n  }\n}\n\n/**\n * Runtime guard for structured TraceInput. Never throws WeakMap key errors for bare strings.\n */\nexport function assertTraceInput(input: unknown): asserts input is TraceInput {\n  if (isTraceInput(input)) return;\n  throw new TraceReadError(\"invalid_input\", TRACE_INPUT_INVALID_MESSAGE, [\n    {\n      code: \"AI_TRACE_INPUT_INVALID\",\n      message: TRACE_INPUT_INVALID_MESSAGE,\n      severity: \"error\",\n    },\n  ]);\n}\n\nfunction normalizeCandidate(\n  reader: TraceReader,\n  candidate: TraceFormatCandidate,\n): TraceFormatCandidate {\n  const confidence = Number.isFinite(candidate.confidence)\n    ? Math.max(0, Math.min(1, candidate.confidence))\n    : 0;\n\n  return {\n    ...candidate,\n    format: candidate.format || reader.format,\n    confidence,\n    readerName: candidate.readerName ?? reader.name,\n  };\n}\n\nfunction sortCandidates(\n  candidates: readonly TraceFormatCandidate[],\n): TraceFormatCandidate[] {\n  return [...candidates].sort((a, b) => {\n    if (b.confidence !== a.confidence) return b.confidence - a.confidence;\n    return a.format.localeCompare(b.format);\n  });\n}\n\nfunction collectWarnings(\n  candidates: readonly TraceFormatCandidate[],\n): TraceReadWarning[] {\n  return candidates.flatMap((candidate) => candidate.warnings ?? []);\n}\n\nfunction dedupeWarnings(\n  warnings: readonly TraceReadWarning[],\n): TraceReadWarning[] {\n  const seen = new Set<string>();\n  const out: TraceReadWarning[] = [];\n  for (const warning of warnings) {\n    const key = [\n      warning.code,\n      warning.message,\n      warning.severity ?? \"\",\n      warning.sourceFile ?? \"\",\n      warning.line ?? \"\",\n      warning.field ?? \"\",\n    ].join(\"\\u0000\");\n    if (seen.has(key)) continue;\n    seen.add(key);\n    out.push(warning);\n  }\n  return out;\n}\n\nfunction attachSingleSourceFile(\n  warnings: readonly TraceReadWarning[],\n  resolved: ResolvedTraceInput,\n): TraceReadWarning[] {\n  if (resolved.sourceFiles.length !== 1) return [...warnings];\n  const [sourceFile] = resolved.sourceFiles;\n  return warnings.map((warning) => ({\n    ...warning,\n    sourceFile: warning.sourceFile ?? sourceFile,\n  }));\n}\n\nfunction findReaderByFormat(\n  format: string,\n  readers: readonly TraceReader[],\n): TraceReader | undefined {\n  return readers.find((reader) => reader.format === format);\n}\n\nasync function jsonlFilesInDirectory(dirPath: string): Promise<string[]> {\n  const entries = await readdir(dirPath, { withFileTypes: true });\n  return entries\n    .filter((entry) => entry.isFile() && entry.name.endsWith(\".jsonl\"))\n    .map((entry) => path.join(dirPath, entry.name))\n    .sort((a, b) => a.localeCompare(b));\n}\n\nasync function resolveInput(input: TraceInput): Promise<ResolvedTraceInput | undefined> {\n  const cached = resolvedInputCache.get(input);\n  if (cached) return cached;\n\n  const promise = resolveInputUncached(input);\n  resolvedInputCache.set(input, promise);\n  return promise;\n}\n\nfunction assertInputWithinBounds(content: string, sourceFile?: string): void {\n  const bytes = Buffer.byteLength(content, \"utf8\");\n  if (bytes <= DEFAULT_MAX_TRACE_INPUT_BYTES) return;\n  throw new TraceReadError(\"unsupported_format\", \"Trace input exceeds the local reader size limit.\", [\n    {\n      code: \"input_too_large\",\n      message: `Trace input is ${bytes} bytes; max is ${DEFAULT_MAX_TRACE_INPUT_BYTES} bytes.`,\n      severity: \"error\",\n      ...(sourceFile !== undefined ? { sourceFile } : {}),\n    },\n  ]);\n}\n\nasync function resolveInputUncached(\n  input: TraceInput,\n): Promise<ResolvedTraceInput | undefined> {\n  if (input.type === \"string\") {\n    assertInputWithinBounds(input.content);\n    return { content: input.content, sourceFiles: [] };\n  }\n  if (input.type === \"buffer\") {\n    const content = input.content.toString(\"utf-8\");\n    assertInputWithinBounds(content);\n    return { content, sourceFiles: [] };\n  }\n  if (input.type === \"file\") {\n    const content = await readFile(input.path, \"utf-8\");\n    assertInputWithinBounds(content, input.path);\n    return { content, sourceFiles: [input.path] };\n  }\n  if (input.type === \"directory\") {\n    const files = await jsonlFilesInDirectory(input.path);\n    const parts = await Promise.all(\n      files.map(async (file) => (await readFile(file, \"utf-8\")).trimEnd()),\n    );\n    const content = parts.filter((part) => part.trim() !== \"\").join(\"\\n\");\n    assertInputWithinBounds(content, input.path);\n    return {\n      content,\n      sourceFiles: files,\n    };\n  }\n  return undefined;\n}\n\nfunction detectJsonlFormat(content: string): {\n  format: TraceJsonlFormat;\n  validRows: number;\n  warnings: TraceReadWarning[];\n} {\n  let saw01 = false;\n  let saw02 = false;\n  let saw10 = false;\n  let validRows = 0;\n  let invalidJsonRows = 0;\n  let unknownSchemaRows = 0;\n  let firstInvalidJsonLine: number | undefined;\n  let firstUnknownSchemaLine: number | undefined;\n\n  let lineNumber = 0;\n  for (const line of content.split(/\\r?\\n/)) {\n    lineNumber += 1;\n    const trimmed = line.trim();\n    if (trimmed === \"\") continue;\n\n    let parsed: unknown;\n    try {\n      parsed = JSON.parse(trimmed) as unknown;\n    } catch {\n      invalidJsonRows += 1;\n      firstInvalidJsonLine ??= lineNumber;\n      continue;\n    }\n\n    if (\n      typeof parsed === \"object\" &&\n      parsed !== null &&\n      !Array.isArray(parsed) &&\n      \"schemaVersion\" in parsed\n    ) {\n      const version = (parsed as { schemaVersion?: unknown }).schemaVersion;\n      if (version === \"0.1\") {\n        saw01 = true;\n        validRows += 1;\n        continue;\n      }\n      if (version === \"0.2\") {\n        saw02 = true;\n        validRows += 1;\n        continue;\n      }\n      if (version === \"1.0\") {\n        saw10 = true;\n        validRows += 1;\n        continue;\n      }\n    }\n\n    unknownSchemaRows += 1;\n    firstUnknownSchemaLine ??= lineNumber;\n  }\n\n  const warnings: TraceReadWarning[] = [];\n  if (invalidJsonRows > 0) {\n    warnings.push({\n      code: \"invalid_jsonl_rows\",\n      message: `Skipped ${invalidJsonRows} invalid JSONL row(s) during format detection.`,\n      severity: \"warning\",\n      ...(firstInvalidJsonLine !== undefined ? { line: firstInvalidJsonLine } : {}),\n    });\n  }\n  if (unknownSchemaRows > 0) {\n    warnings.push({\n      code: \"unknown_schema_rows\",\n      message: `Skipped ${unknownSchemaRows} row(s) with unknown schemaVersion during format detection.`,\n      severity: \"warning\",\n      ...(firstUnknownSchemaLine !== undefined ? { line: firstUnknownSchemaLine } : {}),\n    });\n  }\n\n  let format: TraceJsonlFormat = \"empty\";\n  const seenFormats = [saw01, saw02, saw10].filter(Boolean).length;\n  if (seenFormats > 1) format = \"mixed\";\n  else if (saw01) format = \"0.1\";\n  else if (saw02) format = \"0.2\";\n  else if (saw10) format = \"1.0\";\n\n  return { format, validRows, warnings };\n}\n\nfunction agentInspectFormatLabel(format: TraceJsonlFormat): string {\n  switch (format) {\n    case \"0.1\":\n      return \"agent-inspect-v0.1-jsonl\";\n    case \"0.2\":\n      return \"agent-inspect-v0.2-jsonl\";\n    case \"1.0\":\n      return \"agent-inspect-v1.0-jsonl\";\n    case \"mixed\":\n      return \"agent-inspect-mixed-jsonl\";\n    default:\n      return \"agent-inspect-jsonl\";\n  }\n}\n\nfunction persistedEventsForParsedTrace(\n  parsed: ReturnType<typeof parseTraceJsonl>,\n): PersistedInspectEvent[] {\n  if (\n    (parsed.format === \"0.2\" || parsed.format === \"1.0\") &&\n    parsed.persisted.length > 0\n  ) {\n    return [...parsed.persisted];\n  }\n  if (parsed.format === \"mixed\" && parsed.rows.length > 0) {\n    return parsed.rows.map((row, index) => {\n      if (row.format === \"0.2\" || row.format === \"1.0\") return row.event;\n      return traceEventToPersistedInspectEvent(row.event, {\n        eventIndex: index,\n        sourceName: \"agent-inspect-jsonl-reader\",\n      });\n    });\n  }\n  return traceEventsToPersistedInspectEvents(parsed.events, {\n    sourceName: \"agent-inspect-jsonl-reader\",\n  });\n}\n\nfunction isRecord(value: unknown): value is JsonRecord {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n  return typeof value === \"string\" && value.trim() !== \"\";\n}\n\nfunction readStringField(\n  record: JsonRecord,\n  keys: readonly string[],\n): string | undefined {\n  for (const key of keys) {\n    const value = record[key];\n    if (isNonEmptyString(value)) return value;\n  }\n  return undefined;\n}\n\nfunction readRecordField(\n  record: JsonRecord,\n  key: string,\n): JsonRecord | undefined {\n  const value = record[key];\n  return isRecord(value) ? value : undefined;\n}\n\nfunction parseJsonDocument(content: string): unknown {\n  return JSON.parse(content) as unknown;\n}\n\nfunction looksLikeOpenInferenceSpan(value: unknown): value is JsonRecord {\n  if (!isRecord(value)) return false;\n  const attributes = readRecordField(value, \"attributes\");\n  return (\n    readStringField(value, [\"trace_id\", \"traceId\"]) !== undefined &&\n    readStringField(value, [\"span_id\", \"spanId\"]) !== undefined &&\n    (readStringField(value, [\"name\"]) !== undefined ||\n      attributes?.[\"openinference.span.kind\"] !== undefined)\n  );\n}\n\nfunction extractOpenInferenceDocument(root: unknown): OpenInferenceDocument | undefined {\n  const warnings: TraceReadWarning[] = [];\n  const unsupportedFields: string[] = [];\n\n  if (Array.isArray(root)) {\n    const spans = root.filter(looksLikeOpenInferenceSpan);\n    if (spans.length === 0) return undefined;\n    if (spans.length !== root.length) {\n      warnings.push({\n        code: \"openinference_skipped_items\",\n        message: \"Skipped non-span item(s) in OpenInference span array.\",\n        severity: \"warning\",\n      });\n    }\n    return {\n      spans,\n      confidence: 0.82,\n      description: \"OpenInference span array\",\n      warnings,\n      unsupportedFields,\n    };\n  }\n\n  if (!isRecord(root)) return undefined;\n\n  const rootFormat = root.format;\n  const rootCompatibility = root.compatibility;\n  const version =\n    typeof root.version === \"string\" && root.version.trim() !== \"\"\n      ? root.version\n      : undefined;\n\n  if (Array.isArray(root.spans)) {\n    const spans = root.spans.filter(looksLikeOpenInferenceSpan);\n    if (spans.length === 0 && (rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\")) {\n      warnings.push({\n        code: \"openinference_no_valid_spans\",\n        message: \"OpenInference document did not contain any valid spans.\",\n        severity: \"error\",\n      });\n      return {\n        spans,\n        confidence: 0.7,\n        description: \"Malformed OpenInference document\",\n        version,\n        warnings,\n        unsupportedFields,\n      };\n    }\n    if (spans.length === 0) return undefined;\n    if (spans.length !== root.spans.length) {\n      warnings.push({\n        code: \"openinference_skipped_spans\",\n        message: \"Skipped invalid OpenInference span item(s).\",\n        severity: \"warning\",\n      });\n    }\n    return {\n      spans,\n      confidence:\n        rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\"\n          ? 0.9\n          : 0.84,\n      description:\n        rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\"\n          ? \"OpenInference document\"\n          : \"OpenInference spans document\",\n      version,\n      warnings,\n      unsupportedFields,\n    };\n  }\n\n  if (Array.isArray(root.data)) {\n    const spans = root.data.filter(looksLikeOpenInferenceSpan);\n    if (spans.length === 0) return undefined;\n    if (spans.length !== root.data.length) {\n      warnings.push({\n        code: \"openinference_skipped_data_items\",\n        message: \"Skipped non-span item(s) in OpenInference data array.\",\n        severity: \"warning\",\n      });\n    }\n    return {\n      spans,\n      confidence: 0.8,\n      description: \"OpenInference data document\",\n      version,\n      warnings,\n      unsupportedFields,\n    };\n  }\n\n  if (looksLikeOpenInferenceSpan(root)) {\n    return {\n      spans: [root],\n      confidence: 0.76,\n      description: \"OpenInference single span\",\n      version,\n      warnings,\n      unsupportedFields,\n    };\n  }\n\n  if (rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\") {\n    warnings.push({\n      code: \"openinference_missing_spans\",\n      message: \"OpenInference document is missing a spans array.\",\n      severity: \"error\",\n    });\n    return {\n      spans: [],\n      confidence: 0.7,\n      description: \"Malformed OpenInference document\",\n      version,\n      warnings,\n      unsupportedFields,\n    };\n  }\n\n  return undefined;\n}\n\nfunction parseUnixNanoToIso(value: unknown): string | undefined {\n  if (typeof value === \"bigint\" && value >= 0n) {\n    return new Date(Number(value / 1_000_000n)).toISOString();\n  }\n  if (typeof value === \"number\" && Number.isFinite(value) && value >= 0) {\n    return new Date(Math.floor(value / 1_000_000)).toISOString();\n  }\n  if (typeof value === \"string\" && /^\\d+$/.test(value)) {\n    return new Date(Number(BigInt(value) / 1_000_000n)).toISOString();\n  }\n  return undefined;\n}\n\nfunction parseIsoTime(value: unknown): string | undefined {\n  if (!isNonEmptyString(value)) return undefined;\n  const ms = Date.parse(value);\n  if (!Number.isFinite(ms)) return undefined;\n  return new Date(ms).toISOString();\n}\n\nfunction readOpenInferenceTimestamp(\n  span: JsonRecord,\n  nanoKeys: readonly string[],\n  isoKeys: readonly string[],\n): string | undefined {\n  for (const key of nanoKeys) {\n    const iso = parseUnixNanoToIso(span[key]);\n    if (iso !== undefined) return iso;\n  }\n  for (const key of isoKeys) {\n    const iso = parseIsoTime(span[key]);\n    if (iso !== undefined) return iso;\n  }\n  return undefined;\n}\n\nfunction durationBetweenIso(startedAt?: string, endedAt?: string): number | undefined {\n  if (startedAt === undefined || endedAt === undefined) return undefined;\n  const startMs = Date.parse(startedAt);\n  const endMs = Date.parse(endedAt);\n  if (!Number.isFinite(startMs) || !Number.isFinite(endMs) || endMs < startMs) {\n    return undefined;\n  }\n  return endMs - startMs;\n}\n\nfunction isSensitiveOpenInferenceAttribute(key: string): boolean {\n  return OPENINFERENCE_SENSITIVE_ATTRIBUTE_KEYS.some(\n    (sensitiveKey) =>\n      key === sensitiveKey ||\n      key.startsWith(`${sensitiveKey}.`) ||\n      key.endsWith(\".message.content\") ||\n      key.endsWith(\".document.content\"),\n  );\n}\n\nfunction summarizeAttributeValue(value: unknown): Record<string, unknown> {\n  if (typeof value === \"string\") {\n    return { type: \"string\", length: value.length };\n  }\n  if (typeof value === \"number\") {\n    return { type: \"number\", finite: Number.isFinite(value) };\n  }\n  if (typeof value === \"boolean\") {\n    return { type: \"boolean\" };\n  }\n  if (Array.isArray(value)) {\n    return { type: \"array\", length: value.length };\n  }\n  if (isRecord(value)) {\n    return { type: \"object\", keyCount: Object.keys(value).length };\n  }\n  if (value === null) {\n    return { type: \"null\" };\n  }\n  return { type: typeof value };\n}\n\nfunction sanitizeOpenInferenceAttributes(\n  attributes: JsonRecord,\n  pathPrefix: string,\n): {\n  attributes: Record<string, unknown>;\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n} {\n  const out: Record<string, unknown> = {};\n  const warnings: TraceReadWarning[] = [];\n  const unsupportedFields: string[] = [];\n  const summarizedKeys: string[] = [];\n\n  for (const [key, value] of Object.entries(attributes)) {\n    if (isSensitiveOpenInferenceAttribute(key)) {\n      summarizedKeys.push(key);\n      out[`${key}.summary`] = summarizeAttributeValue(value);\n      unsupportedFields.push(`${pathPrefix}.attributes.${key}`);\n      continue;\n    }\n    out[key] = value;\n  }\n\n  if (summarizedKeys.length > 0) {\n    out[\"openinference.summarized_attributes\"] = summarizedKeys;\n    warnings.push({\n      code: \"openinference_sensitive_attribute_summarized\",\n      message:\n        \"OpenInference prompt/output/document attribute(s) were summarized instead of copied verbatim.\",\n      severity: \"warning\",\n    });\n  }\n\n  return { attributes: out, warnings, unsupportedFields };\n}\n\nfunction mapOpenInferenceKind(\n  span: JsonRecord,\n  attributes: JsonRecord,\n  pathPrefix: string,\n): { kind: PersistedInspectEvent[\"kind\"]; warnings: TraceReadWarning[] } {\n  const warnings: TraceReadWarning[] = [];\n  const agentInspectKind = attributes[\"agent_inspect.kind\"];\n  if (\n    agentInspectKind === \"RUN\" ||\n    agentInspectKind === \"AGENT\" ||\n    agentInspectKind === \"LLM\" ||\n    agentInspectKind === \"TOOL\" ||\n    agentInspectKind === \"CHAIN\" ||\n    agentInspectKind === \"RETRIEVER\" ||\n    agentInspectKind === \"DECISION\" ||\n    agentInspectKind === \"RESULT\" ||\n    agentInspectKind === \"ERROR\" ||\n    agentInspectKind === \"LOGIC\" ||\n    agentInspectKind === \"LOG\" ||\n    agentInspectKind === \"OUTCOME\"\n  ) {\n    return { kind: agentInspectKind, warnings };\n  }\n\n  const rawKind =\n    readStringField(span, [\"kind\", \"span_kind\", \"spanKind\"]) ??\n    (typeof attributes[\"openinference.span.kind\"] === \"string\"\n      ? attributes[\"openinference.span.kind\"]\n      : undefined);\n  const normalized = rawKind?.toUpperCase();\n\n  switch (normalized) {\n    case \"LLM\":\n      return { kind: \"LLM\", warnings };\n    case \"TOOL\":\n      return { kind: \"TOOL\", warnings };\n    case \"CHAIN\":\n      return { kind: \"CHAIN\", warnings };\n    case \"RETRIEVER\":\n      return { kind: \"RETRIEVER\", warnings };\n    case \"AGENT\":\n      return { kind: \"AGENT\", warnings };\n    case \"EMBEDDING\":\n      warnings.push({\n        code: \"openinference_kind_semantic_loss\",\n        message: \"OpenInference EMBEDDING span kind mapped to AgentInspect LLM.\",\n        severity: \"warning\",\n        field: `${pathPrefix}.attributes.openinference.span.kind`,\n      });\n      return { kind: \"LLM\", warnings };\n    case \"RERANKER\":\n      warnings.push({\n        code: \"openinference_kind_semantic_loss\",\n        message: \"OpenInference RERANKER span kind mapped to AgentInspect RETRIEVER.\",\n        severity: \"warning\",\n        field: `${pathPrefix}.attributes.openinference.span.kind`,\n      });\n      return { kind: \"RETRIEVER\", warnings };\n    case \"UNKNOWN\":\n    case undefined:\n      warnings.push({\n        code: \"openinference_kind_unknown\",\n        message: \"OpenInference span kind was missing or unknown; mapped to AgentInspect LOGIC.\",\n        severity: \"warning\",\n        field: `${pathPrefix}.attributes.openinference.span.kind`,\n      });\n      return { kind: \"LOGIC\", warnings };\n    default:\n      warnings.push({\n        code: \"openinference_kind_unsupported\",\n        message: `Unsupported OpenInference span kind \"${rawKind}\" mapped to AgentInspect LOGIC.`,\n        severity: \"warning\",\n        field: `${pathPrefix}.attributes.openinference.span.kind`,\n      });\n      return { kind: \"LOGIC\", warnings };\n  }\n}\n\nfunction mapOpenInferenceStatus(status: unknown): PersistedEventStatus | undefined {\n  if (!isRecord(status)) return undefined;\n  const rawCode = status.code;\n  if (typeof rawCode !== \"string\") return undefined;\n  switch (rawCode.toUpperCase()) {\n    case \"OK\":\n      return \"ok\";\n    case \"ERROR\":\n      return \"error\";\n    case \"UNSET\":\n      return \"unknown\";\n    default:\n      return \"unknown\";\n  }\n}\n\nfunction readOpenInferenceTokenUsage(\n  attributes: JsonRecord,\n): PersistedTokenUsage | undefined {\n  const prompt = attributes[\"llm.token_count.prompt\"];\n  const completion = attributes[\"llm.token_count.completion\"];\n  const total = attributes[\"llm.token_count.total\"];\n  const cached = attributes[\"llm.token_count.prompt_details.cache_read\"];\n  const cacheWrite =\n    attributes[\"llm.token_count.prompt_details.cache_write\"] ??\n    attributes[\"llm.token_count.prompt_details.cache_creation\"];\n  const reasoning =\n    attributes[\"llm.token_count.completion_details.reasoning\"] ??\n    attributes[\"llm.token_count.completion_details.reasoning_tokens\"];\n  const usage: PersistedTokenUsage = {};\n\n  if (typeof prompt === \"number\" && Number.isFinite(prompt) && prompt >= 0) {\n    usage.input = prompt;\n  }\n  if (\n    typeof completion === \"number\" &&\n    Number.isFinite(completion) &&\n    completion >= 0\n  ) {\n    usage.output = completion;\n  }\n  if (typeof total === \"number\" && Number.isFinite(total) && total >= 0) {\n    usage.total = total;\n  }\n  if (typeof cached === \"number\" && Number.isFinite(cached) && cached >= 0) {\n    usage.cached = cached;\n  }\n  if (\n    typeof cacheWrite === \"number\" &&\n    Number.isFinite(cacheWrite) &&\n    cacheWrite >= 0\n  ) {\n    usage.cacheWrite = cacheWrite;\n  }\n  if (\n    typeof reasoning === \"number\" &&\n    Number.isFinite(reasoning) &&\n    reasoning >= 0\n  ) {\n    usage.reasoning = reasoning;\n  }\n  if (usage.total === undefined && usage.input !== undefined && usage.output !== undefined) {\n    usage.total = usage.input + usage.output;\n  }\n\n  return Object.keys(usage).length > 0 ? usage : undefined;\n}\n\nfunction readOpenInferenceConfidence(\n  attributes: JsonRecord,\n): PersistedInspectEvent[\"confidence\"] {\n  const confidence = attributes[\"agent_inspect.confidence\"];\n  if (\n    confidence === \"explicit\" ||\n    confidence === \"correlated\" ||\n    confidence === \"heuristic\" ||\n    confidence === \"unknown\"\n  ) {\n    return confidence;\n  }\n  return \"correlated\";\n}\n\nfunction mapOpenInferenceSpan(\n  span: JsonRecord,\n  index: number,\n  version?: string,\n): OpenInferenceMappedSpan {\n  const pathPrefix = `spans[${index}]`;\n  const warnings: TraceReadWarning[] = [];\n  const unsupportedFields: string[] = [];\n  const rawAttributes = readRecordField(span, \"attributes\") ?? {};\n  const sanitized = sanitizeOpenInferenceAttributes(rawAttributes, pathPrefix);\n  warnings.push(...sanitized.warnings);\n  unsupportedFields.push(...sanitized.unsupportedFields);\n\n  const attributes: Record<string, unknown> = { ...sanitized.attributes };\n  for (const [key, value] of Object.entries(span)) {\n    if (OPENINFERENCE_SPAN_KEYS.has(key)) continue;\n    unsupportedFields.push(`${pathPrefix}.${key}`);\n    if (value === null || typeof value !== \"object\") {\n      attributes[`openinference.${key}`] = value;\n    } else {\n      attributes[`openinference.${key}.summary`] = summarizeAttributeValue(value);\n      warnings.push({\n        code: \"openinference_unsupported_field_summarized\",\n        message: `Unsupported OpenInference span field \"${key}\" was summarized.`,\n        severity: \"warning\",\n        field: `${pathPrefix}.${key}`,\n      });\n    }\n  }\n\n  const traceId = readStringField(span, [\"trace_id\", \"traceId\"]) ?? `trace-${index}`;\n  const spanId = readStringField(span, [\"span_id\", \"spanId\"]) ?? `span-${index}`;\n  const parentSpanId = readStringField(span, [\"parent_span_id\", \"parentSpanId\"]);\n  const name = readStringField(span, [\"name\"]) ?? spanId;\n  const startedAt = readOpenInferenceTimestamp(\n    span,\n    [\"start_time_unix_nano\", \"startTimeUnixNano\"],\n    [\"start_time\", \"startTime\"],\n  );\n  const endedAt = readOpenInferenceTimestamp(\n    span,\n    [\"end_time_unix_nano\", \"endTimeUnixNano\"],\n    [\"end_time\", \"endTime\"],\n  );\n  const timestamp = startedAt ?? \"1970-01-01T00:00:00.000Z\";\n\n  if (startedAt === undefined) {\n    warnings.push({\n      code: \"openinference_missing_start_time\",\n      message: \"OpenInference span is missing a valid start time; using Unix epoch.\",\n      severity: \"warning\",\n      field: `${pathPrefix}.start_time_unix_nano`,\n    });\n    unsupportedFields.push(`${pathPrefix}.start_time_unix_nano`);\n  }\n\n  const { kind, warnings: kindWarnings } = mapOpenInferenceKind(\n    span,\n    rawAttributes,\n    pathPrefix,\n  );\n  warnings.push(...kindWarnings);\n  const status = mapOpenInferenceStatus(span.status);\n  const tokenUsage = readOpenInferenceTokenUsage(rawAttributes);\n  const errorMessage =\n    isRecord(span.status) && typeof span.status.message === \"string\"\n      ? span.status.message\n      : undefined;\n\n  const event: PersistedInspectEvent = {\n    schemaVersion: \"0.2\",\n    eventId:\n      typeof rawAttributes[\"agent_inspect.event_id\"] === \"string\"\n        ? rawAttributes[\"agent_inspect.event_id\"]\n        : spanId,\n    runId:\n      typeof rawAttributes[\"agent_inspect.run_id\"] === \"string\"\n        ? rawAttributes[\"agent_inspect.run_id\"]\n        : traceId,\n    kind,\n    name,\n    timestamp,\n    confidence: readOpenInferenceConfidence(rawAttributes),\n    source: {\n      type: \"otel\",\n      name: \"openinference\",\n      ...(version !== undefined ? { version } : {}),\n    },\n    attributes,\n    trace: {\n      traceId,\n      spanId,\n      ...(parentSpanId !== undefined ? { parentSpanId } : {}),\n    },\n  };\n\n  if (status !== undefined) {\n    event.status = status;\n  }\n  if (startedAt !== undefined) {\n    event.startedAt = startedAt;\n  }\n  if (endedAt !== undefined) {\n    event.endedAt = endedAt;\n  }\n  const durationMs = durationBetweenIso(startedAt, endedAt);\n  if (durationMs !== undefined) {\n    event.durationMs = durationMs;\n  }\n  if (tokenUsage !== undefined) {\n    event.tokenUsage = tokenUsage;\n  }\n  if (status === \"error\") {\n    event.error = {\n      message: errorMessage !== undefined && errorMessage.trim() !== \"\" ? errorMessage : \"OpenInference span error\",\n    };\n  }\n\n  return {\n    event,\n    warnings,\n    unsupportedFields,\n    spanId,\n    ...(parentSpanId !== undefined ? { parentSpanId } : {}),\n  };\n}\n\nfunction mapOpenInferenceEvents(document: OpenInferenceDocument): {\n  events: PersistedInspectEvent[];\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n} {\n  const mapped = document.spans.map((span, index) =>\n    mapOpenInferenceSpan(span, index, document.version),\n  );\n  const spanIdToEventId = new Map(\n    mapped.map((span) => [span.spanId, span.event.eventId] as const),\n  );\n  for (const span of mapped) {\n    if (span.parentSpanId === undefined) continue;\n    span.event.parentId = spanIdToEventId.get(span.parentSpanId) ?? span.parentSpanId;\n  }\n\n  return {\n    events: mapped.map((span) => span.event),\n    warnings: mapped.flatMap((span) => span.warnings),\n    unsupportedFields: mapped.flatMap((span) => span.unsupportedFields),\n  };\n}\n\nexport const openInferenceJsonReader: TraceReader = {\n  format: OPENINFERENCE_READER_FORMAT,\n  name: \"OpenInference JSON\",\n  async detect(input) {\n    const resolved = await resolveInput(input);\n    if (!resolved) return undefined;\n\n    let parsed: unknown;\n    try {\n      parsed = parseJsonDocument(resolved.content);\n    } catch {\n      return undefined;\n    }\n\n    const document = extractOpenInferenceDocument(parsed);\n    if (!document) return undefined;\n\n    return {\n      format: OPENINFERENCE_READER_FORMAT,\n      confidence: document.confidence,\n      readerName: \"OpenInference JSON\",\n      description: document.description,\n      warnings: attachSingleSourceFile(document.warnings, resolved),\n    };\n  },\n  async read(input) {\n    const resolved = await resolveInput(input);\n    if (!resolved) {\n      throw new TraceReadError(\n        \"unsupported_format\",\n        \"OpenInference JSON reader requires file, string, or buffer input.\",\n      );\n    }\n\n    let parsed: unknown;\n    try {\n      parsed = parseJsonDocument(resolved.content);\n    } catch {\n      throw new TraceReadError(\"unsupported_format\", \"OpenInference JSON input is not valid JSON.\", [\n        {\n          code: \"openinference_invalid_json\",\n          message: \"OpenInference JSON reader could not parse the input as JSON.\",\n          severity: \"error\",\n        },\n      ]);\n    }\n\n    const document = extractOpenInferenceDocument(parsed);\n    if (!document || document.spans.length === 0) {\n      throw new TraceReadError(\n        \"unsupported_format\",\n        \"No valid OpenInference spans found.\",\n        attachSingleSourceFile(\n          document?.warnings ?? [\n            {\n              code: \"openinference_no_valid_spans\",\n              message: \"OpenInference JSON input did not contain valid spans.\",\n              severity: \"error\",\n            },\n          ],\n          resolved,\n        ),\n      );\n    }\n\n    const mapped = mapOpenInferenceEvents(document);\n    const warnings = attachSingleSourceFile(\n      [...document.warnings, ...mapped.warnings],\n      resolved,\n    );\n    const unsupportedFields = [\n      ...document.unsupportedFields,\n      ...mapped.unsupportedFields,\n    ].sort((a, b) => a.localeCompare(b));\n\n    return {\n      format: OPENINFERENCE_READER_FORMAT,\n      events: mapped.events,\n      runs: persistedInspectEventsToRunTrees(mapped.events, { skipInvalid: true }),\n      warnings,\n      unsupportedFields,\n      sourceFiles: resolved.sourceFiles,\n    };\n  },\n};\n\nfunction parseOtlpAnyValue(\n  value: unknown,\n  field: string,\n  warnings: TraceReadWarning[],\n  unsupportedFields: string[],\n): unknown {\n  if (!isRecord(value)) {\n    unsupportedFields.push(field);\n    warnings.push({\n      code: \"otlp_attribute_value_invalid\",\n      message: \"OTLP attribute value was not an AnyValue object.\",\n      severity: \"warning\",\n      field,\n    });\n    return undefined;\n  }\n  if (typeof value.stringValue === \"string\") return value.stringValue;\n  if (typeof value.boolValue === \"boolean\") return value.boolValue;\n  if (typeof value.intValue === \"number\" && Number.isFinite(value.intValue)) {\n    return value.intValue;\n  }\n  if (typeof value.intValue === \"string\" && value.intValue.trim() !== \"\") {\n    const n = Number(value.intValue);\n    if (Number.isFinite(n)) return n;\n  }\n  if (\n    typeof value.doubleValue === \"number\" &&\n    Number.isFinite(value.doubleValue)\n  ) {\n    return value.doubleValue;\n  }\n  if (isRecord(value.arrayValue) && Array.isArray(value.arrayValue.values)) {\n    return value.arrayValue.values.map((item, index) =>\n      parseOtlpAnyValue(item, `${field}.arrayValue.values[${index}]`, warnings, unsupportedFields),\n    );\n  }\n  if (isRecord(value.kvlistValue) && Array.isArray(value.kvlistValue.values)) {\n    const out: Record<string, unknown> = {};\n    for (const [index, item] of value.kvlistValue.values.entries()) {\n      if (!isRecord(item) || typeof item.key !== \"string\") {\n        unsupportedFields.push(`${field}.kvlistValue.values[${index}]`);\n        continue;\n      }\n      out[item.key] = parseOtlpAnyValue(\n        item.value,\n        `${field}.kvlistValue.values[${index}].value`,\n        warnings,\n        unsupportedFields,\n      );\n    }\n    return out;\n  }\n  if (typeof value.bytesValue === \"string\") {\n    unsupportedFields.push(field);\n    warnings.push({\n      code: \"otlp_bytes_value_summarized\",\n      message: \"OTLP bytesValue attribute was summarized instead of decoded.\",\n      severity: \"warning\",\n      field,\n    });\n    return { type: \"bytes\", length: value.bytesValue.length };\n  }\n\n  unsupportedFields.push(field);\n  warnings.push({\n    code: \"otlp_attribute_value_unsupported\",\n    message: \"OTLP attribute value used an unsupported AnyValue shape.\",\n    severity: \"warning\",\n    field,\n  });\n  return undefined;\n}\n\nfunction parseOtlpAttributes(\n  value: unknown,\n  pathPrefix: string,\n): {\n  attributes: Record<string, unknown>;\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n} {\n  const attributes: Record<string, unknown> = {};\n  const warnings: TraceReadWarning[] = [];\n  const unsupportedFields: string[] = [];\n\n  if (value === undefined) {\n    return { attributes, warnings, unsupportedFields };\n  }\n  if (!Array.isArray(value)) {\n    unsupportedFields.push(pathPrefix);\n    warnings.push({\n      code: \"otlp_attributes_invalid\",\n      message: \"OTLP attributes field was not an array.\",\n      severity: \"warning\",\n      field: pathPrefix,\n    });\n    return { attributes, warnings, unsupportedFields };\n  }\n\n  for (const [index, item] of value.entries()) {\n    const field = `${pathPrefix}[${index}]`;\n    if (!isRecord(item) || typeof item.key !== \"string\") {\n      unsupportedFields.push(field);\n      warnings.push({\n        code: \"otlp_attribute_invalid\",\n        message: \"Skipped OTLP attribute without a string key.\",\n        severity: \"warning\",\n        field,\n      });\n      continue;\n    }\n    const parsed = parseOtlpAnyValue(\n      item.value,\n      `${field}.value`,\n      warnings,\n      unsupportedFields,\n    );\n    if (parsed !== undefined) {\n      attributes[item.key] = parsed;\n    }\n  }\n\n  return { attributes, warnings, unsupportedFields };\n}\n\nfunction looksLikeOtlpSpan(value: unknown): value is JsonRecord {\n  return (\n    isRecord(value) &&\n    readStringField(value, [\"traceId\"]) !== undefined &&\n    readStringField(value, [\"spanId\"]) !== undefined &&\n    readStringField(value, [\"name\"]) !== undefined\n  );\n}\n\nfunction extractOtlpDocument(root: unknown): OtlpDocument | undefined {\n  if (!isRecord(root) || !Array.isArray(root.resourceSpans)) return undefined;\n\n  const spans: OtlpSpanContext[] = [];\n  const warnings: TraceReadWarning[] = [];\n  const unsupportedFields: string[] = [];\n\n  for (const [resourceIndex, resourceSpan] of root.resourceSpans.entries()) {\n    const resourcePath = `resourceSpans[${resourceIndex}]`;\n    if (!isRecord(resourceSpan)) {\n      unsupportedFields.push(resourcePath);\n      continue;\n    }\n\n    const resource = readRecordField(resourceSpan, \"resource\");\n    const resourceParsed = parseOtlpAttributes(\n      resource?.attributes,\n      `${resourcePath}.resource.attributes`,\n    );\n    warnings.push(...resourceParsed.warnings);\n    unsupportedFields.push(...resourceParsed.unsupportedFields);\n\n    if (!Array.isArray(resourceSpan.scopeSpans)) {\n      unsupportedFields.push(`${resourcePath}.scopeSpans`);\n      warnings.push({\n        code: \"otlp_scope_spans_missing\",\n        message: \"OTLP resourceSpans entry did not contain a scopeSpans array.\",\n        severity: \"warning\",\n        field: `${resourcePath}.scopeSpans`,\n      });\n      continue;\n    }\n\n    for (const [scopeIndex, scopeSpan] of resourceSpan.scopeSpans.entries()) {\n      const scopePath = `${resourcePath}.scopeSpans[${scopeIndex}]`;\n      if (!isRecord(scopeSpan)) {\n        unsupportedFields.push(scopePath);\n        continue;\n      }\n      const scope = readRecordField(scopeSpan, \"scope\");\n      const scopeParsed = parseOtlpAttributes(\n        scope?.attributes,\n        `${scopePath}.scope.attributes`,\n      );\n      warnings.push(...scopeParsed.warnings);\n      unsupportedFields.push(...scopeParsed.unsupportedFields);\n      if (!Array.isArray(scopeSpan.spans)) {\n        unsupportedFields.push(`${scopePath}.spans`);\n        warnings.push({\n          code: \"otlp_spans_missing\",\n          message: \"OTLP scopeSpans entry did not contain a spans array.\",\n          severity: \"warning\",\n          field: `${scopePath}.spans`,\n        });\n        continue;\n      }\n\n      for (const [spanIndex, span] of scopeSpan.spans.entries()) {\n        const spanPath = `${scopePath}.spans[${spanIndex}]`;\n        if (!looksLikeOtlpSpan(span)) {\n          unsupportedFields.push(spanPath);\n          warnings.push({\n            code: \"otlp_invalid_span\",\n            message: \"Skipped OTLP span without required traceId, spanId, or name.\",\n            severity: \"warning\",\n            field: spanPath,\n          });\n          continue;\n        }\n        spans.push({\n          span,\n          resourceAttributes: resourceParsed.attributes,\n          scopeAttributes: scopeParsed.attributes,\n          scopeName: readStringField(scope ?? {}, [\"name\"]),\n          scopeVersion: readStringField(scope ?? {}, [\"version\"]),\n          pathPrefix: spanPath,\n        });\n      }\n    }\n  }\n\n  if (spans.length === 0) {\n    warnings.push({\n      code: \"otlp_no_valid_spans\",\n      message: \"OTLP JSON payload did not contain any valid spans.\",\n      severity: \"error\",\n    });\n    return {\n      spans,\n      confidence: 0.7,\n      description: \"Malformed OTLP JSON trace payload\",\n      warnings,\n      unsupportedFields,\n    };\n  }\n\n  return {\n    spans,\n    confidence: 0.93,\n    description: \"OTLP JSON trace payload\",\n    warnings,\n    unsupportedFields,\n  };\n}\n\nfunction mapOtlpStatus(status: unknown): PersistedEventStatus | undefined {\n  if (!isRecord(status)) return undefined;\n  const rawCode = status.code;\n\n  if (typeof rawCode === \"number\" && Number.isFinite(rawCode)) {\n    switch (rawCode) {\n      case 0:\n        return \"unknown\";\n      case 1:\n        return \"ok\";\n      case 2:\n        return \"error\";\n      default:\n        return \"unknown\";\n    }\n  }\n\n  if (typeof rawCode === \"string\") {\n    const trimmed = rawCode.trim();\n    if (/^\\d+$/.test(trimmed)) {\n      return mapOtlpStatus({ code: Number(trimmed) });\n    }\n    switch (trimmed.toUpperCase()) {\n      case \"STATUS_CODE_OK\":\n      case \"OK\":\n        return \"ok\";\n      case \"STATUS_CODE_ERROR\":\n      case \"ERROR\":\n        return \"error\";\n      case \"STATUS_CODE_UNSET\":\n      case \"UNSET\":\n        return \"unknown\";\n      default:\n        return \"unknown\";\n    }\n  }\n\n  return undefined;\n}\n\nfunction readOtlpKind(\n  attributes: JsonRecord,\n  pathPrefix: string,\n): { kind: PersistedInspectEvent[\"kind\"]; warnings: TraceReadWarning[] } {\n  const warnings: TraceReadWarning[] = [];\n  const agentInspectKind = attributes[\"agent_inspect.kind\"];\n  if (\n    agentInspectKind === \"RUN\" ||\n    agentInspectKind === \"AGENT\" ||\n    agentInspectKind === \"LLM\" ||\n    agentInspectKind === \"TOOL\" ||\n    agentInspectKind === \"CHAIN\" ||\n    agentInspectKind === \"RETRIEVER\" ||\n    agentInspectKind === \"DECISION\" ||\n    agentInspectKind === \"RESULT\" ||\n    agentInspectKind === \"ERROR\" ||\n    agentInspectKind === \"LOGIC\" ||\n    agentInspectKind === \"LOG\" ||\n    agentInspectKind === \"OUTCOME\"\n  ) {\n    return { kind: agentInspectKind, warnings };\n  }\n\n  const operation = attributes[\"gen_ai.operation.name\"];\n  if (typeof operation === \"string\") {\n    switch (operation) {\n      case \"generate_content\":\n      case \"chat\":\n        return { kind: \"LLM\", warnings };\n      case \"execute_tool\":\n        return { kind: \"TOOL\", warnings };\n      case \"invoke_agent\":\n        return { kind: \"AGENT\", warnings };\n      default:\n        warnings.push({\n          code: \"otlp_gen_ai_operation_semantic_loss\",\n          message: `OTLP GenAI operation \"${operation}\" mapped to AgentInspect LOGIC.`,\n          severity: \"warning\",\n          field: `${pathPrefix}.attributes.gen_ai.operation.name`,\n        });\n        return { kind: \"LOGIC\", warnings };\n    }\n  }\n\n  warnings.push({\n    code: \"otlp_kind_unknown\",\n    message: \"OTLP span had no AgentInspect kind or GenAI operation; mapped to LOGIC.\",\n    severity: \"warning\",\n    field: `${pathPrefix}.attributes`,\n  });\n  return { kind: \"LOGIC\", warnings };\n}\n\nfunction readOtlpTokenUsage(attributes: JsonRecord): PersistedTokenUsage | undefined {\n  const input = attributes[\"gen_ai.usage.input_tokens\"];\n  const output = attributes[\"gen_ai.usage.output_tokens\"];\n  const usage: PersistedTokenUsage = {};\n  if (typeof input === \"number\" && Number.isFinite(input) && input >= 0) {\n    usage.input = input;\n  }\n  if (typeof output === \"number\" && Number.isFinite(output) && output >= 0) {\n    usage.output = output;\n  }\n  if (usage.input !== undefined && usage.output !== undefined) {\n    usage.total = usage.input + usage.output;\n  }\n  return Object.keys(usage).length > 0 ? usage : undefined;\n}\n\nfunction readOtlpConfidence(\n  attributes: JsonRecord,\n): PersistedInspectEvent[\"confidence\"] {\n  return readOpenInferenceConfidence(attributes);\n}\n\nfunction sanitizeOtlpAttributes(\n  attributes: JsonRecord,\n  pathPrefix: string,\n): {\n  attributes: Record<string, unknown>;\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n} {\n  const ownerPath = pathPrefix.endsWith(\".attributes\")\n    ? pathPrefix.slice(0, -\".attributes\".length)\n    : pathPrefix;\n  const sanitized = sanitizeOpenInferenceAttributes(attributes, ownerPath);\n  return {\n    ...sanitized,\n    warnings: sanitized.warnings.map((warning) =>\n      warning.code === \"openinference_sensitive_attribute_summarized\"\n        ? {\n            ...warning,\n            code: \"otlp_sensitive_attribute_summarized\",\n            message:\n              \"OTLP prompt/output/document attribute(s) were summarized instead of copied verbatim.\",\n          }\n        : warning,\n    ),\n  };\n}\n\nfunction mapOtlpEvents(\n  value: unknown,\n  pathPrefix: string,\n): {\n  events?: Record<string, unknown>[];\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n} {\n  const warnings: TraceReadWarning[] = [];\n  const unsupportedFields: string[] = [];\n  if (value === undefined) return { warnings, unsupportedFields };\n  if (!Array.isArray(value)) {\n    unsupportedFields.push(pathPrefix);\n    warnings.push({\n      code: \"otlp_events_invalid\",\n      message: \"OTLP events field was not an array.\",\n      severity: \"warning\",\n      field: pathPrefix,\n    });\n    return { warnings, unsupportedFields };\n  }\n\n  const events: Record<string, unknown>[] = [];\n  for (const [index, event] of value.entries()) {\n    const eventPath = `${pathPrefix}[${index}]`;\n    if (!isRecord(event)) {\n      unsupportedFields.push(eventPath);\n      continue;\n    }\n    const parsedAttributes = parseOtlpAttributes(\n      event.attributes,\n      `${eventPath}.attributes`,\n    );\n    warnings.push(...parsedAttributes.warnings);\n    unsupportedFields.push(...parsedAttributes.unsupportedFields);\n    const sanitized = sanitizeOtlpAttributes(\n      parsedAttributes.attributes,\n      `${eventPath}.attributes`,\n    );\n    warnings.push(...sanitized.warnings);\n    unsupportedFields.push(...sanitized.unsupportedFields);\n\n    const out: Record<string, unknown> = {};\n    const name = readStringField(event, [\"name\"]);\n    if (name !== undefined) {\n      out.name = name;\n    }\n    const timestamp = parseUnixNanoToIso(event.timeUnixNano);\n    if (timestamp !== undefined) {\n      out.timestamp = timestamp;\n    } else if (event.timeUnixNano !== undefined) {\n      unsupportedFields.push(`${eventPath}.timeUnixNano`);\n      warnings.push({\n        code: \"otlp_event_timestamp_invalid\",\n        message: \"OTLP event timeUnixNano could not be parsed.\",\n        severity: \"warning\",\n        field: `${eventPath}.timeUnixNano`,\n      });\n    }\n    if (Object.keys(sanitized.attributes).length > 0) {\n      out.attributes = sanitized.attributes;\n    }\n    events.push(out);\n  }\n\n  return {\n    events: events.length > 0 ? events : undefined,\n    warnings,\n    unsupportedFields,\n  };\n}\n\nfunction mapOtlpSpan(context: OtlpSpanContext): OpenInferenceMappedSpan {\n  const { span, pathPrefix } = context;\n  const warnings: TraceReadWarning[] = [];\n  const unsupportedFields: string[] = [];\n  const parsedSpanAttributes = parseOtlpAttributes(\n    span.attributes,\n    `${pathPrefix}.attributes`,\n  );\n  warnings.push(...parsedSpanAttributes.warnings);\n  unsupportedFields.push(...parsedSpanAttributes.unsupportedFields);\n\n  const sanitizedSpanAttributes = sanitizeOtlpAttributes(\n    parsedSpanAttributes.attributes,\n    `${pathPrefix}.attributes`,\n  );\n  warnings.push(...sanitizedSpanAttributes.warnings);\n  unsupportedFields.push(...sanitizedSpanAttributes.unsupportedFields);\n\n  const attributes: Record<string, unknown> = {\n    ...sanitizedSpanAttributes.attributes,\n  };\n  for (const [key, value] of Object.entries(context.resourceAttributes)) {\n    attributes[`resource.${key}`] = value;\n  }\n  for (const [key, value] of Object.entries(context.scopeAttributes)) {\n    attributes[`scope.${key}`] = value;\n  }\n  if (context.scopeName !== undefined) {\n    attributes[\"scope.name\"] = context.scopeName;\n  }\n  if (context.scopeVersion !== undefined) {\n    attributes[\"scope.version\"] = context.scopeVersion;\n  }\n\n  for (const [key, value] of Object.entries(span)) {\n    if (OTLP_SPAN_KEYS.has(key)) continue;\n    unsupportedFields.push(`${pathPrefix}.${key}`);\n    if (value === null || typeof value !== \"object\") {\n      attributes[`otlp.${key}`] = value;\n    } else {\n      attributes[`otlp.${key}.summary`] = summarizeAttributeValue(value);\n      warnings.push({\n        code: \"otlp_unsupported_field_summarized\",\n        message: `Unsupported OTLP span field \"${key}\" was summarized.`,\n        severity: \"warning\",\n        field: `${pathPrefix}.${key}`,\n      });\n    }\n  }\n\n  for (const key of [\n    \"droppedAttributesCount\",\n    \"droppedEventsCount\",\n    \"droppedLinksCount\",\n    \"links\",\n  ]) {\n    if (span[key] !== undefined) {\n      unsupportedFields.push(`${pathPrefix}.${key}`);\n      warnings.push({\n        code: \"otlp_span_field_not_mapped\",\n        message: `OTLP span field \"${key}\" is not represented in AgentInspect events.`,\n        severity: \"warning\",\n        field: `${pathPrefix}.${key}`,\n      });\n    }\n  }\n\n  const events = mapOtlpEvents(span.events, `${pathPrefix}.events`);\n  warnings.push(...events.warnings);\n  unsupportedFields.push(...events.unsupportedFields);\n  if (events.events !== undefined) {\n    attributes[\"otlp.events\"] = events.events;\n  }\n\n  const traceId = readStringField(span, [\"traceId\"]) ?? \"trace-unknown\";\n  const spanId = readStringField(span, [\"spanId\"]) ?? \"span-unknown\";\n  const parentSpanId = readStringField(span, [\"parentSpanId\"]);\n  const startedAt = readOpenInferenceTimestamp(\n    span,\n    [\"startTimeUnixNano\"],\n    [],\n  );\n  const endedAt = readOpenInferenceTimestamp(span, [\"endTimeUnixNano\"], []);\n  const timestamp = startedAt ?? \"1970-01-01T00:00:00.000Z\";\n  if (startedAt === undefined) {\n    unsupportedFields.push(`${pathPrefix}.startTimeUnixNano`);\n    warnings.push({\n      code: \"otlp_missing_start_time\",\n      message: \"OTLP span is missing a valid startTimeUnixNano; using Unix epoch.\",\n      severity: \"warning\",\n      field: `${pathPrefix}.startTimeUnixNano`,\n    });\n  }\n\n  const { kind, warnings: kindWarnings } = readOtlpKind(\n    parsedSpanAttributes.attributes,\n    pathPrefix,\n  );\n  warnings.push(...kindWarnings);\n  const status = mapOtlpStatus(span.status);\n  const tokenUsage = readOtlpTokenUsage(parsedSpanAttributes.attributes);\n  const errorMessage =\n    isRecord(span.status) && typeof span.status.message === \"string\"\n      ? span.status.message\n      : undefined;\n\n  const event: PersistedInspectEvent = {\n    schemaVersion: \"0.2\",\n    eventId:\n      typeof parsedSpanAttributes.attributes[\"agent_inspect.event_id\"] === \"string\"\n        ? parsedSpanAttributes.attributes[\"agent_inspect.event_id\"]\n        : spanId,\n    runId:\n      typeof parsedSpanAttributes.attributes[\"agent_inspect.run_id\"] === \"string\"\n        ? parsedSpanAttributes.attributes[\"agent_inspect.run_id\"]\n        : traceId,\n    kind,\n    name: readStringField(span, [\"name\"]) ?? spanId,\n    timestamp,\n    confidence: readOtlpConfidence(parsedSpanAttributes.attributes),\n    source: {\n      type: \"otel\",\n      name:\n        context.scopeName ??\n        (typeof context.resourceAttributes[\"service.name\"] === \"string\"\n          ? context.resourceAttributes[\"service.name\"]\n          : \"otlp-json\"),\n      ...(context.scopeVersion !== undefined\n        ? { version: context.scopeVersion }\n        : {}),\n    },\n    attributes,\n    trace: {\n      traceId,\n      spanId,\n      ...(parentSpanId !== undefined ? { parentSpanId } : {}),\n    },\n  };\n\n  if (status !== undefined) {\n    event.status = status;\n  }\n  if (startedAt !== undefined) {\n    event.startedAt = startedAt;\n  }\n  if (endedAt !== undefined) {\n    event.endedAt = endedAt;\n  }\n  const durationMs = durationBetweenIso(startedAt, endedAt);\n  if (durationMs !== undefined) {\n    event.durationMs = durationMs;\n  }\n  if (tokenUsage !== undefined) {\n    event.tokenUsage = tokenUsage;\n  }\n  if (status === \"error\") {\n    event.error = {\n      message: errorMessage !== undefined && errorMessage.trim() !== \"\" ? errorMessage : \"OTLP span error\",\n    };\n  }\n\n  return {\n    event,\n    warnings,\n    unsupportedFields,\n    spanId,\n    ...(parentSpanId !== undefined ? { parentSpanId } : {}),\n  };\n}\n\nfunction mapOtlpEventsToPersisted(document: OtlpDocument): {\n  events: PersistedInspectEvent[];\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n} {\n  const mapped = document.spans.map((span) => mapOtlpSpan(span));\n  const spanIdToEventId = new Map(\n    mapped.map((span) => [span.spanId, span.event.eventId] as const),\n  );\n  for (const span of mapped) {\n    if (span.parentSpanId === undefined) continue;\n    span.event.parentId = spanIdToEventId.get(span.parentSpanId) ?? span.parentSpanId;\n  }\n  return {\n    events: mapped.map((span) => span.event),\n    warnings: mapped.flatMap((span) => span.warnings),\n    unsupportedFields: mapped.flatMap((span) => span.unsupportedFields),\n  };\n}\n\nexport const otlpJsonReader: TraceReader = {\n  format: OTLP_READER_FORMAT,\n  name: \"OTLP JSON\",\n  async detect(input) {\n    const resolved = await resolveInput(input);\n    if (!resolved) return undefined;\n\n    let parsed: unknown;\n    try {\n      parsed = parseJsonDocument(resolved.content);\n    } catch {\n      return undefined;\n    }\n\n    const document = extractOtlpDocument(parsed);\n    if (!document) return undefined;\n\n    return {\n      format: OTLP_READER_FORMAT,\n      confidence: document.confidence,\n      readerName: \"OTLP JSON\",\n      description: document.description,\n      warnings: attachSingleSourceFile(document.warnings, resolved),\n    };\n  },\n  async read(input) {\n    const resolved = await resolveInput(input);\n    if (!resolved) {\n      throw new TraceReadError(\n        \"unsupported_format\",\n        \"OTLP JSON reader requires file, string, or buffer input.\",\n      );\n    }\n\n    let parsed: unknown;\n    try {\n      parsed = parseJsonDocument(resolved.content);\n    } catch {\n      throw new TraceReadError(\"unsupported_format\", \"OTLP JSON input is not valid JSON.\", [\n        {\n          code: \"otlp_invalid_json\",\n          message: \"OTLP JSON reader could not parse the input as JSON.\",\n          severity: \"error\",\n        },\n      ]);\n    }\n\n    const document = extractOtlpDocument(parsed);\n    if (!document || document.spans.length === 0) {\n      throw new TraceReadError(\n        \"unsupported_format\",\n        \"No valid OTLP spans found.\",\n        attachSingleSourceFile(\n          document?.warnings ?? [\n            {\n              code: \"otlp_no_valid_spans\",\n              message: \"OTLP JSON input did not contain valid spans.\",\n              severity: \"error\",\n            },\n          ],\n          resolved,\n        ),\n      );\n    }\n\n    const mapped = mapOtlpEventsToPersisted(document);\n    const warnings = attachSingleSourceFile(\n      [...document.warnings, ...mapped.warnings],\n      resolved,\n    );\n    const unsupportedFields = [\n      ...document.unsupportedFields,\n      ...mapped.unsupportedFields,\n    ].sort((a, b) => a.localeCompare(b));\n\n    return {\n      format: OTLP_READER_FORMAT,\n      events: mapped.events,\n      runs: persistedInspectEventsToRunTrees(mapped.events, { skipInvalid: true }),\n      warnings,\n      unsupportedFields,\n      sourceFiles: resolved.sourceFiles,\n    };\n  },\n};\n\nexport const agentInspectJsonlReader: TraceReader = {\n  format: \"agent-inspect-jsonl\",\n  name: \"AgentInspect JSONL\",\n  async detect(input) {\n    const resolved = await resolveInput(input);\n    if (!resolved) return undefined;\n    const detected = detectJsonlFormat(resolved.content);\n    if (detected.validRows === 0 || detected.format === \"empty\") {\n      return undefined;\n    }\n\n    return {\n      format: \"agent-inspect-jsonl\",\n      confidence: 0.95,\n      readerName: \"AgentInspect JSONL\",\n      description: agentInspectFormatLabel(detected.format),\n      warnings: attachSingleSourceFile(detected.warnings, resolved),\n    };\n  },\n  async read(input) {\n    const resolved = await resolveInput(input);\n    if (!resolved) {\n      throw new Error(\"AgentInspect JSONL reader requires file, directory, string, or buffer input.\");\n    }\n\n    const parsed = parseTraceJsonl(resolved.content, { warnings: false });\n    if (parsed.sourceEventCount === 0) {\n      throw new Error(\"No valid AgentInspect JSONL events found.\");\n    }\n\n    const events = persistedEventsForParsedTrace(parsed);\n    return {\n      format: agentInspectFormatLabel(parsed.format),\n      events,\n      runs: persistedInspectEventsToRunTrees(events, { skipInvalid: true }),\n      warnings:\n        parsed.format === \"mixed\"\n          ? attachSingleSourceFile(\n              [\n                {\n                  code: \"mixed_agent_inspect_jsonl\",\n                  message:\n                    \"Trace input mixes schemaVersion 0.1 and 0.2 rows; events were normalized for reading.\",\n                  severity: \"warning\",\n                },\n              ],\n              resolved,\n            )\n          : [],\n      unsupportedFields: [],\n      sourceFiles: resolved.sourceFiles,\n    };\n  },\n};\n\nexport const DEFAULT_TRACE_READERS: readonly TraceReader[] = [\n  agentInspectJsonlReader,\n  openInferenceJsonReader,\n  otlpJsonReader,\n];\n\nexport type {\n  MappingConfidence,\n  MappingLedger,\n  MappingLedgerEntry,\n  MappingLossKind,\n} from \"./mapping-ledger.js\";\nexport {\n  BUILTIN_MAPPING_LEDGERS,\n  OPENINFERENCE_MAPPING_LEDGER,\n  OTLP_JSON_MAPPING_LEDGER,\n  getMappingLedger,\n} from \"./mapping-ledger.js\";\n\nexport async function detectTraceFormat(\n  input: TraceInput,\n  options: TraceReadOptions = {},\n): Promise<TraceFormatDetectionResult> {\n  assertTraceInput(input);\n  const readers = options.readers ?? DEFAULT_TRACE_READERS;\n\n  if (options.format !== undefined) {\n    const reader = findReaderByFormat(options.format, readers);\n    if (!reader) {\n      return {\n        status: \"unsupported\",\n        candidates: [],\n        warnings: [\n          {\n            code: \"unsupported_format\",\n            message: `No trace reader is registered for format \"${options.format}\".`,\n            severity: \"error\",\n          },\n        ],\n      };\n    }\n\n    return {\n      status: \"detected\",\n      format: reader.format,\n      candidates: [\n        {\n          format: reader.format,\n          confidence: 1,\n          readerName: reader.name,\n          description: \"Explicit format override\",\n        },\n      ],\n      warnings: [],\n    };\n  }\n\n  const candidates: TraceFormatCandidate[] = [];\n  const warnings: TraceReadWarning[] = [];\n\n  for (const reader of readers) {\n    try {\n      const candidate = await reader.detect(input);\n      if (candidate !== undefined) {\n        candidates.push(normalizeCandidate(reader, candidate));\n      }\n    } catch (error) {\n      if (error instanceof TraceReadError) {\n        warnings.push(...error.warnings);\n        continue;\n      }\n      warnings.push({\n        code: \"reader_detect_failed\",\n        message:\n          error instanceof Error && error.message.trim() !== \"\"\n            ? error.message\n            : `Trace reader \"${reader.format}\" failed during detection.`,\n        severity: \"warning\",\n      });\n    }\n  }\n\n  const sorted = sortCandidates(\n    candidates.filter((candidate) => candidate.confidence >= MIN_DETECTION_CONFIDENCE),\n  );\n  const candidateWarnings = collectWarnings(sorted);\n  const lowConfidenceWarnings: TraceReadWarning[] =\n    candidates.length > sorted.length\n      ? [\n          {\n            code: \"low_confidence_candidates\",\n            message: `Ignored ${candidates.length - sorted.length} low-confidence format candidate(s).`,\n            severity: \"info\",\n          },\n        ]\n      : [];\n  const allWarnings = dedupeWarnings([\n    ...warnings,\n    ...candidateWarnings,\n    ...lowConfidenceWarnings,\n  ]);\n\n  if (sorted.length === 0) {\n    return {\n      status: \"unsupported\",\n      candidates: [],\n      warnings: allWarnings,\n    };\n  }\n\n  const [best, second] = sorted;\n  if (\n    second !== undefined &&\n    best.confidence - second.confidence <= AMBIGUOUS_CONFIDENCE_DELTA\n  ) {\n    return {\n      status: \"ambiguous\",\n      candidates: sorted,\n      warnings: [\n        ...allWarnings,\n        {\n          code: \"ambiguous_format_candidates\",\n          message: `Top trace format candidates are within ${AMBIGUOUS_CONFIDENCE_DELTA} confidence.`,\n          severity: \"warning\",\n        },\n      ],\n    };\n  }\n\n  return {\n    status: \"detected\",\n    format: best.format,\n    candidates: sorted,\n    warnings: allWarnings,\n  };\n}\n\nexport async function readTrace(\n  input: TraceInput,\n  options: TraceReadOptions = {},\n): Promise<TraceReadResult> {\n  assertTraceInput(input);\n  const readers = options.readers ?? DEFAULT_TRACE_READERS;\n  const detection = await detectTraceFormat(input, options);\n\n  if (detection.status === \"unsupported\" || detection.format === undefined) {\n    throw new TraceReadError(\n      \"unsupported_format\",\n      formatProgrammaticDiagnostic(\"AI_TRACE_FORMAT_UNSUPPORTED\"),\n      detection.warnings,\n    );\n  }\n  if (detection.status === \"ambiguous\") {\n    throw new TraceReadError(\n      \"ambiguous_format\",\n      formatProgrammaticDiagnostic(\"AI_TRACE_FORMAT_AMBIGUOUS\"),\n      detection.warnings,\n    );\n  }\n\n  const reader = findReaderByFormat(detection.format, readers);\n  if (!reader) {\n    throw new TraceReadError(\n      \"unsupported_format\",\n      formatProgrammaticDiagnostic(\n        \"AI_TRACE_FORMAT_UNSUPPORTED\",\n        `No trace reader is registered for format \"${detection.format}\".`,\n      ),\n      detection.warnings,\n    );\n  }\n\n  try {\n    const result = await reader.read(input, { format: detection.format });\n    return {\n      ...result,\n      format: result.format || detection.format,\n      warnings: [...detection.warnings, ...result.warnings],\n    };\n  } catch (error) {\n    if (error instanceof TraceReadError) {\n      throw new TraceReadError(\n        error.code,\n        error.message,\n        dedupeWarnings([...detection.warnings, ...error.warnings]),\n      );\n    }\n    throw new TraceReadError(\n      \"reader_failed\",\n      error instanceof Error && error.message.trim() !== \"\"\n        ? error.message\n        : `Trace reader \"${reader.format}\" failed.`,\n      detection.warnings,\n    );\n  }\n}\n\nexport function openTrace(\n  input: TraceInput,\n  options: TraceReadOptions = {},\n): Promise<TraceReadResult> {\n  return readTrace(input, options);\n}\n\n/**\n * Open a single local trace file. Prefer this over passing a bare path string to `openTrace`.\n *\n * @experimental Additive convenience over `openTrace({ type: \"file\", path })`.\n */\nexport function openTraceFile(\n  filePath: string,\n  options: TraceReadOptions = {},\n): Promise<TraceReadResult> {\n  return openTrace({ type: \"file\", path: filePath }, options);\n}\n\n/**\n * Open all `*.jsonl` files in a local directory (sorted, concatenated).\n *\n * @experimental Additive convenience over `openTrace({ type: \"directory\", path })`.\n */\nexport function openTraceDirectory(\n  dirPath: string,\n  options: TraceReadOptions = {},\n): Promise<TraceReadResult> {\n  return openTrace({ type: \"directory\", path: dirPath }, options);\n}\n\n/**\n * Open an in-memory JSONL / supported text payload.\n *\n * @experimental Additive convenience over `openTrace({ type: \"string\", content })`.\n */\nexport function openTraceText(\n  content: string,\n  options: TraceReadOptions = {},\n): Promise<TraceReadResult> {\n  return openTrace({ type: \"string\", content }, options);\n}\n","import path from \"node:path\";\n\nimport {\n  createLlmUsageRule,\n  createObservedOutcomeRule,\n  createRunDurationRule,\n  createRunStatusRule,\n  createToolUsageRule,\n  runTraceChecks,\n  type TraceCheckRule,\n} from \"../checks/index.js\";\nimport { extractOutcomesFromPersistedEvents, extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { openTrace, type TraceReadResult } from \"../readers/index.js\";\nimport type { TraceEvent } from \"../types.js\";\nimport { loadSuiteConfig } from \"./load.js\";\nimport { resolveSuiteCaseTrace } from \"./resolve.js\";\nimport type {\n  RunSuiteOptions,\n  SuiteCaseConfig,\n  SuiteCaseResult,\n  SuiteConfig,\n  SuiteDiagnostic,\n  SuiteRunResult,\n} from \"./types.js\";\n\nfunction diagnostic(\n  code: SuiteDiagnostic[\"code\"],\n  message: string,\n  severity: SuiteDiagnostic[\"severity\"] = \"error\",\n  caseId?: string,\n): SuiteDiagnostic {\n  return { code, message, severity, ...(caseId !== undefined ? { caseId } : {}) };\n}\n\nfunction buildCaseRules(\n  suiteCase: SuiteCaseConfig,\n  config: SuiteConfig,\n): { rules: TraceCheckRule[]; select: string[] } {\n  const rules: TraceCheckRule[] = [];\n  const select = new Set<string>(config.checks?.select ?? []);\n\n  if (select.has(\"run.status\")) {\n    rules.push(createRunStatusRule());\n  }\n\n  const requiredTools = [\n    ...(config.checks?.tool?.required ?? []),\n    ...(suiteCase.requireTools ?? []),\n  ];\n  const forbiddenTools = [\n    ...(config.checks?.tool?.forbidden ?? []),\n    ...(suiteCase.forbidTools ?? []),\n  ];\n  if (requiredTools.length > 0 || forbiddenTools.length > 0) {\n    rules.push(\n      createToolUsageRule({\n        required: requiredTools.length > 0 ? requiredTools : undefined,\n        forbidden: forbiddenTools.length > 0 ? forbiddenTools : undefined,\n      }),\n    );\n    select.add(\"tool.usage\");\n  }\n\n  const maxDurationMs =\n    suiteCase.maxDurationMs ??\n    config.checks?.run?.maxDurationMs ??\n    config.eval?.maxDurationMs;\n  if (maxDurationMs !== undefined) {\n    rules.push(createRunDurationRule({ maxDurationMs }));\n    select.add(\"run.duration\");\n  }\n\n  const llm = config.checks?.llm;\n  if (llm?.allowedModels !== undefined || llm?.maxTotalTokens !== undefined) {\n    rules.push(createLlmUsageRule(llm));\n    select.add(\"llm.usage\");\n  }\n\n  if (select.has(\"outcome.status\")) {\n    rules.push(createObservedOutcomeRule({ failOn: [\"failed\"] }));\n  }\n\n  return { rules, select: [...select] };\n}\n\nfunction outcomesFromRead(read: TraceReadResult) {\n  const persistedOutcomes = extractOutcomesFromPersistedEvents(\n    read.events.filter((event) => event.kind === \"OUTCOME\"),\n  );\n  if (persistedOutcomes.length > 0) return persistedOutcomes;\n\n  const traceEvents: TraceEvent[] = [];\n  for (const event of read.events) {\n    const legacy = event as unknown as TraceEvent;\n    if (\n      typeof legacy === \"object\" &&\n      legacy !== null &&\n      \"event\" in legacy &&\n      legacy.event === \"outcome_observed\"\n    ) {\n      traceEvents.push(legacy);\n    }\n  }\n  return traceEvents.length > 0 ? extractOutcomesFromTraceEvents(traceEvents) : [];\n}\n\nfunction validateExpectedObservations(\n  suiteCase: SuiteCaseConfig,\n  read: TraceReadResult,\n): { ok: boolean; diagnostics: SuiteDiagnostic[] } {\n  const expected = suiteCase.expectedObservations ?? [];\n  if (expected.length === 0) return { ok: true, diagnostics: [] };\n\n  const outcomes = outcomesFromRead(read);\n\n  const diagnostics: SuiteDiagnostic[] = [];\n  for (const name of expected) {\n    const match = outcomes.find((outcome) => outcome.name === name);\n    if (!match) {\n      diagnostics.push(\n        diagnostic(\n          \"AI_SUITE_CASE_OBSERVATION_FAILED\",\n          `Expected observation \"${name}\" was not recorded.`,\n          \"error\",\n          suiteCase.id,\n        ),\n      );\n      continue;\n    }\n    if (match.status !== \"passed\") {\n      diagnostics.push(\n        diagnostic(\n          \"AI_SUITE_CASE_OBSERVATION_FAILED\",\n          `Observation \"${name}\" has status \"${match.status}\", expected \"passed\".`,\n          \"error\",\n          suiteCase.id,\n        ),\n      );\n    }\n  }\n\n  return { ok: diagnostics.length === 0, diagnostics };\n}\n\nasync function runSuiteCase(\n  suiteCase: SuiteCaseConfig,\n  config: SuiteConfig,\n  options: { configDir: string; tracesDir: string },\n): Promise<SuiteCaseResult> {\n  const resolved = await resolveSuiteCaseTrace(suiteCase, options);\n  if (resolved.missing || resolved.tracePath === undefined) {\n    return {\n      id: suiteCase.id,\n      status: \"skipped\",\n      ...(resolved.runId !== undefined ? { runId: resolved.runId } : {}),\n      message: resolved.reason,\n      diagnostics: [\n        diagnostic(\n          \"AI_SUITE_CASE_TRACE_MISSING\",\n          resolved.reason ?? \"Trace not found.\",\n          \"warning\",\n          suiteCase.id,\n        ),\n      ],\n    };\n  }\n\n  let read: TraceReadResult;\n  try {\n    read = await openTrace({ type: \"file\", path: resolved.tracePath });\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return {\n      id: suiteCase.id,\n      status: \"error\",\n      tracePath: resolved.tracePath,\n      ...(resolved.runId !== undefined ? { runId: resolved.runId } : {}),\n      message,\n      diagnostics: [\n        diagnostic(\"AI_SUITE_TRACE_UNREADABLE\", message, \"error\", suiteCase.id),\n      ],\n    };\n  }\n\n  const { rules, select } = buildCaseRules(suiteCase, config);\n  const checkResult =\n    rules.length > 0\n      ? runTraceChecks({ read }, { rules, select })\n      : {\n          ok: true,\n          status: \"pass\" as const,\n          format: read.format,\n          summary: { passed: 0, failed: 0, warnings: 0, errors: 0, rulesEvaluated: 0 },\n          findings: [],\n          diagnostics: [],\n          ruleExecutions: [],\n        };\n  const observationResult = validateExpectedObservations(suiteCase, read);\n\n  const diagnostics = [\n    ...checkResult.diagnostics.map((item) =>\n      diagnostic(\n        \"AI_SUITE_CASE_CHECK_FAILED\",\n        item.message,\n        item.severity,\n        suiteCase.id,\n      ),\n    ),\n    ...checkResult.findings\n      .filter((finding) => finding.status === \"fail\")\n      .map((finding) =>\n        diagnostic(\n          \"AI_SUITE_CASE_CHECK_FAILED\",\n          finding.message,\n          finding.severity,\n          suiteCase.id,\n        ),\n      ),\n    ...observationResult.diagnostics,\n  ];\n\n  const checkOk = checkResult.ok;\n  const observationsOk = observationResult.ok;\n  const ok = checkOk && observationsOk;\n  const status = ok ? \"pass\" : checkResult.status === \"error\" ? \"error\" : \"fail\";\n\n  return {\n    id: suiteCase.id,\n    status,\n    tracePath: resolved.tracePath,\n    ...(resolved.runId !== undefined ? { runId: resolved.runId } : {}),\n    checkOk,\n    observationsOk,\n    diagnostics,\n    ...(ok\n      ? {}\n      : {\n          message:\n            diagnostics.map((item) => item.message).join(\"; \") ||\n            checkResult.findings.map((item) => item.message).join(\"; \"),\n        }),\n  };\n}\n\nexport async function runSuite(options: RunSuiteOptions = {}): Promise<SuiteRunResult> {\n  const startedAt = new Date(options.nowMs ?? Date.now()).toISOString();\n  const { config, configPath, configDir } = await loadSuiteConfig(options);\n  const tracesDir = path.resolve(configDir, config.traces);\n\n  const cases: SuiteCaseResult[] = [];\n  const diagnostics: SuiteDiagnostic[] = [];\n\n  for (const suiteCase of config.cases) {\n    cases.push(\n      await runSuiteCase(suiteCase, config, {\n        configDir,\n        tracesDir,\n      }),\n    );\n  }\n\n  const summary = {\n    passed: cases.filter((item) => item.status === \"pass\").length,\n    failed: cases.filter((item) => item.status === \"fail\").length,\n    errors: cases.filter((item) => item.status === \"error\").length,\n    skipped: cases.filter((item) => item.status === \"skipped\").length,\n  };\n\n  const finishedAt = new Date(options.nowMs ?? Date.now()).toISOString();\n  const allSkipped = cases.length > 0 && summary.skipped === cases.length;\n  const ok = summary.failed === 0 && summary.errors === 0 && !allSkipped;\n  const status =\n    summary.errors > 0\n      ? \"error\"\n      : allSkipped\n        ? \"fail\"\n        : summary.failed > 0 || !ok\n          ? \"fail\"\n          : \"pass\";\n\n  return {\n    ok,\n    status,\n    suiteName: config.name,\n    configPath,\n    tracesDir,\n    startedAt,\n    finishedAt,\n    summary,\n    cases,\n    diagnostics,\n  };\n}\n","import type { RenderSuiteReportOptions, SuiteRunResult } from \"./types.js\";\n\nfunction statusLabel(status: string): string {\n  return status.toUpperCase();\n}\n\nexport function renderSuiteReportMarkdown(result: SuiteRunResult): string {\n  const lines: string[] = [];\n  lines.push(`# Suite: ${result.suiteName}`);\n  lines.push(\"\");\n  lines.push(`Status: **${statusLabel(result.status)}**`);\n  lines.push(`Config: \\`${result.configPath}\\``);\n  lines.push(`Traces: \\`${result.tracesDir}\\``);\n  lines.push(`Started: ${result.startedAt}`);\n  lines.push(`Finished: ${result.finishedAt}`);\n  lines.push(\"\");\n  lines.push(\"## Summary\");\n  lines.push(`- Passed: ${result.summary.passed}`);\n  lines.push(`- Failed: ${result.summary.failed}`);\n  lines.push(`- Errors: ${result.summary.errors}`);\n  lines.push(`- Skipped: ${result.summary.skipped}`);\n  lines.push(\"\");\n  lines.push(\"## Cases\");\n  for (const suiteCase of result.cases) {\n    lines.push(`### ${suiteCase.id} — ${statusLabel(suiteCase.status)}`);\n    if (suiteCase.tracePath !== undefined) {\n      lines.push(`- Trace: \\`${suiteCase.tracePath}\\``);\n    }\n    if (suiteCase.runId !== undefined) {\n      lines.push(`- Run: \\`${suiteCase.runId}\\``);\n    }\n    if (suiteCase.message !== undefined && suiteCase.message.trim() !== \"\") {\n      lines.push(`- ${suiteCase.message}`);\n    }\n    if (suiteCase.diagnostics.length > 0) {\n      for (const item of suiteCase.diagnostics) {\n        lines.push(`- [${item.severity}] ${item.message}`);\n      }\n    }\n    lines.push(\"\");\n  }\n  return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderSuiteReport(\n  result: SuiteRunResult,\n  options: RenderSuiteReportOptions = {},\n): string {\n  const format = options.format ?? \"markdown\";\n  if (format === \"json\") {\n    return JSON.stringify(result, null, 2);\n  }\n  return renderSuiteReportMarkdown(result);\n}\n","import type { SuiteConfig } from \"./types.js\";\n\nexport const SUITE_TEMPLATE_IDS = [\n  \"customer-support-agent\",\n  \"refund-agent\",\n  \"sales-assistant\",\n  \"browser-task-agent\",\n  \"mcp-tool-agent\",\n  \"workflow-agent\",\n  \"rag-answer-agent\",\n  \"human-approval-agent\",\n] as const;\n\nexport type SuiteTemplateId = (typeof SUITE_TEMPLATE_IDS)[number];\n\nfunction baseTemplate(name: string, cases: SuiteConfig[\"cases\"]): SuiteConfig {\n  return {\n    name,\n    traces: \"./.agent-inspect\",\n    cases,\n    checks: {\n      select: [\"run.status\", \"outcome.status\"],\n      run: { maxDurationMs: 60_000 },\n    },\n    redactionProfile: \"local\",\n    artifacts: { outputDir: \".agent-inspect/suite-runs\" },\n  };\n}\n\nconst TEMPLATES: Record<SuiteTemplateId, SuiteConfig> = {\n  \"customer-support-agent\": baseTemplate(\"customer-support-agent\", [\n    {\n      id: \"support-ticket\",\n      runId: \"support-ticket\",\n      requireTools: [\"searchDocs\"],\n      forbidTools: [\"deleteAccount\"],\n      expectedObservations: [\"answerReady\"],\n      maxDurationMs: 45_000,\n    },\n  ]),\n  \"refund-agent\": baseTemplate(\"refund-agent\", [\n    {\n      id: \"refund-flow\",\n      runId: \"refund-flow\",\n      requireTools: [\"searchDocs\"],\n      forbidTools: [\"deleteAccount\"],\n      expectedObservations: [\"policyShown\"],\n      maxDurationMs: 30_000,\n    },\n  ]),\n  \"sales-assistant\": baseTemplate(\"sales-assistant\", [\n    {\n      id: \"quote-request\",\n      runId: \"quote-request\",\n      requireTools: [\"lookupPricing\"],\n      maxDurationMs: 30_000,\n    },\n  ]),\n  \"browser-task-agent\": baseTemplate(\"browser-task-agent\", [\n    {\n      id: \"browser-nav\",\n      runId: \"browser-nav\",\n      requireTools: [\"browserNavigate\"],\n      maxDurationMs: 120_000,\n    },\n  ]),\n  \"mcp-tool-agent\": baseTemplate(\"mcp-tool-agent\", [\n    {\n      id: \"mcp-call\",\n      runId: \"mcp-call\",\n      requireTools: [\"mcp:tools/list\"],\n      maxDurationMs: 30_000,\n    },\n  ]),\n  \"workflow-agent\": baseTemplate(\"workflow-agent\", [\n    {\n      id: \"workflow-handoff\",\n      runId: \"workflow-handoff\",\n      requireTools: [\"handoff\"],\n      maxDurationMs: 60_000,\n    },\n  ]),\n  \"rag-answer-agent\": baseTemplate(\"rag-answer-agent\", [\n    {\n      id: \"rag-answer\",\n      runId: \"rag-answer\",\n      requireTools: [\"retrieve\", \"answer\"],\n      expectedObservations: [\"citationShown\"],\n      maxDurationMs: 45_000,\n    },\n  ]),\n  \"human-approval-agent\": baseTemplate(\"human-approval-agent\", [\n    {\n      id: \"approval-gate\",\n      runId: \"approval-gate\",\n      expectedObservations: [\"approvalRequested\", \"approvalGranted\"],\n      maxDurationMs: 60_000,\n    },\n  ]),\n};\n\nexport function listSuiteTemplates(): SuiteTemplateId[] {\n  return [...SUITE_TEMPLATE_IDS];\n}\n\nexport function getSuiteTemplate(id: string): SuiteConfig | undefined {\n  if (!(SUITE_TEMPLATE_IDS as readonly string[]).includes(id)) return undefined;\n  return structuredClone(TEMPLATES[id as SuiteTemplateId]);\n}\n\nexport function resolveSuiteTemplate(id: string): SuiteConfig {\n  const template = getSuiteTemplate(id);\n  if (template === undefined) {\n    throw new Error(\n      `Unknown suite template \"${id}\". Available: ${SUITE_TEMPLATE_IDS.join(\", \")}`,\n    );\n  }\n  return template;\n}\n","export type {\n  LoadSuiteConfigOptions,\n  RenderSuiteReportOptions,\n  RunSuiteOptions,\n  SuiteArtifactsConfig,\n  SuiteCaseConfig,\n  SuiteCaseResult,\n  SuiteCaseStatus,\n  SuiteChecksConfig,\n  SuiteConfig,\n  SuiteDiagnostic,\n  SuiteDiagnosticCode,\n  SuiteEvalConfig,\n  SuiteRunResult,\n  SuiteRunSummary,\n  ValidateSuiteConfigResult,\n} from \"./types.js\";\nexport {\n  DEFAULT_SUITE_ARTIFACTS_DIR,\n  DEFAULT_SUITE_CONFIG_NAMES,\n} from \"./types.js\";\nexport {\n  defaultSuiteConfigTemplate,\n  loadSuiteConfig,\n  resolveSuiteConfigPath,\n} from \"./load.js\";\nexport { normalizeSuiteConfig, validateSuiteConfig } from \"./validate.js\";\nexport { resolveSuiteCaseTrace, type ResolvedSuiteCase } from \"./resolve.js\";\nexport { runSuite } from \"./run.js\";\nexport {\n  renderSuiteReport,\n  renderSuiteReportMarkdown,\n} from \"./report.js\";\nexport {\n  getSuiteTemplate,\n  listSuiteTemplates,\n  resolveSuiteTemplate,\n  SUITE_TEMPLATE_IDS,\n  type SuiteTemplateId,\n} from \"./templates.js\";\n","import type { TraceMetadataStatus } from \"../types.js\";\n\nexport type CohortMetricId =\n  | \"errorRate\"\n  | \"duration\"\n  | \"toolChoice\"\n  | \"toolOrdering\"\n  | \"llmCallCount\"\n  | \"tokenUsage\"\n  | \"retryCount\"\n  | \"observationFailure\"\n  | \"guardrailFailure\"\n  | \"circuitViolation\"\n  | \"redactionWarning\";\n\nexport const COHORT_METRIC_IDS: readonly CohortMetricId[] = [\n  \"errorRate\",\n  \"duration\",\n  \"toolChoice\",\n  \"toolOrdering\",\n  \"llmCallCount\",\n  \"tokenUsage\",\n  \"retryCount\",\n  \"observationFailure\",\n  \"guardrailFailure\",\n  \"circuitViolation\",\n  \"redactionWarning\",\n];\n\nexport interface CohortRunMetrics {\n  runId: string;\n  cohortLabel?: string;\n  groupKey: string;\n  status: TraceMetadataStatus;\n  error: boolean;\n  durationMs?: number;\n  llmCallCount: number;\n  tokenUsageTotal?: number;\n  retryCount: number;\n  observationFailures: number;\n  guardrailFailures: number;\n  circuitViolations: number;\n  redactionWarnings: number;\n  toolChoices: string[];\n  toolOrdering: string[];\n}\n\nexport interface CohortAggregateMetrics {\n  groupKey: string;\n  cohortLabel?: string;\n  runCount: number;\n  errorRate: number;\n  avgDurationMs?: number;\n  p95DurationMs?: number;\n  avgLlmCallCount: number;\n  avgTokenUsage?: number;\n  avgRetryCount: number;\n  observationFailureRate: number;\n  avgGuardrailFailures: number;\n  avgCircuitViolations: number;\n  avgRedactionWarnings: number;\n  dominantToolChoice?: string;\n  toolOrderingSignature?: string;\n}\n\nexport interface CohortMetricComparison {\n  metric: CohortMetricId;\n  baseline?: number | string;\n  candidate?: number | string;\n  delta?: number | string;\n  regression: boolean;\n  message: string;\n}\n\nexport interface CohortAnalysisResult {\n  ok: boolean;\n  traceDir: string;\n  baseline?: string;\n  candidate?: string;\n  cohortKey: string;\n  groupBy: string;\n  metrics: CohortMetricId[];\n  groups: CohortAggregateMetrics[];\n  comparisons: CohortMetricComparison[];\n  runs: CohortRunMetrics[];\n  warnings: string[];\n}\n\nexport interface CohortToleranceOptions {\n  /** Minimum runs per cohort label before comparisons are considered valid. */\n  minSampleSize?: number;\n  /** Allowed relative delta (0–1) before a metric comparison is a regression. */\n  maxRelativeDelta?: number;\n}\n\nexport interface AnalyzeCohortOptions {\n  traceDir: string;\n  baseline?: string;\n  candidate?: string;\n  cohortKey?: string;\n  groupBy?: string;\n  metrics?: CohortMetricId[];\n  tolerance?: CohortToleranceOptions;\n}\n\nexport interface RenderCohortReportOptions {\n  format?: \"markdown\" | \"json\" | \"html\";\n}\n","import type {\n  CohortAggregateMetrics,\n  CohortMetricComparison,\n  CohortMetricId,\n} from \"./types.js\";\n\nfunction compareNumber(\n  metric: CohortMetricId,\n  label: string,\n  baseline?: number,\n  candidate?: number,\n  higherIsWorse = true,\n  maxRelativeDelta?: number,\n): CohortMetricComparison | undefined {\n  if (baseline === undefined && candidate === undefined) return undefined;\n  const delta =\n    baseline !== undefined && candidate !== undefined\n      ? candidate - baseline\n      : undefined;\n  let regression =\n    delta !== undefined &&\n    ((higherIsWorse && delta > 0) || (!higherIsWorse && delta < 0));\n  if (\n    regression &&\n    maxRelativeDelta !== undefined &&\n    baseline !== undefined &&\n    baseline !== 0 &&\n    delta !== undefined\n  ) {\n    const relative = Math.abs(delta / baseline);\n    if (relative <= maxRelativeDelta) regression = false;\n  }\n  return {\n    metric,\n    baseline,\n    candidate,\n    delta,\n    regression,\n    message: `${label}: baseline=${baseline ?? \"n/a\"} candidate=${candidate ?? \"n/a\"}${\n      delta !== undefined ? ` (delta ${delta})` : \"\"\n    }`,\n  };\n}\n\nfunction pickAggregate(\n  groups: readonly CohortAggregateMetrics[],\n  cohortLabel: string,\n  groupKey?: string,\n): CohortAggregateMetrics | undefined {\n  return groups.find(\n    (group) =>\n      group.cohortLabel === cohortLabel &&\n      (groupKey === undefined || group.groupKey === groupKey),\n  );\n}\n\nexport function compareCohortAggregates(\n  groups: readonly CohortAggregateMetrics[],\n  options: {\n    baseline: string;\n    candidate: string;\n    metrics: readonly CohortMetricId[];\n    groupKey?: string;\n    maxRelativeDelta?: number;\n  },\n): CohortMetricComparison[] {\n  const baselineAgg = pickAggregate(groups, options.baseline, options.groupKey);\n  const candidateAgg = pickAggregate(groups, options.candidate, options.groupKey);\n  const comparisons: CohortMetricComparison[] = [];\n  const tolerance = options.maxRelativeDelta;\n\n  for (const metric of options.metrics) {\n    switch (metric) {\n      case \"errorRate\": {\n        const item = compareNumber(\n          metric,\n          \"Error rate\",\n          baselineAgg?.errorRate,\n          candidateAgg?.errorRate,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      case \"duration\": {\n        const item = compareNumber(\n          metric,\n          \"Average duration (ms)\",\n          baselineAgg?.avgDurationMs,\n          candidateAgg?.avgDurationMs,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      case \"llmCallCount\": {\n        const item = compareNumber(\n          metric,\n          \"Average LLM calls\",\n          baselineAgg?.avgLlmCallCount,\n          candidateAgg?.avgLlmCallCount,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      case \"tokenUsage\": {\n        const item = compareNumber(\n          metric,\n          \"Average token usage\",\n          baselineAgg?.avgTokenUsage,\n          candidateAgg?.avgTokenUsage,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      case \"retryCount\": {\n        const item = compareNumber(\n          metric,\n          \"Average retries\",\n          baselineAgg?.avgRetryCount,\n          candidateAgg?.avgRetryCount,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      case \"observationFailure\": {\n        const item = compareNumber(\n          metric,\n          \"Observation failure rate\",\n          baselineAgg?.observationFailureRate,\n          candidateAgg?.observationFailureRate,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      case \"toolChoice\": {\n        const baselineValue = baselineAgg?.dominantToolChoice;\n        const candidateValue = candidateAgg?.dominantToolChoice;\n        comparisons.push({\n          metric,\n          baseline: baselineValue,\n          candidate: candidateValue,\n          delta: baselineValue === candidateValue ? \"same\" : \"changed\",\n          regression: baselineValue !== candidateValue,\n          message: `Tool choice: baseline=${baselineValue ?? \"n/a\"} candidate=${candidateValue ?? \"n/a\"}`,\n        });\n        break;\n      }\n      case \"toolOrdering\": {\n        const baselineValue = baselineAgg?.toolOrderingSignature;\n        const candidateValue = candidateAgg?.toolOrderingSignature;\n        comparisons.push({\n          metric,\n          baseline: baselineValue,\n          candidate: candidateValue,\n          delta: baselineValue === candidateValue ? \"same\" : \"changed\",\n          regression: baselineValue !== candidateValue,\n          message: `Tool ordering: baseline=${baselineValue ?? \"n/a\"} candidate=${candidateValue ?? \"n/a\"}`,\n        });\n        break;\n      }\n      case \"guardrailFailure\": {\n        const item = compareNumber(\n          metric,\n          \"Guardrail failures\",\n          baselineAgg?.avgGuardrailFailures,\n          candidateAgg?.avgGuardrailFailures,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      case \"circuitViolation\": {\n        const item = compareNumber(\n          metric,\n          \"Circuit violations\",\n          baselineAgg?.avgCircuitViolations,\n          candidateAgg?.avgCircuitViolations,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      case \"redactionWarning\": {\n        const item = compareNumber(\n          metric,\n          \"Redaction warnings\",\n          baselineAgg?.avgRedactionWarnings,\n          candidateAgg?.avgRedactionWarnings,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      default:\n        break;\n    }\n  }\n\n  return comparisons;\n}\n","import { extractSessionWorkflowMetadata } from \"../sessions/metadata.js\";\nimport type { SessionRunRecord } from \"../sessions/types.js\";\n\nexport function parseCohortMetricList(value: string | undefined): string[] {\n  if (value === undefined || value.trim() === \"\") return [];\n  return value\n    .split(\",\")\n    .map((item) => item.trim())\n    .filter((item) => item.length > 0);\n}\n\nexport function parseGroupBySpec(groupBy: string | undefined): {\n  kind: \"model\" | \"session\" | \"group\" | \"metadata\";\n  metadataKey?: string;\n} {\n  const raw = (groupBy ?? \"model\").trim();\n  if (raw === \"model\") return { kind: \"model\" };\n  if (raw === \"session\") return { kind: \"session\" };\n  if (raw === \"group\") return { kind: \"group\" };\n  if (raw.startsWith(\"metadata.\")) {\n    const metadataKey = raw.slice(\"metadata.\".length).trim();\n    if (metadataKey === \"\") throw new Error(\"metadata group-by requires a key.\");\n    return { kind: \"metadata\", metadataKey };\n  }\n  throw new Error(`Unsupported --group-by value: ${raw}`);\n}\n\nfunction metadataString(\n  metadata: Record<string, unknown> | undefined,\n  key: string,\n): string | undefined {\n  const value = metadata?.[key];\n  return typeof value === \"string\" && value.trim() !== \"\" ? value.trim() : undefined;\n}\n\nexport function resolveRunGroupKey(\n  run: SessionRunRecord,\n  groupBy: ReturnType<typeof parseGroupBySpec>,\n): string {\n  const metadata = run.metadata ?? {};\n  switch (groupBy.kind) {\n    case \"model\":\n      return metadataString(metadata, \"model\") ?? \"unknown\";\n    case \"session\":\n      return (\n        extractSessionWorkflowMetadata(metadata)?.sessionId ??\n        metadataString(metadata, \"sessionId\") ??\n        \"__unscoped__\"\n      );\n    case \"group\":\n      return (\n        extractSessionWorkflowMetadata(metadata)?.groupId ??\n        metadataString(metadata, \"groupId\") ??\n        \"__unscoped__\"\n      );\n    case \"metadata\":\n      return metadataString(metadata, groupBy.metadataKey!) ?? \"__missing__\";\n    default:\n      return \"unknown\";\n  }\n}\n\nexport function resolveCohortLabel(\n  run: SessionRunRecord,\n  cohortKey: string,\n  baseline?: string,\n  candidate?: string,\n): string | undefined {\n  const label = metadataString(run.metadata, cohortKey);\n  if (label === undefined) return undefined;\n  if (baseline !== undefined && label === baseline) return baseline;\n  if (candidate !== undefined && label === candidate) return candidate;\n  if (baseline === undefined && candidate === undefined) return label;\n  return undefined;\n}\n\nexport function filterRunsForCohort(\n  runs: readonly SessionRunRecord[],\n  options: {\n    cohortKey: string;\n    baseline?: string;\n    candidate?: string;\n  },\n): { runs: SessionRunRecord[]; warnings: string[] } {\n  const warnings: string[] = [];\n  if (options.baseline === undefined && options.candidate === undefined) {\n    return { runs: [...runs], warnings };\n  }\n\n  const selected: SessionRunRecord[] = [];\n  for (const run of runs) {\n    const label = resolveCohortLabel(\n      run,\n      options.cohortKey,\n      options.baseline,\n      options.candidate,\n    );\n    if (label !== undefined) selected.push(run);\n  }\n\n  if (selected.length === 0) {\n    warnings.push(\n      `No runs matched baseline/candidate labels on metadata.${options.cohortKey}.`,\n    );\n  }\n\n  return { runs: selected, warnings };\n}\n","import { extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { buildRunSummary } from \"../trace-metadata.js\";\nimport { readTraceEventsFromFile } from \"../storage.js\";\nimport type { StepStartedEvent, TraceEvent } from \"../types.js\";\nimport type { CohortRunMetrics } from \"./types.js\";\n\nfunction asNumber(value: unknown): number | undefined {\n  return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction toolSteps(events: readonly TraceEvent[]): { choices: string[]; ordering: string[] } {\n  const ordering: string[] = [];\n  const choices = new Set<string>();\n  const sorted = [...events]\n    .filter((event) => event.event === \"step_started\")\n    .sort((a, b) => a.timestamp - b.timestamp);\n  for (const event of sorted) {\n    const step = event as StepStartedEvent;\n    if (step.type !== \"tool\") continue;\n    const name =\n      typeof step.metadata?.toolName === \"string\"\n        ? step.metadata.toolName\n        : step.name;\n    ordering.push(name);\n    choices.add(name);\n  }\n  return { choices: [...choices].sort(), ordering };\n}\n\nexport async function computeCohortRunMetrics(input: {\n  runId: string;\n  filePath: string;\n  metadata?: Record<string, unknown>;\n  status?: CohortRunMetrics[\"status\"];\n  durationMs?: number;\n  groupKey: string;\n  cohortLabel?: string;\n}): Promise<CohortRunMetrics> {\n  const events = await readTraceEventsFromFile(input.filePath);\n  const summary = buildRunSummary(events);\n  const tools = toolSteps(events);\n  const outcomes = extractOutcomesFromTraceEvents(events);\n  const observationFailures = outcomes.filter((item) => item.status === \"failed\").length;\n\n  const metadata = input.metadata ?? {};\n  const retryCount =\n    asNumber(metadata.attempt) !== undefined && asNumber(metadata.attempt)! > 1\n      ? asNumber(metadata.attempt)! - 1\n      : typeof metadata.retryOf === \"string\"\n        ? 1\n        : 0;\n\n  return {\n    runId: input.runId,\n    ...(input.cohortLabel !== undefined ? { cohortLabel: input.cohortLabel } : {}),\n    groupKey: input.groupKey,\n    status: summary.status,\n    error: summary.status === \"error\",\n    durationMs: summary.durationMs ?? input.durationMs,\n    llmCallCount: summary.llmSteps,\n    tokenUsageTotal: summary.totalTokens?.total,\n    retryCount,\n    observationFailures,\n    guardrailFailures: asNumber(metadata.guardrailFailures) ?? 0,\n    circuitViolations: asNumber(metadata.circuitViolations) ?? 0,\n    redactionWarnings: asNumber(metadata.redactionWarnings) ?? 0,\n    toolChoices: tools.choices,\n    toolOrdering: tools.ordering,\n  };\n}\n\nfunction percentile(values: number[], p: number): number | undefined {\n  if (values.length === 0) return undefined;\n  const sorted = [...values].sort((a, b) => a - b);\n  const idx = Math.min(\n    sorted.length - 1,\n    Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n  );\n  return sorted[idx];\n}\n\nfunction dominantToolChoice(runs: readonly CohortRunMetrics[]): string | undefined {\n  const counts = new Map<string, number>();\n  for (const run of runs) {\n    const signature = run.toolChoices.join(\",\");\n    if (signature === \"\") continue;\n    counts.set(signature, (counts.get(signature) ?? 0) + 1);\n  }\n  let best: string | undefined;\n  let bestCount = 0;\n  for (const [key, count] of counts) {\n    if (count > bestCount) {\n      best = key;\n      bestCount = count;\n    }\n  }\n  return best;\n}\n\nfunction orderingSignature(runs: readonly CohortRunMetrics[]): string | undefined {\n  const counts = new Map<string, number>();\n  for (const run of runs) {\n    const signature = run.toolOrdering.join(\">\");\n    if (signature === \"\") continue;\n    counts.set(signature, (counts.get(signature) ?? 0) + 1);\n  }\n  let best: string | undefined;\n  let bestCount = 0;\n  for (const [key, count] of counts) {\n    if (count > bestCount) {\n      best = key;\n      bestCount = count;\n    }\n  }\n  return best;\n}\n\nexport function aggregateCohortMetrics(\n  runs: readonly CohortRunMetrics[],\n  groupKey: string,\n  cohortLabel?: string,\n) {\n  const durations = runs\n    .map((run) => run.durationMs)\n    .filter((value): value is number => typeof value === \"number\");\n  const tokenValues = runs\n    .map((run) => run.tokenUsageTotal)\n    .filter((value): value is number => typeof value === \"number\");\n  const errors = runs.filter((run) => run.error).length;\n  const observationFailures = runs.reduce((sum, run) => sum + run.observationFailures, 0);\n\n  return {\n    groupKey,\n    ...(cohortLabel !== undefined ? { cohortLabel } : {}),\n    runCount: runs.length,\n    errorRate: runs.length > 0 ? errors / runs.length : 0,\n    avgDurationMs:\n      durations.length > 0\n        ? durations.reduce((sum, value) => sum + value, 0) / durations.length\n        : undefined,\n    p95DurationMs: percentile(durations, 95),\n    avgLlmCallCount:\n      runs.length > 0\n        ? runs.reduce((sum, run) => sum + run.llmCallCount, 0) / runs.length\n        : 0,\n    avgTokenUsage:\n      tokenValues.length > 0\n        ? tokenValues.reduce((sum, value) => sum + value, 0) / tokenValues.length\n        : undefined,\n    avgRetryCount:\n      runs.length > 0\n        ? runs.reduce((sum, run) => sum + run.retryCount, 0) / runs.length\n        : 0,\n    observationFailureRate:\n      runs.length > 0 ? observationFailures / runs.length : 0,\n    avgGuardrailFailures:\n      runs.length > 0\n        ? runs.reduce((sum, run) => sum + run.guardrailFailures, 0) / runs.length\n        : 0,\n    avgCircuitViolations:\n      runs.length > 0\n        ? runs.reduce((sum, run) => sum + run.circuitViolations, 0) / runs.length\n        : 0,\n    avgRedactionWarnings:\n      runs.length > 0\n        ? runs.reduce((sum, run) => sum + run.redactionWarnings, 0) / runs.length\n        : 0,\n    dominantToolChoice: dominantToolChoice(runs),\n    toolOrderingSignature: orderingSignature(runs),\n  };\n}\n","import type { SessionRunRecord } from \"../sessions/types.js\";\nimport { compareCohortAggregates } from \"./compare.js\";\nimport {\n  filterRunsForCohort,\n  parseGroupBySpec,\n  resolveCohortLabel,\n  resolveRunGroupKey,\n} from \"./grouping.js\";\nimport { aggregateCohortMetrics, computeCohortRunMetrics } from \"./metrics.js\";\nimport {\n  COHORT_METRIC_IDS,\n  type AnalyzeCohortOptions,\n  type CohortAnalysisResult,\n  type CohortMetricComparison,\n  type CohortMetricId,\n} from \"./types.js\";\n\nconst DEFAULT_METRICS: CohortMetricId[] = [\n  \"errorRate\",\n  \"duration\",\n  \"toolChoice\",\n  \"observationFailure\",\n];\n\nfunction normalizeMetrics(metrics: CohortMetricId[] | undefined): CohortMetricId[] {\n  if (metrics === undefined || metrics.length === 0) return [...DEFAULT_METRICS];\n  const allowed = new Set(COHORT_METRIC_IDS);\n  return metrics.filter((metric) => allowed.has(metric));\n}\n\nexport async function analyzeCohort(\n  runsInput: readonly SessionRunRecord[],\n  options: AnalyzeCohortOptions,\n): Promise<CohortAnalysisResult> {\n  const cohortKey = options.cohortKey ?? \"cohort\";\n  const groupBySpec = parseGroupBySpec(options.groupBy);\n  const metrics = normalizeMetrics(options.metrics);\n  const { runs: filteredRuns, warnings } = filterRunsForCohort(runsInput, {\n    cohortKey,\n    baseline: options.baseline,\n    candidate: options.candidate,\n  });\n\n  const runMetrics = [];\n  for (const run of filteredRuns) {\n    if (run.filePath === undefined) continue;\n    const cohortLabel = resolveCohortLabel(\n      run,\n      cohortKey,\n      options.baseline,\n      options.candidate,\n    );\n    runMetrics.push(\n      await computeCohortRunMetrics({\n        runId: run.runId,\n        filePath: run.filePath,\n        metadata: run.metadata,\n        status: run.status,\n        durationMs: run.durationMs,\n        groupKey: resolveRunGroupKey(run, groupBySpec),\n        cohortLabel,\n      }),\n    );\n  }\n\n  const groupMap = new Map<string, typeof runMetrics>();\n  for (const run of runMetrics) {\n    const key = `${run.cohortLabel ?? \"*\"}::${run.groupKey}`;\n    const bucket = groupMap.get(key) ?? [];\n    bucket.push(run);\n    groupMap.set(key, bucket);\n  }\n\n  const groups = [...groupMap.entries()]\n    .sort(([a], [b]) => a.localeCompare(b))\n    .map(([, bucket]) =>\n      aggregateCohortMetrics(\n        bucket,\n        bucket[0]!.groupKey,\n        bucket[0]?.cohortLabel,\n      ),\n    );\n\n  const comparisons =\n    options.baseline !== undefined && options.candidate !== undefined\n      ? (() => {\n          const groupKeys = [\n            ...new Set(groups.map((group) => group.groupKey)),\n          ].sort((a, b) => a.localeCompare(b));\n          const items: CohortMetricComparison[] = [];\n          const minSample = options.tolerance?.minSampleSize ?? 1;\n          for (const groupKey of groupKeys) {\n            const baselineGroup = groups.find(\n              (group) => group.groupKey === groupKey && group.cohortLabel === options.baseline,\n            );\n            const candidateGroup = groups.find(\n              (group) => group.groupKey === groupKey && group.cohortLabel === options.candidate,\n            );\n            if (\n              (baselineGroup && baselineGroup.runCount < minSample) ||\n              (candidateGroup && candidateGroup.runCount < minSample)\n            ) {\n              warnings.push(\n                `Insufficient sample for group ${groupKey}: need at least ${minSample} run(s) per cohort.`,\n              );\n              continue;\n            }\n            items.push(\n              ...compareCohortAggregates(groups, {\n                baseline: options.baseline,\n                candidate: options.candidate,\n                metrics,\n                groupKey,\n                maxRelativeDelta: options.tolerance?.maxRelativeDelta,\n              }),\n            );\n          }\n          return items;\n        })()\n      : [];\n\n  const regression = comparisons.some((item) => item.regression);\n\n  return {\n    ok: !regression,\n    traceDir: options.traceDir,\n    ...(options.baseline !== undefined ? { baseline: options.baseline } : {}),\n    ...(options.candidate !== undefined ? { candidate: options.candidate } : {}),\n    cohortKey,\n    groupBy: options.groupBy ?? \"model\",\n    metrics,\n    groups,\n    comparisons,\n    runs: runMetrics,\n    warnings,\n  };\n}\n","import { escapeHtml } from \"../exporters/helpers.js\";\nimport type { CohortAnalysisResult, RenderCohortReportOptions } from \"./types.js\";\n\nfunction formatRate(value: number | undefined): string {\n  if (value === undefined) return \"n/a\";\n  return `${(value * 100).toFixed(1)}%`;\n}\n\nexport function renderCohortSummaryMarkdown(result: CohortAnalysisResult): string {\n  const lines: string[] = [];\n  lines.push(\"# Cohort analysis\");\n  lines.push(\"\");\n  lines.push(`Trace directory: \\`${result.traceDir}\\``);\n  lines.push(`Group by: \\`${result.groupBy}\\``);\n  if (result.baseline !== undefined && result.candidate !== undefined) {\n    lines.push(\n      `Baseline/Candidate key: \\`${result.cohortKey}\\` (${result.baseline} vs ${result.candidate})`,\n    );\n  }\n  lines.push(`Status: **${result.ok ? \"PASS\" : \"REGRESSION\"}**`);\n  lines.push(\"\");\n\n  if (result.warnings.length > 0) {\n    lines.push(\"## Warnings\");\n    for (const warning of result.warnings) lines.push(`- ${warning}`);\n    lines.push(\"\");\n  }\n\n  lines.push(\"## Groups\");\n  for (const group of result.groups) {\n    lines.push(\n      `### ${group.cohortLabel ?? \"all\"} / ${group.groupKey} (${group.runCount} runs)`,\n    );\n    lines.push(`- Error rate: ${formatRate(group.errorRate)}`);\n    if (group.avgDurationMs !== undefined) {\n      lines.push(`- Avg duration: ${Math.round(group.avgDurationMs)} ms`);\n    }\n    if (group.dominantToolChoice !== undefined) {\n      lines.push(`- Dominant tools: ${group.dominantToolChoice}`);\n    }\n    lines.push(\n      `- Observation failure rate: ${formatRate(group.observationFailureRate)}`,\n    );\n    lines.push(\"\");\n  }\n\n  if (result.comparisons.length > 0) {\n    lines.push(\"## Comparisons\");\n    for (const comparison of result.comparisons) {\n      const flag = comparison.regression ? \" **REGRESSION**\" : \"\";\n      lines.push(`- ${comparison.message}${flag}`);\n    }\n    lines.push(\"\");\n  }\n\n  return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderCohortReportHtml(result: CohortAnalysisResult): string {\n  const rows = result.groups\n    .map(\n      (group) =>\n        `<tr><td>${escapeHtml(group.cohortLabel ?? \"all\")}</td><td>${escapeHtml(group.groupKey)}</td><td>${group.runCount}</td><td>${escapeHtml(formatRate(group.errorRate))}</td><td>${group.avgDurationMs !== undefined ? Math.round(group.avgDurationMs) : \"n/a\"}</td></tr>`,\n    )\n    .join(\"\");\n\n  const comparisons = result.comparisons\n    .map(\n      (item) =>\n        `<li>${escapeHtml(item.message)}${item.regression ? \" <strong>REGRESSION</strong>\" : \"\"}</li>`,\n    )\n    .join(\"\");\n\n  return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\" />\n  <title>Cohort report</title>\n  <style>\n    body { font-family: system-ui, sans-serif; margin: 2rem; }\n    table { border-collapse: collapse; width: 100%; }\n    th, td { border: 1px solid #ddd; padding: 0.5rem; text-align: left; }\n    th { background: #f6f6f6; }\n  </style>\n</head>\n<body>\n  <h1>Cohort analysis</h1>\n  <p>Status: <strong>${result.ok ? \"PASS\" : \"REGRESSION\"}</strong></p>\n  <p>Trace directory: <code>${escapeHtml(result.traceDir)}</code></p>\n  <h2>Groups</h2>\n  <table>\n    <thead><tr><th>Cohort</th><th>Group</th><th>Runs</th><th>Error rate</th><th>Avg duration (ms)</th></tr></thead>\n    <tbody>${rows}</tbody>\n  </table>\n  ${result.comparisons.length > 0 ? `<h2>Comparisons</h2><ul>${comparisons}</ul>` : \"\"}\n</body>\n</html>`;\n}\n\nexport function renderCohortReport(\n  result: CohortAnalysisResult,\n  options: RenderCohortReportOptions = {},\n): string {\n  const format = options.format ?? \"markdown\";\n  if (format === \"json\") return JSON.stringify(result, null, 2);\n  if (format === \"html\") return renderCohortReportHtml(result);\n  return renderCohortSummaryMarkdown(result);\n}\n","export type {\n  AnalyzeCohortOptions,\n  CohortAggregateMetrics,\n  CohortAnalysisResult,\n  CohortMetricComparison,\n  CohortMetricId,\n  CohortRunMetrics,\n  RenderCohortReportOptions,\n} from \"./types.js\";\nexport { COHORT_METRIC_IDS } from \"./types.js\";\nexport { analyzeCohort } from \"./analyze.js\";\nexport { compareCohortAggregates } from \"./compare.js\";\nexport {\n  filterRunsForCohort,\n  parseCohortMetricList,\n  parseGroupBySpec,\n  resolveCohortLabel,\n  resolveRunGroupKey,\n} from \"./grouping.js\";\nexport { aggregateCohortMetrics, computeCohortRunMetrics } from \"./metrics.js\";\nexport {\n  renderCohortReport,\n  renderCohortReportHtml,\n  renderCohortSummaryMarkdown,\n} from \"./render.js\";\n","export function parseGateList(value: string | undefined): string[] {\n  if (value === undefined || value.trim() === \"\") return [];\n  return value\n    .split(\",\")\n    .map((item) => item.trim())\n    .filter((item) => item.length > 0);\n}\n\nexport function parseGateNumber(\n  value: string | undefined,\n  label: string,\n  options: { min?: number; max?: number } = {},\n): number | undefined {\n  if (value === undefined || value.trim() === \"\") return undefined;\n  const parsed = Number(value);\n  if (!Number.isFinite(parsed)) {\n    throw new Error(`Invalid ${label}: ${value}`);\n  }\n  if (options.min !== undefined && parsed < options.min) {\n    throw new Error(`${label} must be at least ${options.min}.`);\n  }\n  if (options.max !== undefined && parsed > options.max) {\n    throw new Error(`${label} must be at most ${options.max}.`);\n  }\n  return parsed;\n}\n","import { extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { readTraceEventsFromFile } from \"../storage.js\";\nimport { computeCohortRunMetrics } from \"../cohort/metrics.js\";\nimport type { SessionRunRecord } from \"../sessions/types.js\";\nimport type { GateCheckResult, RunGateOptions } from \"./types.js\";\n\nfunction percentile(values: number[], p: number): number | undefined {\n  if (values.length === 0) return undefined;\n  const sorted = [...values].sort((a, b) => a - b);\n  const idx = Math.min(\n    sorted.length - 1,\n    Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n  );\n  return sorted[idx];\n}\n\nfunction hasThresholds(options: RunGateOptions): boolean {\n  return (\n    options.maxErrorRate !== undefined ||\n    options.maxP95DurationMs !== undefined ||\n    (options.forbidTools?.length ?? 0) > 0 ||\n    (options.requireObservations?.length ?? 0) > 0\n  );\n}\n\nexport function gateHasThresholds(options: RunGateOptions): boolean {\n  return hasThresholds(options);\n}\n\nasync function loadRunMetrics(runs: readonly SessionRunRecord[]) {\n  const metrics = [];\n  for (const run of runs) {\n    if (run.filePath === undefined) continue;\n    metrics.push(\n      await computeCohortRunMetrics({\n        runId: run.runId,\n        filePath: run.filePath,\n        metadata: run.metadata,\n        status: run.status,\n        durationMs: run.durationMs,\n        groupKey: \"all\",\n      }),\n    );\n  }\n  return metrics;\n}\n\nasync function observationStatus(\n  filePath: string,\n  name: string,\n): Promise<\"passed\" | \"failed\" | \"missing\"> {\n  const events = await readTraceEventsFromFile(filePath);\n  const outcomes = extractOutcomesFromTraceEvents(events);\n  const match = outcomes.find((item) => item.name === name);\n  if (!match) return \"missing\";\n  return match.status === \"passed\" ? \"passed\" : \"failed\";\n}\n\nexport async function evaluateGateThresholds(\n  runs: readonly SessionRunRecord[],\n  options: RunGateOptions,\n): Promise<{ checks: GateCheckResult[]; readErrors: string[] }> {\n  const checks: GateCheckResult[] = [];\n  const readErrors: string[] = [];\n\n  if (!hasThresholds(options)) {\n    return { checks, readErrors };\n  }\n\n  if (runs.length === 0) {\n    readErrors.push(\"No trace runs found in the gate directory.\");\n    return { checks, readErrors };\n  }\n\n  let runMetrics;\n  try {\n    runMetrics = await loadRunMetrics(runs);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    readErrors.push(message);\n    return { checks, readErrors };\n  }\n\n  if (options.maxErrorRate !== undefined) {\n    const errors = runMetrics.filter((run) => run.error).length;\n    const actual = runMetrics.length > 0 ? (errors / runMetrics.length) * 100 : 0;\n    const ok = actual <= options.maxErrorRate;\n    checks.push({\n      id: \"maxErrorRate\",\n      name: \"Max error rate\",\n      ok,\n      expected: options.maxErrorRate,\n      actual: Math.round(actual * 10) / 10,\n      message: ok\n        ? `Error rate ${actual.toFixed(1)}% within limit ${options.maxErrorRate}%`\n        : `Error rate ${actual.toFixed(1)}% exceeds limit ${options.maxErrorRate}%`,\n    });\n  }\n\n  if (options.maxP95DurationMs !== undefined) {\n    const durations = runMetrics\n      .map((run) => run.durationMs)\n      .filter((value): value is number => typeof value === \"number\");\n    const actual = percentile(durations, 95);\n    const ok = actual !== undefined && actual <= options.maxP95DurationMs;\n    checks.push({\n      id: \"maxP95Duration\",\n      name: \"Max p95 duration (ms)\",\n      ok,\n      expected: options.maxP95DurationMs,\n      actual: actual ?? \"n/a\",\n      message:\n        actual === undefined\n          ? \"No duration samples available for p95 check.\"\n          : ok\n            ? `P95 duration ${Math.round(actual)} ms within limit ${options.maxP95DurationMs} ms`\n            : `P95 duration ${Math.round(actual)} ms exceeds limit ${options.maxP95DurationMs} ms`,\n    });\n  }\n\n  for (const tool of options.forbidTools ?? []) {\n    let violated = false;\n    for (const run of runMetrics) {\n      const used =\n        run.toolChoices.includes(tool) || run.toolOrdering.includes(tool);\n      if (used) {\n        violated = true;\n        checks.push({\n          id: \"forbidTool\",\n          name: `Forbid tool: ${tool}`,\n          ok: false,\n          expected: `not used`,\n          actual: \"used\",\n          runId: run.runId,\n          message: `Forbidden tool \"${tool}\" used in run ${run.runId}`,\n        });\n      }\n    }\n    if (!violated) {\n      checks.push({\n        id: \"forbidTool\",\n        name: `Forbid tool: ${tool}`,\n        ok: true,\n        message: `Forbidden tool \"${tool}\" not used`,\n      });\n    }\n  }\n\n  for (const observation of options.requireObservations ?? []) {\n    for (const run of runs) {\n      if (run.filePath === undefined) continue;\n      try {\n        const status = await observationStatus(run.filePath, observation);\n        const ok = status === \"passed\";\n        checks.push({\n          id: \"requireObservation\",\n          name: `Require observation: ${observation}`,\n          ok,\n          expected: \"passed\",\n          actual: status,\n          runId: run.runId,\n          message: ok\n            ? `Observation \"${observation}\" passed in run ${run.runId}`\n            : status === \"missing\"\n              ? `Observation \"${observation}\" missing in run ${run.runId}`\n              : `Observation \"${observation}\" failed in run ${run.runId}`,\n        });\n      } catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        readErrors.push(`Run ${run.runId}: ${message}`);\n      }\n    }\n  }\n\n  return { checks, readErrors };\n}\n\nexport function checksFromSuiteResult(\n  suiteResult: import(\"../suite/types.js\").SuiteRunResult,\n): GateCheckResult[] {\n  const checks: GateCheckResult[] = [\n    {\n      id: \"suite\",\n      name: `Suite: ${suiteResult.suiteName}`,\n      ok: suiteResult.ok,\n      message: suiteResult.ok\n        ? `Suite passed (${suiteResult.summary.passed} cases)`\n        : `Suite failed (${suiteResult.summary.failed} failed, ${suiteResult.summary.errors} errors)`,\n    },\n  ];\n\n  for (const suiteCase of suiteResult.cases) {\n    if (suiteCase.status === \"pass\") continue;\n    checks.push({\n      id: \"suite\",\n      name: `Case: ${suiteCase.id}`,\n      ok: false,\n      message: suiteCase.message ?? `Case status: ${suiteCase.status}`,\n    });\n  }\n\n  return checks;\n}\n","import path from \"node:path\";\n\nimport { runSuite } from \"../suite/run.js\";\nimport type { GateCheckResult, GateExitCode, GateResult, RunGateOptions } from \"./types.js\";\nimport { checksFromSuiteResult, evaluateGateThresholds, gateHasThresholds } from \"./evaluate.js\";\n\nfunction resolveExitCode(input: {\n  ok: boolean;\n  configError: boolean;\n  readError: boolean;\n}): GateExitCode {\n  if (input.configError) return 2;\n  if (input.readError) return 3;\n  if (!input.ok) return 1;\n  return 0;\n}\n\nfunction validateOptions(options: RunGateOptions): string[] {\n  const errors: string[] = [];\n  const hasSuite = options.suitePath !== undefined && options.suitePath.trim() !== \"\";\n  const hasThresholds = gateHasThresholds(options);\n\n  if (!hasSuite && !hasThresholds) {\n    errors.push(\n      \"No gate rules specified. Pass --suite or at least one threshold flag.\",\n    );\n  }\n\n  if (hasThresholds && (options.traceDir === undefined || options.traceDir.trim() === \"\")) {\n    if (!hasSuite) {\n      errors.push(\"Threshold flags require --dir <trace-directory>.\");\n    }\n  }\n\n  if (options.maxErrorRate !== undefined && options.maxErrorRate < 0) {\n    errors.push(\"--max-error-rate must be a non-negative percentage.\");\n  }\n  if (options.maxErrorRate !== undefined && options.maxErrorRate > 100) {\n    errors.push(\"--max-error-rate must be at most 100.\");\n  }\n\n  if (options.maxP95DurationMs !== undefined && options.maxP95DurationMs < 0) {\n    errors.push(\"--max-p95-duration must be a non-negative millisecond value.\");\n  }\n\n  return errors;\n}\n\nfunction isConfigLoadError(error: unknown): boolean {\n  if (!(error instanceof Error)) return false;\n  const ext = path.extname(error.message);\n  if (error.message.includes(\"Unsupported suite config extension\")) return true;\n  if (error.message.includes(\"TypeScript suite configs require\")) return true;\n  if (error.message.includes(\"No suite config found\")) return true;\n  if (error.message.includes(\"AI_SUITE_CONFIG\")) return true;\n  if (ext === \".ts\" || ext === \".mts\" || ext === \".cts\") return true;\n  return \"diagnostics\" in error;\n}\n\nexport async function runGate(\n  runs: readonly import(\"../sessions/types.js\").SessionRunRecord[],\n  options: RunGateOptions,\n): Promise<GateResult> {\n  const diagnostics: string[] = [];\n  const checks: GateCheckResult[] = [];\n\n  const validationErrors = validateOptions(options);\n  if (validationErrors.length > 0) {\n    return {\n      ok: false,\n      exitCode: 2,\n      runCount: 0,\n      checks,\n      diagnostics: validationErrors,\n    };\n  }\n\n  let traceDir = options.traceDir?.trim();\n  let suiteResult: GateResult[\"suiteResult\"];\n\n  if (options.suitePath !== undefined && options.suitePath.trim() !== \"\") {\n    try {\n      suiteResult = await runSuite({\n        configPath: options.suitePath,\n        cwd: options.cwd,\n      });\n      traceDir = traceDir ?? suiteResult.tracesDir;\n      checks.push(...checksFromSuiteResult(suiteResult));\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      diagnostics.push(message);\n      return {\n        ok: false,\n        exitCode: isConfigLoadError(error) ? 2 : 3,\n        traceDir,\n        suitePath: options.suitePath,\n        runCount: 0,\n        checks,\n        diagnostics,\n      };\n    }\n  }\n\n  if (gateHasThresholds(options)) {\n    const thresholdDir = traceDir;\n    if (thresholdDir === undefined || thresholdDir.trim() === \"\") {\n      return {\n        ok: false,\n        exitCode: 2,\n        traceDir,\n        suitePath: options.suitePath,\n        runCount: runs.length,\n        checks,\n        diagnostics: [\"Threshold evaluation requires a trace directory.\"],\n        ...(suiteResult !== undefined ? { suiteResult } : {}),\n      };\n    }\n\n    const thresholdRuns = runs.length > 0 ? runs : [];\n    const { checks: thresholdChecks, readErrors } = await evaluateGateThresholds(\n      thresholdRuns,\n      options,\n    );\n    checks.push(...thresholdChecks);\n    diagnostics.push(...readErrors);\n\n    if (readErrors.length > 0) {\n      const ok = checks.length > 0 && checks.every((item) => item.ok);\n      return {\n        ok,\n        exitCode: resolveExitCode({\n          ok,\n          configError: false,\n          readError: true,\n        }),\n        traceDir: thresholdDir,\n        suitePath: options.suitePath,\n        runCount: thresholdRuns.length,\n        checks,\n        diagnostics,\n        ...(suiteResult !== undefined ? { suiteResult } : {}),\n      };\n    }\n  }\n\n  const ok = checks.length > 0 && checks.every((item) => item.ok);\n  return {\n    ok,\n    exitCode: resolveExitCode({ ok, configError: false, readError: false }),\n    traceDir,\n    suitePath: options.suitePath,\n    runCount: runs.length,\n    checks,\n    diagnostics,\n    ...(suiteResult !== undefined ? { suiteResult } : {}),\n  };\n}\n","import { escapeHtml } from \"../exporters/helpers.js\";\nimport type { GateResult, RenderGateReportOptions } from \"./types.js\";\n\nfunction escapeXml(value: string): string {\n  return value\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&apos;\");\n}\n\nexport function renderGateSummaryMarkdown(result: GateResult): string {\n  const lines: string[] = [];\n  lines.push(\"# AgentInspect gate\");\n  lines.push(\"\");\n  lines.push(`Status: **${result.ok ? \"PASS\" : \"FAIL\"}** (exit ${result.exitCode})`);\n  if (result.traceDir !== undefined) {\n    lines.push(`Trace directory: \\`${result.traceDir}\\``);\n  }\n  if (result.suitePath !== undefined) {\n    lines.push(`Suite config: \\`${result.suitePath}\\``);\n  }\n  lines.push(`Runs evaluated: ${result.runCount}`);\n  lines.push(\"\");\n\n  if (result.diagnostics.length > 0) {\n    lines.push(\"## Diagnostics\");\n    for (const item of result.diagnostics) lines.push(`- ${item}`);\n    lines.push(\"\");\n  }\n\n  lines.push(\"## Checks\");\n  for (const check of result.checks) {\n    const flag = check.ok ? \"PASS\" : \"FAIL\";\n    lines.push(`- [${flag}] ${check.name}: ${check.message}`);\n  }\n  lines.push(\"\");\n\n  return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderGateGithubStepSummary(result: GateResult): string {\n  const lines: string[] = [];\n  lines.push(`## AgentInspect gate: ${result.ok ? \"PASS\" : \"FAIL\"}`);\n  lines.push(\"\");\n  lines.push(\"| Check | Status | Details |\");\n  lines.push(\"| --- | --- | --- |\");\n  for (const check of result.checks) {\n    lines.push(\n      `| ${check.name} | ${check.ok ? \"pass\" : \"fail\"} | ${check.message.replace(/\\|/g, \"/\")} |`,\n    );\n  }\n  if (result.diagnostics.length > 0) {\n    lines.push(\"\");\n    lines.push(\"**Diagnostics**\");\n    for (const item of result.diagnostics) lines.push(`- ${item}`);\n  }\n  return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderGateReportHtml(result: GateResult): string {\n  const rows = result.checks\n    .map(\n      (check) =>\n        `<tr><td>${escapeHtml(check.name)}</td><td>${check.ok ? \"PASS\" : \"FAIL\"}</td><td>${escapeHtml(check.message)}</td></tr>`,\n    )\n    .join(\"\");\n\n  return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\" />\n  <title>Gate report</title>\n  <style>\n    body { font-family: system-ui, sans-serif; margin: 2rem; }\n    table { border-collapse: collapse; width: 100%; }\n    th, td { border: 1px solid #ddd; padding: 0.5rem; text-align: left; }\n    th { background: #f6f6f6; }\n  </style>\n</head>\n<body>\n  <h1>AgentInspect gate</h1>\n  <p>Status: <strong>${result.ok ? \"PASS\" : \"FAIL\"}</strong> (exit ${result.exitCode})</p>\n  <h2>Checks</h2>\n  <table>\n    <thead><tr><th>Check</th><th>Status</th><th>Details</th></tr></thead>\n    <tbody>${rows}</tbody>\n  </table>\n</body>\n</html>`;\n}\n\nexport function renderGateJUnit(result: GateResult): string {\n  const failures = result.checks.filter((check) => !check.ok).length;\n  const tests = result.checks.length;\n  const cases = result.checks\n    .map((check) => {\n      if (check.ok) {\n        return `    <testcase name=\"${escapeXml(check.name)}\" classname=\"gate\" />`;\n      }\n      return `    <testcase name=\"${escapeXml(check.name)}\" classname=\"gate\">\n      <failure message=\"${escapeXml(check.message)}\">${escapeXml(check.message)}</failure>\n    </testcase>`;\n    })\n    .join(\"\\n\");\n\n  return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites tests=\"${tests}\" failures=\"${failures}\" errors=\"0\" time=\"0\">\n  <testsuite name=\"agent-inspect-gate\" tests=\"${tests}\" failures=\"${failures}\" errors=\"0\" time=\"0\">\n${cases}\n  </testsuite>\n</testsuites>`;\n}\n\n/**\n * Compact GitHub Actions workflow-command annotations for failed checks.\n * File/line are omitted when the gate has no source locations (typical for\n * trajectory thresholds).\n */\nexport function renderGateGithubAnnotations(result: GateResult): string {\n  return result.checks\n    .filter((check) => !check.ok)\n    .map((check) => {\n      const message = check.message.replace(/\\r?\\n/g, \" \").replace(/%/g, \"%25\");\n      return `::error title=${check.name}::${message}`;\n    })\n    .join(\"\\n\");\n}\n\nexport function renderGateReport(\n  result: GateResult,\n  options: RenderGateReportOptions = {},\n): string {\n  const format = options.format ?? \"markdown\";\n  if (format === \"json\") return JSON.stringify(result, null, 2);\n  if (format === \"json-compact\") {\n    return JSON.stringify({\n      ok: result.ok,\n      exitCode: result.exitCode,\n      failed: result.checks.filter((check) => !check.ok).map((check) => check.name),\n      checks: result.checks.map((check) => ({\n        name: check.name,\n        ok: check.ok,\n        message: check.message,\n      })),\n    });\n  }\n  if (format === \"html\") return renderGateReportHtml(result);\n  if (format === \"junit\") return renderGateJUnit(result);\n  if (format === \"github\") return renderGateGithubStepSummary(result);\n  if (format === \"github-annotations\") return renderGateGithubAnnotations(result);\n  return renderGateSummaryMarkdown(result);\n}\n","export type {\n  GateCheckId,\n  GateCheckResult,\n  GateExitCode,\n  GateResult,\n  RenderGateReportOptions,\n  RunGateOptions,\n} from \"./types.js\";\nexport { parseGateList, parseGateNumber } from \"./parse.js\";\nexport {\n  checksFromSuiteResult,\n  evaluateGateThresholds,\n  gateHasThresholds,\n} from \"./evaluate.js\";\nexport { runGate } from \"./run.js\";\nexport {\n  renderGateGithubAnnotations,\n  renderGateGithubStepSummary,\n  renderGateJUnit,\n  renderGateReport,\n  renderGateReportHtml,\n  renderGateSummaryMarkdown,\n} from \"./render.js\";\n","import { buildRunStartedMetadata } from \"./correlation-metadata.js\";\nimport { runWithContext } from \"./context.js\";\nimport type { ExecutionContext, InspectRunOptions, TraceEvent } from \"./types.js\";\nimport { initializeTraceFile, writeTraceEvent } from \"./storage.js\";\nimport { printRunComplete, printRunStart } from \"./terminal.js\";\nimport { resolveTraceDir } from \"./trace-directory.js\";\nimport {\n  prepareTraceEventForDisk,\n  resolveTraceSafetyOptions,\n} from \"./trace-event-safety.js\";\nimport {\n  createRunId,\n  formatError,\n  getTraceFilePath,\n  truncateName,\n  warn,\n} from \"./utils.js\";\n\nfunction normalizeRunName(name: unknown): string {\n  if (typeof name !== \"string\" || name.trim() === \"\") {\n    return \"unnamed-run\";\n  }\n  return truncateName(name.trim(), 100);\n}\n\nasync function safeInstrumentation(\n  label: string,\n  op: () => void | Promise<void>,\n): Promise<void> {\n  try {\n    await Promise.resolve(op());\n  } catch (e) {\n    warn(`inspectRun: ${label}`, e);\n  }\n}\n\n/**\n * Stable v1.0 API for local manual run tracing.\n *\n * Runs `fn` inside an AgentInspect trace: JSONL `run_started` / `run_completed`, optional terminal output,\n * and {@link ExecutionContext} for nested APIs. Instrumentation failures are swallowed; user errors are re-thrown.\n */\nexport async function inspectRun<T>(\n  name: string,\n  fn: () => Promise<T> | T,\n  options?: InspectRunOptions,\n): Promise<T> {\n  if (typeof fn !== \"function\") {\n    throw new TypeError(\"inspectRun requires `fn` to be a function\");\n  }\n\n  if (options?.enabled === false) {\n    return Promise.resolve(fn());\n  }\n\n  const runName = normalizeRunName(name);\n  const runId = createRunId();\n  const traceDir = resolveTraceDir({ dir: options?.traceDir });\n\n  const traceSafety = resolveTraceSafetyOptions(options);\n  const runMetadata = buildRunStartedMetadata(options);\n\n  const context: ExecutionContext = {\n    runId,\n    runName,\n    traceDir,\n    silent: options?.silent ?? false,\n    metadata: runMetadata,\n  };\n\n  return runWithContext(context, async () => {\n    const startTime = Date.now();\n    let traceFilePath: string | undefined;\n\n    await safeInstrumentation(\"initializeTraceFile\", async () => {\n      traceFilePath = await initializeTraceFile(runId, traceDir);\n    });\n\n    await safeInstrumentation(\"writeTraceEvent(run_started)\", async () => {\n      const started: TraceEvent = {\n        schemaVersion: \"0.1\",\n        event: \"run_started\",\n        timestamp: startTime,\n        runId,\n        name: runName,\n        startTime,\n        ...(runMetadata !== undefined ? { metadata: runMetadata } : {}),\n      };\n      await writeTraceEvent(\n        prepareTraceEventForDisk(started, traceSafety),\n        traceDir,\n      );\n    });\n\n    await safeInstrumentation(\"printRunStart\", () => {\n      printRunStart(runId, runName);\n    });\n\n    let result: T;\n    try {\n      result = await Promise.resolve(fn());\n    } catch (userError) {\n      const endTime = Date.now();\n      const durationMs = endTime - startTime;\n      const formatted = formatError(userError);\n      const printPath = traceFilePath ?? getTraceFilePath(runId, traceDir);\n\n      await safeInstrumentation(\"writeTraceEvent(run_completed error)\", async () => {\n        const completed: TraceEvent = {\n          schemaVersion: \"0.1\",\n          event: \"run_completed\",\n          timestamp: endTime,\n          runId,\n          status: \"error\",\n          endTime,\n          durationMs,\n          error: formatted,\n        };\n        await writeTraceEvent(\n          prepareTraceEventForDisk(completed, traceSafety),\n          traceDir,\n        );\n      });\n\n      await safeInstrumentation(\"printRunComplete(error)\", () => {\n        printRunComplete(runName, runId, durationMs, \"error\", printPath);\n      });\n\n      throw userError;\n    }\n\n    const endTime = Date.now();\n    const durationMs = endTime - startTime;\n    const printPath = traceFilePath ?? getTraceFilePath(runId, traceDir);\n\n    await safeInstrumentation(\"writeTraceEvent(run_completed success)\", async () => {\n      const completed: TraceEvent = {\n        schemaVersion: \"0.1\",\n        event: \"run_completed\",\n        timestamp: endTime,\n        runId,\n        status: \"success\",\n        endTime,\n        durationMs,\n      };\n      await writeTraceEvent(\n        prepareTraceEventForDisk(completed, traceSafety),\n        traceDir,\n      );\n    });\n\n    await safeInstrumentation(\"printRunComplete(success)\", () => {\n      printRunComplete(runName, runId, durationMs, \"success\", printPath);\n    });\n\n    return result;\n  }, traceSafety);\n}\n","import { inspectRun } from \"./inspect-run.js\";\nimport type { InspectRunOptions } from \"./types.js\";\n\nconst ENABLED_ENV_VALUES = new Set([\"1\", \"true\", \"yes\", \"on\", \"enabled\"]);\n\n/**\n * Returns true when `value` is one of the recognized AGENT_INSPECT enable tokens\n * (`1`, `true`, `yes`, `on`, `enabled`, case-insensitive). Undefined or any other value is false.\n */\nexport function isAgentInspectEnabled(value?: string): boolean {\n  if (value === undefined) return false;\n  const normalized = value.trim().toLowerCase();\n  if (normalized === \"\") return false;\n  return ENABLED_ENV_VALUES.has(normalized);\n}\n\n/**\n * Runs `fn` with tracing when enabled; otherwise passthrough (no trace file, no context).\n *\n * Enablement order: explicit `options.enabled` wins; when omitted, reads `process.env.AGENT_INSPECT`.\n * Unset or unrecognized env values disable tracing.\n */\nexport async function maybeInspectRun<T>(\n  name: string,\n  fn: () => Promise<T> | T,\n  options?: InspectRunOptions,\n): Promise<T> {\n  if (typeof fn !== \"function\") {\n    throw new TypeError(\"maybeInspectRun requires `fn` to be a function\");\n  }\n\n  const enabled =\n    options?.enabled !== undefined\n      ? options.enabled\n      : isAgentInspectEnabled(process.env.AGENT_INSPECT);\n\n  if (!enabled) {\n    return Promise.resolve(fn());\n  }\n\n  return inspectRun(name, fn, options);\n}\n","/**\n * Optional omitted-payload digest commitment helpers (6.22; preflight bound in 6.25.1).\n *\n * A digest proves bytes were observed/omitted; it is not redaction, authorization,\n * or a secret-management feature. AgentInspect does not hold HMAC keys.\n *\n * @experimental Available through `agent-inspect/advanced`.\n */\n\nimport { createHash } from \"node:crypto\";\n\nexport type OmittedPayloadAlgorithm = \"sha256\";\n\n/**\n * Bounded commitment recorded when payload bytes are intentionally omitted.\n *\n * @experimental\n */\nexport interface OmittedPayloadCommitment {\n  algorithm: OmittedPayloadAlgorithm;\n  digest: string;\n  byteLength: number;\n  contentType?: string;\n  shape?: string;\n  capturePolicy: \"omitted\" | \"preview-only\" | \"digest-only\";\n}\n\n/** Maximum input size accepted for digest commitment (1 MiB). */\nexport const OMITTED_PAYLOAD_MAX_DIGEST_INPUT_BYTES = 1024 * 1024;\n\n/**\n * Preflight byte length without allocating a full Buffer copy for oversized input.\n */\nexport function omittedPayloadByteLength(payload: string | Uint8Array): number {\n  if (typeof payload === \"string\") {\n    return Buffer.byteLength(payload, \"utf8\");\n  }\n  return payload.byteLength;\n}\n\n/**\n * Build a SHA-256 digest commitment for omitted payload bytes.\n * Throws if input exceeds the 1 MiB bound (checked before copying oversized strings).\n */\nexport function createOmittedPayloadCommitment(\n  payload: string | Uint8Array,\n  options: {\n    contentType?: string;\n    shape?: string;\n    capturePolicy?: OmittedPayloadCommitment[\"capturePolicy\"];\n  } = {},\n): OmittedPayloadCommitment {\n  const byteLength = omittedPayloadByteLength(payload);\n  if (byteLength > OMITTED_PAYLOAD_MAX_DIGEST_INPUT_BYTES) {\n    throw new RangeError(\n      `Omitted payload exceeds ${OMITTED_PAYLOAD_MAX_DIGEST_INPUT_BYTES} byte digest bound.`,\n    );\n  }\n  // Strings: only allocate after preflight. Uint8Array: hash without Buffer.from copy.\n  const digest =\n    typeof payload === \"string\"\n      ? createHash(\"sha256\").update(Buffer.from(payload, \"utf8\")).digest(\"hex\")\n      : createHash(\"sha256\").update(payload).digest(\"hex\");\n  return {\n    algorithm: \"sha256\",\n    digest,\n    byteLength,\n    ...(options.contentType !== undefined ? { contentType: options.contentType } : {}),\n    ...(options.shape !== undefined ? { shape: options.shape } : {}),\n    capturePolicy: options.capturePolicy ?? \"digest-only\",\n  };\n}\n","export {\n  getCurrentContext,\n  getCurrentCorrelationMetadata,\n  getCurrentRunId,\n  getCurrentRunName,\n  getCurrentStepId,\n  getParentStepId,\n  getCurrentDepth,\n  getTraceDirFromContext,\n  isSilentContext,\n  hasActiveContext,\n  runWithContext,\n  runWithStepContext,\n  getTraceSafetyFromContext,\n} from \"../context.js\";\n\nexport type {\n  CreateInspectorOptions,\n  Inspector,\n  InspectorCaptureOptions,\n  InspectorObserveOptions,\n  InspectorRunOptions,\n  InspectorStepOptions,\n} from \"../inspector.js\";\n\nexport { createInspector } from \"../inspector.js\";\n\nexport type {\n  InspectorRuntime,\n  InspectorRuntimeContext,\n  InspectorRuntimeDiagnostics,\n  InspectorRuntimeOptions,\n} from \"../inspector-runtime.js\";\n\nexport { createInspectorRuntime } from \"../inspector-runtime.js\";\n\nexport type {\n  ResolvedRedactionProfile,\n  TraceSafetyOptions,\n} from \"../trace-event-safety.js\";\n\nexport {\n  DEFAULT_MAX_EVENT_BYTES,\n  DEFAULT_MAX_METADATA_VALUE_LENGTH,\n  DEFAULT_MAX_PREVIEW_LENGTH,\n  prepareMetadataForDisk,\n  prepareTraceEventForDisk,\n  resolveRedactionProfile,\n  resolveTraceSafetyOptions,\n} from \"../trace-event-safety.js\";\n\nexport type {\n  AdapterCaptureDiagnostic,\n  AdapterCaptureDiagnosticCode,\n  AdapterCaptureDiagnostics,\n  AdapterCaptureMode,\n  AdapterDiagnosticListener,\n  AdapterPreviewCapture,\n  AdapterPreviewCaptureOptions,\n} from \"../adapters/preview-capture.js\";\n\nexport {\n  ADAPTER_CAPTURE_DIAGNOSTIC_CODES,\n  DEFAULT_ADAPTER_MAX_PREVIEW_CHARS,\n  createAdapterPreviewCapture,\n  resolveAdapterMaxPreviewChars,\n  serializeAdapterPreview,\n} from \"../adapters/preview-capture.js\";\n\nexport {\n  TERMINAL_INDENT,\n  MAX_TERMINAL_NAME_LENGTH,\n  MAX_TERMINAL_DEPTH,\n  getIndent,\n  formatTerminalName,\n  printRunStart,\n  printStepStart,\n  printStepComplete,\n  printRunComplete,\n  printError,\n  printFailedAt,\n  renderStepLine,\n  renderErrorLine,\n  renderRunSummary,\n} from \"../terminal.js\";\n\nexport {\n  createRunId,\n  createStepId,\n  formatDuration,\n  formatTimestamp,\n  getDefaultTraceDir,\n  getTraceFilePath,\n  ensureTraceDir,\n  formatError,\n  truncateName,\n  warn,\n  DEFAULT_TRACE_DIR_NAME,\n  RUNS_DIR_NAME,\n  FALLBACK_TRACE_DIR,\n  MAX_NAME_LENGTH,\n} from \"../utils.js\";\n\nexport type {\n  StepType,\n  StepStatus,\n  RunStatus,\n  ErrorInfo,\n  TokenMetadata,\n  StepMetadata,\n  Run,\n  Step,\n  TraceSchemaVersion,\n  TraceEventBase,\n  RunStartedEvent,\n  RunCompletedEvent,\n  StepStartedEvent,\n  StepCompletedEvent,\n  TraceEvent,\n  TraceMetadataStatus,\n  TraceMetadata,\n  RunSummary,\n  InspectRunOptions,\n  RedactionProfile,\n  TraceCorrelationMetadata,\n  StepOptions,\n  ObserveOptions,\n  ExecutionContext,\n  ActiveStepContext,\n} from \"../types.js\";\n\nexport { isTraceEvent, isStepType, isStepStatus } from \"../types.js\";\n\nexport type {\n  AttributionConfidence,\n  InspectKind,\n  EventSource,\n  InspectEvent,\n  InspectNode,\n  InspectRunTree,\n} from \"../types/inspect-event.js\";\n\nexport {\n  ATTRIBUTION_CONFIDENCES,\n  ATTRIBUTION_CONFIDENCE_RANK,\n  isAttributionConfidence,\n} from \"../types/inspect-event.js\";\n\nexport {\n  serializeEvent,\n  validateEvent,\n  initializeTraceFile,\n  writeTraceEvent,\n  readTraceFile,\n  readTraceEvents,\n  listTraceFiles,\n  getRunIdFromTraceFileName,\n} from \"../storage.js\";\n\nexport type {\n  TraceJsonlFormat,\n  ParseTraceJsonlResult,\n  ParseTraceJsonlOptions,\n} from \"../read-trace.js\";\n\nexport { parseTraceJsonl, unknownTraceFormatMessage } from \"../read-trace.js\";\n\nexport type { TraceDirectoryOptions } from \"../trace-directory.js\";\nexport { TraceDirectory, resolveTraceDir } from \"../trace-directory.js\";\n\nexport { extractMetadata, buildRunSummary } from \"../trace-metadata.js\";\n\nexport type { TraceFilterOptions } from \"../trace-filter.js\";\nexport { filterTraces } from \"../trace-filter.js\";\n\nexport type {\n  TimelineFocus,\n  TimelineEntry,\n  RunTimeline,\n  TimelineOptions,\n  RenderTimelineOptions,\n} from \"../timeline.js\";\nexport { buildRunTimeline, renderTimeline } from \"../timeline.js\";\n\nexport type { RunWhatSummary, RenderWhatOptions } from \"../what.js\";\nexport { buildRunWhatSummary, renderRunWhat } from \"../what.js\";\n\nexport type {\n  CausalContractFindingInput,\n  CausalFailureKind,\n  FindFirstCausalFailureOptions,\n  FirstCausalFailure,\n} from \"../causal-failure.js\";\nexport { findFirstCausalFailure } from \"../causal-failure.js\";\n\nexport type {\n  ExplainFact,\n  ExplainInference,\n  ExplainMode,\n  ExplainOptions,\n  ExplainResult,\n} from \"../explain.js\";\nexport { buildLocalExplanation } from \"../explain.js\";\n\nexport type {\n  DurationStats,\n  TraceStatsRankedRun,\n  TraceStatsRankedStep,\n  TraceStats,\n  TraceStatsOptions,\n} from \"../stats.js\";\nexport { buildTraceStats, formatStepLabel, renderTraceStats } from \"../stats.js\";\n\nexport type {\n  TraceSearchOptions,\n  TraceSearchResult,\n  ParsedDurationFilter,\n} from \"../search.js\";\nexport {\n  parseDurationFilter,\n  searchTraces,\n  loadTraceMetadataList,\n} from \"../search.js\";\n\nexport type {\n  BuildSessionIndexOptions,\n  CriticalPathStep,\n  HandoffEdge,\n  RetryLink,\n  SessionConfidence,\n  SessionEdgeSource,\n  SessionGroup,\n  SessionIndex,\n  SessionLastError,\n  SessionRunRecord,\n  SessionStatus,\n  SessionSummary,\n  SessionCheckSummary,\n  EnrichSessionSummaryOptions,\n  SessionWarning,\n  SessionWorkflowMetadata,\n  SessionWorkflowKey,\n} from \"../sessions/index.js\";\nexport {\n  SESSION_WORKFLOW_KEYS,\n  aggregateSessionCheckResults,\n  buildActivitySummary,\n  buildSessionIndex,\n  deriveSessionStatus,\n  enrichSessionRunRecord,\n  enrichSessionSummary,\n  extractSessionWorkflowMetadata,\n  filterMetasBySessionScope,\n  groupSessionCohorts,\n  loadSessionRunRecords,\n  renderActivitySummaryHuman,\n  sessionKeyForRun,\n  traceMetasToSessionRunRecords,\n} from \"../sessions/index.js\";\nexport type {\n  ActivityEntry,\n  ActivitySummary,\n  BuildActivitySummaryOptions,\n  GroupSessionCohortsOptions,\n  SessionCohort,\n  SessionCohortKind,\n  SessionScopeOptions,\n  SessionScopeResult,\n  TraceSessionCheckResult,\n} from \"../sessions/index.js\";\n\nexport { isAgentInspectTrace } from \"../trace-verification.js\";\n\nexport { parseDuration } from \"../utils/duration.js\";\n\nexport type {\n  BundleCheckResults,\n  BundleCheckRunResult,\n  BundleMetadata,\n  BundlePlaceholderArtifact,\n  BundleRedactionProfile,\n  BundleRedactionReport,\n  BundleRedactionReportRun,\n  BundleResolveOptions,\n  BundleResolveResult,\n  BundleSafeStatus,\n  BundleSafeStatusMetadata,\n} from \"../bundle/index.js\";\nexport {\n  aggregateBundleSafeStatus,\n  buildBundleMetadata,\n  buildBundleSummaryMarkdown,\n  buildPlaceholderArtifact,\n  bundleFailsOnSafety,\n  defaultBundleOutputPath,\n  normalizeBundleOutputPath,\n  sanitizeBundleRunId,\n  bundleRunAssetRelativePath,\n  assertBundlePathContained,\n  resolveBundleRunIds,\n  toMetadataSafeStatus,\n} from \"../bundle/index.js\";\n\nexport type {\n  EvidenceCheckContractBinding,\n  EvidenceContractBinding,\n  EvidenceContractBindingSource,\n  EvidenceContractBindingStatus,\n  EvidenceFileEntry,\n  EvidenceFileRole,\n  EvidenceFormatVersion,\n  EvidenceManifest,\n  EvidencePackagedFile,\n  EvidenceRedactionProfile,\n  EvidenceSafeStatus,\n  EvidenceSourceHash,\n  EvidenceVerificationPolicy,\n} from \"../evidence/index.js\";\nexport {\n  EVIDENCE_ASSESSMENT_NOTE,\n  EVIDENCE_CONTRACT_ASSURANCE_NOTE,\n  EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n  EVIDENCE_CONTRACT_PARTIAL_NOTE,\n  EVIDENCE_CONTRACT_UNAVAILABLE_NOTE,\n  EVIDENCE_FORMAT_VERSION,\n  EVIDENCE_HTML_FILENAME,\n  EVIDENCE_MANIFEST_FILENAME,\n  EVIDENCE_RESOLVED_CONTRACT_FILENAME,\n  EVIDENCE_VIEW_CSS,\n  EVIDENCE_VIEW_IDS,\n  assertEvidenceRelativePath,\n  bindCheckResultsToContract,\n  buildEvidenceCausalFailureViewHtml,\n  buildEvidenceCircuitViewHtml,\n  buildEvidenceContractPackage,\n  buildEvidenceContractsViewHtml,\n  buildEvidenceDiffViewHtml,\n  buildEvidenceFileEntries,\n  buildEvidenceHtmlShell,\n  buildEvidenceHtmlShellFromManifest,\n  buildEvidenceManifest,\n  buildEvidenceOutcomesViewHtml,\n  buildEvidenceProvenanceViewHtml,\n  buildEvidenceSafetyViewHtml,\n  buildEvidenceTimelineViewHtml,\n  buildEvidenceToolsLlmViewHtml,\n  buildEvidenceTreeViewHtml,\n  buildZipArchive,\n  buildEvidenceCiPackage,\n  collectResolvedContractRuleIds,\n  collectTraceSchemaVersions,\n  encodeEmbeddedEvidenceJson,\n  inferEvidenceFileRole,\n  isSha256Hex,\n  parseEvidenceManifestJson,\n  readCheckResultsContractBinding,\n  resolveSerializableTraceContract,\n  serializeCanonicalJson,\n  serializeCheckResultsJson,\n  serializeEvidenceManifest,\n  sha256Equals,\n  sha256Hex,\n  validateEvidenceManifest,\n  verifyEvidenceContractBinding,\n  verifyEvidenceDirectory,\n} from \"../evidence/index.js\";\nexport type {\n  BuildEvidenceContractPackageInput,\n  EvidenceCheckFindingSummary,\n  EvidenceCiPackageFiles,\n  EvidenceCiPackageInput,\n  EvidenceContractPackage,\n  EvidenceContractVerifyIssue,\n  EvidenceContractsViewInput,\n  EvidenceHtmlShellInput,\n  EvidenceProvenanceViewInput,\n  EvidenceSafetyViewInput,\n  EvidenceVerifyIssue,\n  EvidenceVerifyOptions,\n  EvidenceVerifyResult,\n  EvidenceVerifyStatus,\n  EvidenceViewId,\n  ResolvedContractDocument,\n  ZipEntry,\n} from \"../evidence/index.js\";\n\nexport type {\n  LoadSuiteConfigOptions,\n  RenderSuiteReportOptions,\n  RunSuiteOptions,\n  SuiteArtifactsConfig,\n  SuiteCaseConfig,\n  SuiteCaseResult,\n  SuiteCaseStatus,\n  SuiteChecksConfig,\n  SuiteConfig,\n  SuiteDiagnostic,\n  SuiteDiagnosticCode,\n  SuiteEvalConfig,\n  SuiteRunResult,\n  SuiteRunSummary,\n  ValidateSuiteConfigResult,\n  ResolvedSuiteCase,\n} from \"../suite/index.js\";\nexport {\n  DEFAULT_SUITE_ARTIFACTS_DIR,\n  DEFAULT_SUITE_CONFIG_NAMES,\n  defaultSuiteConfigTemplate,\n  loadSuiteConfig,\n  normalizeSuiteConfig,\n  renderSuiteReport,\n  renderSuiteReportMarkdown,\n  resolveSuiteCaseTrace,\n  resolveSuiteConfigPath,\n  runSuite,\n  validateSuiteConfig,\n} from \"../suite/index.js\";\nexport {\n  getSuiteTemplate,\n  listSuiteTemplates,\n  resolveSuiteTemplate,\n  SUITE_TEMPLATE_IDS,\n  type SuiteTemplateId,\n} from \"../suite/templates.js\";\n\nexport type { ObservedOutcome, ObservedOutcomeStatus } from \"../outcomes/types.js\";\nexport {\n  extractOutcomesFromPersistedEvents,\n  extractOutcomesFromTraceEvents,\n} from \"../outcomes/extract.js\";\n\nexport type {\n  AnalyzeCohortOptions,\n  CohortAggregateMetrics,\n  CohortAnalysisResult,\n  CohortMetricComparison,\n  CohortMetricId,\n  CohortRunMetrics,\n  RenderCohortReportOptions,\n} from \"../cohort/index.js\";\nexport {\n  COHORT_METRIC_IDS,\n  analyzeCohort,\n  compareCohortAggregates,\n  parseCohortMetricList,\n  parseGroupBySpec,\n  renderCohortReport,\n  renderCohortSummaryMarkdown,\n} from \"../cohort/index.js\";\n\nexport type {\n  GateCheckId,\n  GateCheckResult,\n  GateExitCode,\n  GateResult,\n  RenderGateReportOptions,\n  RunGateOptions,\n} from \"../gate/index.js\";\nexport {\n  gateHasThresholds,\n  parseGateList,\n  parseGateNumber,\n  renderGateGithubAnnotations,\n  renderGateGithubStepSummary,\n  renderGateJUnit,\n  renderGateReport,\n  renderGateSummaryMarkdown,\n  runGate,\n} from \"../gate/index.js\";\n\nexport { maybeInspectRun, isAgentInspectEnabled } from \"../maybe-inspect-run.js\";\n\nexport type {\n  OmittedPayloadAlgorithm,\n  OmittedPayloadCommitment,\n} from \"../safety/omitted-payload.js\";\nexport {\n  createOmittedPayloadCommitment,\n  omittedPayloadByteLength,\n  OMITTED_PAYLOAD_MAX_DIGEST_INPUT_BYTES,\n} from \"../safety/omitted-payload.js\";\n","/**\n * Public types for the optional local SQLite trace index (v4.1, experimental).\n *\n * @remarks\n * Local-only. The index is derived from JSONL traces and is always safe to\n * delete. Trace files are never mutated. No network access.\n */\n\n/** Current index schema version. Bumped when table layout changes. */\nexport const INDEX_SCHEMA_VERSION = \"1\" as const;\n\n/** Default index database filename. */\nexport const INDEX_DB_FILENAME = \"trace-index.sqlite\";\n\n/** A derived run row in the index. */\nexport interface IndexedRun {\n  runId: string;\n  file: string;\n  mtimeMs: number;\n  name: string | null;\n  status: string | null;\n  startedAt: number | null;\n  endedAt: number | null;\n  durationMs: number | null;\n  sessionId: string | null;\n  groupId: string | null;\n  correlationId: string | null;\n}\n\n/** A derived step row in the index. */\nexport interface IndexedStep {\n  runId: string;\n  stepId: string;\n  kind: string | null;\n  name: string | null;\n  status: string | null;\n  durationMs: number | null;\n  toolName: string | null;\n  model: string | null;\n  parentId: string | null;\n}\n\n/** Options for building/rebuilding the index. */\nexport interface BuildIndexOptions {\n  /** Trace directory to index. Resolved via core `resolveTraceDir` when omitted. */\n  traceDir?: string;\n  /** Index database path. Defaults to `<traceDir>/<INDEX_DB_FILENAME>`. */\n  dbPath?: string;\n  /** Cap on the number of trace files indexed (default 10000). */\n  maxRuns?: number;\n}\n\n/** Result of a build/rebuild. */\nexport interface BuildIndexResult {\n  dbPath: string;\n  traceDir: string;\n  runs: number;\n  steps: number;\n  errors: number;\n  builtAt: string;\n  warnings: string[];\n}\n\n/** Status of an existing index. */\nexport interface IndexStatus {\n  dbPath: string;\n  exists: boolean;\n  healthy: boolean;\n  builtAt: string | null;\n  sourceDir: string | null;\n  schemaVersion: string | null;\n  runs: number;\n  steps: number;\n  /** Derived lifecycle: complete, partial, stale, or fallback-scan */\n  refreshStatus?: \"complete\" | \"partial\" | \"stale\" | \"fallback-scan\";\n}\n\n/** Filter for querying indexed runs. */\nexport interface RunQuery {\n  status?: string;\n  sessionId?: string;\n  /** Case-insensitive substring match on run name. */\n  name?: string;\n  /** Match runs that contain a step of this kind. */\n  kind?: string;\n  /** Match runs that contain a step with this tool name (substring). */\n  tool?: string;\n  limit?: number;\n}\n","import { INDEX_SCHEMA_VERSION } from \"./types.js\";\n\n/**\n * Idempotent DDL for the local trace index. A full rebuild drops and recreates\n * all tables, so building twice from the same inputs yields identical contents.\n */\nexport const INDEX_SCHEMA_SQL = `\nDROP TABLE IF EXISTS meta;\nDROP TABLE IF EXISTS errors;\nDROP TABLE IF EXISTS steps;\nDROP TABLE IF EXISTS sessions;\nDROP TABLE IF EXISTS runs;\n\nCREATE TABLE meta (\n  key TEXT PRIMARY KEY,\n  value TEXT\n);\n\nCREATE TABLE runs (\n  run_id TEXT PRIMARY KEY,\n  file TEXT NOT NULL,\n  mtime_ms REAL NOT NULL,\n  name TEXT,\n  status TEXT,\n  started_at REAL,\n  ended_at REAL,\n  duration_ms REAL,\n  session_id TEXT,\n  group_id TEXT,\n  correlation_id TEXT\n);\n\nCREATE TABLE steps (\n  id INTEGER PRIMARY KEY AUTOINCREMENT,\n  run_id TEXT NOT NULL,\n  step_id TEXT NOT NULL,\n  kind TEXT,\n  name TEXT,\n  status TEXT,\n  duration_ms REAL,\n  tool_name TEXT,\n  model TEXT,\n  parent_id TEXT\n);\n\nCREATE TABLE errors (\n  id INTEGER PRIMARY KEY AUTOINCREMENT,\n  run_id TEXT NOT NULL,\n  step_id TEXT,\n  message TEXT,\n  code TEXT\n);\n\nCREATE TABLE sessions (\n  session_id TEXT PRIMARY KEY,\n  run_count INTEGER NOT NULL,\n  first_started_at REAL,\n  last_ended_at REAL\n);\n\nCREATE INDEX idx_runs_status ON runs(status);\nCREATE INDEX idx_runs_session ON runs(session_id);\nCREATE INDEX idx_runs_started ON runs(started_at);\nCREATE INDEX idx_steps_run ON steps(run_id);\nCREATE INDEX idx_steps_kind ON steps(kind);\nCREATE INDEX idx_steps_tool ON steps(tool_name);\n`;\n\n/** SQL to derive the sessions table from indexed runs. */\nexport const DERIVE_SESSIONS_SQL = `\nINSERT INTO sessions (session_id, run_count, first_started_at, last_ended_at)\nSELECT session_id, COUNT(*), MIN(started_at), MAX(ended_at)\nFROM runs\nWHERE session_id IS NOT NULL\nGROUP BY session_id;\n`;\n\nexport const META_KEYS = {\n  schemaVersion: \"schemaVersion\",\n  builtAt: \"builtAt\",\n  sourceDir: \"sourceDir\",\n  fileCount: \"fileCount\",\n  driver: \"driver\",\n} as const;\n\nexport function metaDefaults(sourceDir: string, fileCount: number) {\n  return {\n    [META_KEYS.schemaVersion]: INDEX_SCHEMA_VERSION,\n    [META_KEYS.builtAt]: new Date().toISOString(),\n    [META_KEYS.sourceDir]: sourceDir,\n    [META_KEYS.fileCount]: String(fileCount),\n    [META_KEYS.driver]: \"better-sqlite3\",\n  } as Record<string, string>;\n}\n","import { createRequire } from \"node:module\";\n\nimport type BetterSqlite3 from \"better-sqlite3\";\n\nexport type SqliteDatabase = BetterSqlite3.Database;\nexport type SqliteConstructor = typeof BetterSqlite3;\n\nlet cached: SqliteConstructor | undefined;\n\n/**\n * Lazily load better-sqlite3 when index build/query starts.\n * Importing `@agent-inspect/index-sqlite` must not require the native driver.\n */\nexport function loadBetterSqlite3(): SqliteConstructor {\n  if (cached !== undefined) return cached;\n  try {\n    const require = createRequire(import.meta.url);\n    cached = require(\"better-sqlite3\") as SqliteConstructor;\n    return cached;\n  } catch (error) {\n    const detail = error instanceof Error ? error.message : String(error);\n    throw new Error(\n      `better-sqlite3 native driver is unavailable (${detail}). ` +\n        `Install a prebuild for your Node/OS (see better-sqlite3 docs) or fall back to JSONL directory scans without the SQLite index. ` +\n        `Core agent-inspect remains usable without this optional package.`,\n    );\n  }\n}\n\n/** Test helper — clear the cached constructor between cases. */\nexport function resetBetterSqlite3CacheForTests(): void {\n  cached = undefined;\n}\n","import { mkdir, readFile, rm } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport {\n  TraceDirectory,\n  parseTraceJsonl,\n  resolveTraceDir,\n  validateEvent,\n} from \"agent-inspect/advanced\";\nimport type { TraceEvent } from \"agent-inspect/advanced\";\n\nimport {\n  DERIVE_SESSIONS_SQL,\n  INDEX_SCHEMA_SQL,\n  META_KEYS,\n  metaDefaults,\n} from \"./schema.js\";\nimport { loadBetterSqlite3 } from \"./load-sqlite.js\";\nimport {\n  INDEX_DB_FILENAME,\n  type BuildIndexOptions,\n  type BuildIndexResult,\n  type IndexedRun,\n  type IndexedStep,\n} from \"./types.js\";\n\nconst DEFAULT_MAX_RUNS = 10_000;\n\n/** Resolves the index database path for a trace directory. */\nexport function resolveIndexDbPath(traceDir: string, dbPath?: string): string {\n  if (dbPath && dbPath.trim() !== \"\") return path.resolve(dbPath);\n  return path.join(path.resolve(traceDir), INDEX_DB_FILENAME);\n}\n\nfunction str(value: unknown): string | null {\n  return typeof value === \"string\" && value !== \"\" ? value : null;\n}\n\nfunction num(value: unknown): number | null {\n  return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\ninterface DerivedRun {\n  run: IndexedRun;\n  steps: IndexedStep[];\n  errors: Array<{ stepId: string | null; message: string | null; code: string | null }>;\n}\n\nfunction deriveRun(file: string, mtimeMs: number, events: TraceEvent[]): DerivedRun | null {\n  const started = events.find((e) => e.event === \"run_started\");\n  if (!started || started.event !== \"run_started\") return null;\n\n  const completed = events.find((e) => e.event === \"run_completed\");\n  const metadata = (started.metadata ?? {}) as Record<string, unknown>;\n\n  const run: IndexedRun = {\n    runId: started.runId,\n    file,\n    mtimeMs,\n    name: str(started.name),\n    status: completed && completed.event === \"run_completed\" ? completed.status : null,\n    startedAt: num(started.startTime),\n    endedAt: completed && completed.event === \"run_completed\" ? num(completed.endTime) : null,\n    durationMs:\n      completed && completed.event === \"run_completed\" ? num(completed.durationMs) : null,\n    sessionId: str(metadata.sessionId),\n    groupId: str(metadata.groupId),\n    correlationId: str(metadata.correlationId),\n  };\n\n  const stepStarts = new Map<string, Extract<TraceEvent, { event: \"step_started\" }>>();\n  const steps: IndexedStep[] = [];\n  const errors: DerivedRun[\"errors\"] = [];\n\n  if (completed && completed.event === \"run_completed\" && completed.error) {\n    errors.push({\n      stepId: null,\n      message: str(completed.error.message),\n      code: str((completed.error as { code?: unknown }).code),\n    });\n  }\n\n  for (const event of events) {\n    if (event.event === \"step_started\") {\n      stepStarts.set(event.stepId, event);\n    }\n  }\n\n  for (const event of events) {\n    if (event.event !== \"step_completed\") continue;\n    const start = stepStarts.get(event.stepId);\n    const meta = (start?.metadata ?? {}) as Record<string, unknown>;\n    steps.push({\n      runId: run.runId,\n      stepId: event.stepId,\n      kind: start ? str(start.type) : null,\n      name: start ? str(start.name) : null,\n      status: event.status,\n      durationMs: num(event.durationMs),\n      toolName: str(meta.toolName),\n      model: str(meta.model),\n      parentId: start ? str(start.parentId) : null,\n    });\n    if (event.error) {\n      errors.push({\n        stepId: event.stepId,\n        message: str(event.error.message),\n        code: str((event.error as { code?: unknown }).code),\n      });\n    }\n  }\n\n  return { run, steps, errors };\n}\n\n/**\n * Builds (or fully rebuilds) the local SQLite index from a trace directory.\n * Idempotent: rebuilding from identical inputs yields identical contents.\n * Never mutates trace files.\n */\nexport async function buildIndex(\n  options: BuildIndexOptions = {},\n): Promise<BuildIndexResult> {\n  const traceDir = resolveTraceDir({ dir: options.traceDir });\n  const dbPath = resolveIndexDbPath(traceDir, options.dbPath);\n  const maxRuns = options.maxRuns ?? DEFAULT_MAX_RUNS;\n  const warnings: string[] = [];\n\n  const td = new TraceDirectory({ dir: traceDir });\n  const files = await td.list();\n  if (files.length > maxRuns) {\n    warnings.push(\n      `index.truncated: ${files.length} trace files present; indexing first ${maxRuns}`,\n    );\n  }\n  const slice = files.slice(0, maxRuns);\n\n  const derived: DerivedRun[] = [];\n  for (const file of slice) {\n    try {\n      const raw = await readFile(td.getPath(file), \"utf-8\");\n      const parsed = parseTraceJsonl(raw, { validate: validateEvent });\n      const stats = await td.getFileStats(file);\n      const one = deriveRun(file, stats.mtimeMs, parsed.events);\n      if (one) derived.push(one);\n      else warnings.push(`index.skipped: ${file} has no run_started event`);\n    } catch {\n      warnings.push(`index.unreadable: ${file}`);\n    }\n  }\n\n  await mkdir(path.dirname(dbPath), { recursive: true });\n  // Remove any prior (possibly corrupt) file so the rebuild is deterministic.\n  await rm(dbPath, { force: true });\n\n  const Sqlite = loadBetterSqlite3();\n  const db = new Sqlite(dbPath);\n  let runCount = 0;\n  let stepCount = 0;\n  let errorCount = 0;\n  try {\n    db.pragma(\"journal_mode = WAL\");\n    db.exec(INDEX_SCHEMA_SQL);\n\n    const insertRun = db.prepare(\n      `INSERT INTO runs (run_id, file, mtime_ms, name, status, started_at, ended_at, duration_ms, session_id, group_id, correlation_id)\n       VALUES (@runId, @file, @mtimeMs, @name, @status, @startedAt, @endedAt, @durationMs, @sessionId, @groupId, @correlationId)`,\n    );\n    const insertStep = db.prepare(\n      `INSERT INTO steps (run_id, step_id, kind, name, status, duration_ms, tool_name, model, parent_id)\n       VALUES (@runId, @stepId, @kind, @name, @status, @durationMs, @toolName, @model, @parentId)`,\n    );\n    const insertError = db.prepare(\n      `INSERT INTO errors (run_id, step_id, message, code) VALUES (@runId, @stepId, @message, @code)`,\n    );\n    const insertMeta = db.prepare(`INSERT INTO meta (key, value) VALUES (?, ?)`);\n\n    const write = db.transaction((items: DerivedRun[]) => {\n      const seen = new Set<string>();\n      for (const item of items) {\n        if (seen.has(item.run.runId)) continue;\n        seen.add(item.run.runId);\n        insertRun.run(item.run);\n        runCount += 1;\n        for (const step of item.steps) {\n          insertStep.run(step);\n          stepCount += 1;\n        }\n        for (const err of item.errors) {\n          insertError.run({ runId: item.run.runId, ...err });\n          errorCount += 1;\n        }\n      }\n      db.exec(DERIVE_SESSIONS_SQL);\n      for (const [key, value] of Object.entries(metaDefaults(traceDir, slice.length))) {\n        insertMeta.run(key, value);\n      }\n    });\n    write(derived);\n  } finally {\n    db.close();\n  }\n\n  const builtAtRow = readMetaValue(dbPath, META_KEYS.builtAt);\n\n  return {\n    dbPath,\n    traceDir,\n    runs: runCount,\n    steps: stepCount,\n    errors: errorCount,\n    builtAt: builtAtRow ?? new Date().toISOString(),\n    warnings,\n  };\n}\n\n/** Alias for {@link buildIndex}; a rebuild is a full, idempotent build. */\nexport const rebuildIndex = buildIndex;\n\nfunction readMetaValue(dbPath: string, key: string): string | null {\n  try {\n    const Sqlite = loadBetterSqlite3();\n    const db = new Sqlite(dbPath, { readonly: true, fileMustExist: true });\n    try {\n      const row = db.prepare(`SELECT value FROM meta WHERE key = ?`).get(key) as\n        | { value: string }\n        | undefined;\n      return row?.value ?? null;\n    } finally {\n      db.close();\n    }\n  } catch {\n    return null;\n  }\n}\n\n/** Deletes the index database file. Always safe; traces are unaffected. */\nexport async function cleanIndex(dbPath: string): Promise<void> {\n  await rm(dbPath, { force: true });\n  await rm(`${dbPath}-wal`, { force: true });\n  await rm(`${dbPath}-shm`, { force: true });\n}\n","import { existsSync } from \"node:fs\";\n\nimport type Database from \"better-sqlite3\";\n\nimport { loadBetterSqlite3 } from \"./load-sqlite.js\";\nimport { META_KEYS } from \"./schema.js\";\nimport type { IndexStatus, IndexedRun, RunQuery } from \"./types.js\";\n\ninterface OpenResult {\n  db: Database.Database;\n  healthy: boolean;\n}\n\n/**\n * Opens the index read-only and verifies integrity. Returns `null` when the\n * file is missing, the native driver is unavailable, or integrity fails, so\n * callers can fall back to a full rebuild or a directory scan.\n */\nfunction openHealthy(dbPath: string): OpenResult | null {\n  if (!existsSync(dbPath)) return null;\n  let Sqlite: ReturnType<typeof loadBetterSqlite3>;\n  try {\n    Sqlite = loadBetterSqlite3();\n  } catch {\n    return null;\n  }\n  try {\n    const db = new Sqlite(dbPath, { readonly: true, fileMustExist: true });\n    try {\n      const result = db.pragma(\"integrity_check\", { simple: true });\n      if (result !== \"ok\") {\n        db.close();\n        return null;\n      }\n      // Confirm the expected schema is present.\n      db.prepare(`SELECT 1 FROM meta LIMIT 1`).get();\n      db.prepare(`SELECT 1 FROM runs LIMIT 1`).get();\n      return { db, healthy: true };\n    } catch {\n      db.close();\n      return null;\n    }\n  } catch {\n    return null;\n  }\n}\n\nfunction meta(db: Database.Database, key: string): string | null {\n  const row = db.prepare(`SELECT value FROM meta WHERE key = ?`).get(key) as\n    | { value: string }\n    | undefined;\n  return row?.value ?? null;\n}\n\n/** Reports index presence, health, and basic counts. Never throws. */\nexport function indexStatus(dbPath: string): IndexStatus {\n  const opened = openHealthy(dbPath);\n  if (!opened) {\n    return {\n      dbPath,\n      exists: existsSync(dbPath),\n      healthy: false,\n      builtAt: null,\n      sourceDir: null,\n      schemaVersion: null,\n      runs: 0,\n      steps: 0,\n    };\n  }\n  const { db } = opened;\n  try {\n    const runs = (db.prepare(`SELECT COUNT(*) AS c FROM runs`).get() as { c: number }).c;\n    const steps = (db.prepare(`SELECT COUNT(*) AS c FROM steps`).get() as { c: number }).c;\n    const builtAt = meta(db, META_KEYS.builtAt);\n    const refreshStatus: IndexStatus[\"refreshStatus\"] =\n      runs === 0 ? \"fallback-scan\" : builtAt ? \"complete\" : \"partial\";\n    return {\n      dbPath,\n      exists: true,\n      healthy: true,\n      builtAt,\n      sourceDir: meta(db, META_KEYS.sourceDir),\n      schemaVersion: meta(db, META_KEYS.schemaVersion),\n      runs,\n      steps,\n      refreshStatus,\n    };\n  } finally {\n    db.close();\n  }\n}\n\n/** Returns true when the index is missing, corrupt, or older than any trace. */\nexport function isIndexStale(dbPath: string, newestTraceMtimeMs: number): boolean {\n  const opened = openHealthy(dbPath);\n  if (!opened) return true;\n  try {\n    const builtAt = meta(opened.db, META_KEYS.builtAt);\n    if (!builtAt) return true;\n    const builtMs = Date.parse(builtAt);\n    if (Number.isNaN(builtMs)) return true;\n    return newestTraceMtimeMs > builtMs;\n  } finally {\n    opened.db.close();\n  }\n}\n\nfunction mapRow(row: Record<string, unknown>): IndexedRun {\n  return {\n    runId: row.run_id as string,\n    file: row.file as string,\n    mtimeMs: row.mtime_ms as number,\n    name: (row.name as string | null) ?? null,\n    status: (row.status as string | null) ?? null,\n    startedAt: (row.started_at as number | null) ?? null,\n    endedAt: (row.ended_at as number | null) ?? null,\n    durationMs: (row.duration_ms as number | null) ?? null,\n    sessionId: (row.session_id as string | null) ?? null,\n    groupId: (row.group_id as string | null) ?? null,\n    correlationId: (row.correlation_id as string | null) ?? null,\n  };\n}\n\n/**\n * Queries indexed runs. Returns an empty array when the index is missing or\n * corrupt (the caller should fall back to a directory scan).\n */\nexport function queryRuns(dbPath: string, query: RunQuery = {}): IndexedRun[] {\n  const opened = openHealthy(dbPath);\n  if (!opened) return [];\n  const { db } = opened;\n  try {\n    const where: string[] = [];\n    const params: Record<string, unknown> = {};\n\n    if (query.status) {\n      where.push(`r.status = @status`);\n      params.status = query.status;\n    }\n    if (query.sessionId) {\n      where.push(`r.session_id = @sessionId`);\n      params.sessionId = query.sessionId;\n    }\n    if (query.name) {\n      where.push(`LOWER(r.name) LIKE @name`);\n      params.name = `%${query.name.toLowerCase()}%`;\n    }\n    if (query.kind) {\n      where.push(`EXISTS (SELECT 1 FROM steps s WHERE s.run_id = r.run_id AND s.kind = @kind)`);\n      params.kind = query.kind;\n    }\n    if (query.tool) {\n      where.push(\n        `EXISTS (SELECT 1 FROM steps s WHERE s.run_id = r.run_id AND LOWER(s.tool_name) LIKE @tool)`,\n      );\n      params.tool = `%${query.tool.toLowerCase()}%`;\n    }\n\n    const limit = Number.isInteger(query.limit) && query.limit! > 0 ? query.limit! : 100;\n    const sql = `SELECT r.* FROM runs r ${\n      where.length ? `WHERE ${where.join(\" AND \")}` : \"\"\n    } ORDER BY r.started_at DESC LIMIT ${limit}`;\n\n    const rows = db.prepare(sql).all(params) as Array<Record<string, unknown>>;\n    return rows.map(mapRow);\n  } finally {\n    db.close();\n  }\n}\n","/**\n * `@agent-inspect/index-sqlite` — optional, disposable local SQLite index for\n * faster queries over AgentInspect JSONL traces (v4.1, experimental).\n *\n * @remarks\n * Local-only. The index is derived from JSONL and always safe to delete; trace\n * files are never mutated. No network access. JSONL remains the source of truth.\n */\nexport {\n  INDEX_SCHEMA_VERSION,\n  INDEX_DB_FILENAME,\n  type IndexedRun,\n  type IndexedStep,\n  type BuildIndexOptions,\n  type BuildIndexResult,\n  type IndexStatus,\n  type RunQuery,\n} from \"./types.js\";\n\nexport {\n  buildIndex,\n  rebuildIndex,\n  cleanIndex,\n  resolveIndexDbPath,\n} from \"./builder.js\";\n\nexport { indexStatus, isIndexStale, queryRuns } from \"./query.js\";\n","{\n  \"name\": \"agent-inspect\",\n  \"version\": \"6.31.7\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"description\": \"Local evidence debugger and trajectory-test toolkit for TypeScript AI agents — execution trees, TraceContract checks, Evidence v2, and read-only MCP\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/rajudandigam/agent-inspect.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/rajudandigam/agent-inspect/issues\"\n  },\n  \"homepage\": \"https://agentinspect.vercel.app\",\n  \"packageManager\": \"pnpm@9.15.0\",\n  \"main\": \"./packages/core/dist/index.cjs\",\n  \"module\": \"./packages/core/dist/index.mjs\",\n  \"types\": \"./packages/core/dist/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"import\": {\n        \"types\": \"./packages/core/dist/index.d.ts\",\n        \"default\": \"./packages/core/dist/index.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./packages/core/dist/index.d.cts\",\n        \"default\": \"./packages/core/dist/index.cjs\"\n      }\n    },\n    \"./advanced\": {\n      \"import\": {\n        \"types\": \"./packages/core/dist/advanced.d.ts\",\n        \"default\": \"./packages/core/dist/advanced.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./packages/core/dist/advanced.d.cts\",\n        \"default\": \"./packages/core/dist/advanced.cjs\"\n      }\n    },\n    \"./persisted\": {\n      \"import\": {\n        \"types\": \"./packages/core/dist/persisted.d.ts\",\n        \"default\": \"./packages/core/dist/persisted.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./packages/core/dist/persisted.d.cts\",\n        \"default\": \"./packages/core/dist/persisted.cjs\"\n      }\n    },\n    \"./logs\": {\n      \"import\": {\n        \"types\": \"./packages/core/dist/logs.d.ts\",\n        \"default\": \"./packages/core/dist/logs.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./packages/core/dist/logs.d.cts\",\n        \"default\": \"./packages/core/dist/logs.cjs\"\n      }\n    },\n    \"./exporters\": {\n      \"import\": {\n        \"types\": \"./packages/core/dist/exporters.d.ts\",\n        \"default\": \"./packages/core/dist/exporters.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./packages/core/dist/exporters.d.cts\",\n        \"default\": \"./packages/core/dist/exporters.cjs\"\n      }\n    },\n    \"./diff\": {\n      \"import\": {\n        \"types\": \"./packages/core/dist/diff.d.ts\",\n        \"default\": \"./packages/core/dist/diff.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./packages/core/dist/diff.d.cts\",\n        \"default\": \"./packages/core/dist/diff.cjs\"\n      }\n    },\n    \"./writers\": {\n      \"import\": {\n        \"types\": \"./packages/core/dist/writers.d.ts\",\n        \"default\": \"./packages/core/dist/writers.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./packages/core/dist/writers.d.cts\",\n        \"default\": \"./packages/core/dist/writers.cjs\"\n      }\n    },\n    \"./readers\": {\n      \"import\": {\n        \"types\": \"./packages/core/dist/readers.d.ts\",\n        \"default\": \"./packages/core/dist/readers.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./packages/core/dist/readers.d.cts\",\n        \"default\": \"./packages/core/dist/readers.cjs\"\n      }\n    },\n    \"./checks\": {\n      \"import\": {\n        \"types\": \"./packages/core/dist/checks.d.ts\",\n        \"default\": \"./packages/core/dist/checks.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./packages/core/dist/checks.d.cts\",\n        \"default\": \"./packages/core/dist/checks.cjs\"\n      }\n    },\n    \"./reporters\": {\n      \"import\": {\n        \"types\": \"./packages/core/dist/reporters.d.ts\",\n        \"default\": \"./packages/core/dist/reporters.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./packages/core/dist/reporters.d.cts\",\n        \"default\": \"./packages/core/dist/reporters.cjs\"\n      }\n    },\n    \"./workspace\": {\n      \"import\": {\n        \"types\": \"./packages/core/dist/workspace.d.ts\",\n        \"default\": \"./packages/core/dist/workspace.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./packages/core/dist/workspace.d.cts\",\n        \"default\": \"./packages/core/dist/workspace.cjs\"\n      }\n    }\n  },\n  \"bin\": {\n    \"agent-inspect\": \"packages/cli/dist/index.cjs\"\n  },\n  \"files\": [\n    \"packages/core/dist\",\n    \"packages/cli/dist\",\n    \"README.md\",\n    \"LICENSE\",\n    \"SECURITY.md\",\n    \"CHANGELOG.md\",\n    \"docs/GETTING-STARTED.md\",\n    \"docs/ADOPTION.md\",\n    \"docs/API.md\",\n    \"docs/CLI.md\",\n    \"docs/SCHEMA.md\",\n    \"docs/LIMITATIONS.md\",\n    \"docs/KNOWN-ISSUES.md\",\n    \"docs/MIGRATION.md\",\n    \"docs/ARCHITECTURE.md\",\n    \"docs/LOGS.md\",\n    \"docs/EXPORTS.md\",\n    \"docs/DIFF.md\",\n    \"docs/ADAPTERS.md\",\n    \"docs/ADAPTER-CONFORMANCE.md\",\n    \"docs/COMPARE.md\",\n    \"docs/RUN-COMPARABILITY.md\",\n    \"docs/LOG-TO-TREE-QUICKSTART.md\",\n    \"docs/SCREENSHOTS.md\",\n    \"docs/SAFE-TRACE-SHARING.md\",\n    \"docs/CI-ARTIFACTS.md\",\n    \"docs/PERFORMANCE.md\",\n    \"docs/FIRST-TRACE-IN-5-MINUTES.md\",\n    \"docs/USE-CASES.md\",\n    \"docs/TEAM-WORKFLOWS.md\",\n    \"docs/DESIGN-PARTNER-GUIDE.md\",\n    \"docs/DEMO-SCRIPT.md\",\n    \"docs/TECHNICAL-GUIDE.md\",\n    \"docs/WORKSPACE.md\",\n    \"docs/SELF-HOSTING.md\",\n    \"docs/STANDARDS.md\",\n    \"docs/BUNDLES.md\",\n    \"docs/INDEX.md\",\n    \"docs/SUPPORT-LEVELS.md\",\n    \"docs/NETWORK-BEHAVIOR.md\",\n    \"docs/TRACE-CONTRACTS.md\",\n    \"docs/SUITES-COHORTS-GATES.md\",\n    \"docs/SESSIONS-AND-OUTCOMES.md\",\n    \"docs/GOLDEN-PATH.md\",\n    \"docs/PRE-V7-PILOT-KIT.md\",\n    \"docs/AI-SDK-ADOPTION.md\",\n    \"docs/OPENAI-AGENTS-LOCAL.md\",\n    \"docs/NESTJS.md\",\n    \"docs/VSCODE.md\",\n    \"docs/assets/agent-inspect-logo.svg\",\n    \"docs/assets/agent-inspect-logo-dark.svg\",\n    \"docs/assets/agent-inspect-logo-mark.svg\",\n    \"docs/assets/readme-product-loop.svg\"\n  ],\n  \"sideEffects\": false,\n  \"keywords\": [\n    \"ai\",\n    \"agents\",\n    \"typescript\",\n    \"debugging\",\n    \"trajectory-testing\",\n    \"langgraph\",\n    \"langchain\",\n    \"tracecontract\",\n    \"tracefacts\",\n    \"evidence\",\n    \"mcp\",\n    \"llm\",\n    \"devtools\",\n    \"jsonl\",\n    \"cli\",\n    \"local-first\"\n  ],\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"engines\": {\n    \"node\": \">=20\"\n  },\n  \"dependencies\": {\n    \"chalk\": \"^5.3.0\",\n    \"nanoid\": \"^5.1.16\",\n    \"commander\": \"^12.1.0\"\n  },\n  \"scripts\": {\n    \"clean\": \"pnpm -r exec -- node -e \\\"require('node:fs').rmSync('dist',{recursive:true,force:true})\\\"\",\n    \"build\": \"pnpm exec tsup --config tsup.core.config.ts && pnpm exec tsup --config tsup.cli.config.ts && pnpm exec tsup --config tsup.langchain.config.ts && pnpm exec tsup --config tsup.tui.config.ts && pnpm exec tsup --config tsup.ai-sdk.config.ts && pnpm exec tsup --config tsup.vitest.config.ts && pnpm exec tsup --config tsup.jest.config.ts && pnpm exec tsup --config tsup.openai-agents.config.ts && pnpm exec tsup --config tsup.harness.config.ts && pnpm exec tsup --config tsup.redact.config.ts && pnpm exec tsup --config tsup.eval.config.ts && pnpm exec tsup --config tsup.mcp.config.ts && pnpm exec tsup --config tsup.guardrails.config.ts && pnpm exec tsup --config tsup.circuit.config.ts && pnpm exec tsup --config tsup.viewer.config.ts && pnpm exec tsup --config tsup.mcp-server.config.ts && pnpm exec tsup --config tsup.adapter-sdk.config.ts && pnpm exec tsup --config tsup.vscode.config.ts && pnpm exec tsup --config tsup.index-sqlite.config.ts && pnpm exec tsup --config tsup.studio.config.ts\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\",\n    \"test:coverage\": \"vitest run --coverage\",\n    \"size\": \"size-limit --config size-limit.config.mjs\",\n    \"test:all\": \"pnpm run typecheck && pnpm run linked-versions:check && pnpm run build && pnpm run test && pnpm run size\",\n    \"prepublish:checks\": \"pnpm run typecheck && pnpm run build && pnpm run test && pnpm run test:coverage && pnpm run fixtures:check && pnpm run recipes:check && pnpm run size && pnpm run linked-versions:check && pnpm run repo:health && pnpm run pack:smoke\",\n    \"prepublishOnly\": \"node ./scripts/prepublish-only.mjs\",\n    \"prepack\": \"pnpm run build\",\n    \"pack:dry-run\": \"pnpm run build && npm pack --dry-run\",\n    \"pack:smoke\": \"pnpm run package-licenses:check && pnpm run build && node scripts/package-smoke.mjs && node scripts/packed-openai-agents-e2e.mjs && node scripts/packed-ai-sdk-e2e.mjs && node scripts/packed-mcp-e2e.mjs && node scripts/packed-quickstart-e2e.mjs && node scripts/packed-semantic-loop-e2e.mjs && node scripts/packed-swarm-loop-e2e.mjs && node scripts/evidence-ci-golden-paths.mjs\",\n    \"linked-versions:check\": \"node scripts/check-linked-versions.mjs\",\n    \"docs:commands\": \"node scripts/validate-doc-commands.mjs\",\n    \"docs:links\": \"node scripts/validate-doc-links.mjs\",\n    \"public-truth:sync\": \"node scripts/sync-public-truth.mjs\",\n    \"public-truth:check\": \"node scripts/validate-public-truth.mjs\",\n    \"ai-assets:check\": \"node scripts/validate-ai-assets.mjs\",\n    \"package-readmes:check\": \"node scripts/validate-package-readmes.mjs\",\n    \"actions:check\": \"node scripts/check-github-actions-pins.mjs\",\n    \"docs:check\": \"pnpm run docs:commands && pnpm run docs:links && pnpm run public-truth:check && pnpm run ai-assets:check && pnpm run package-readmes:check && pnpm run package-licenses:check && pnpm run build:cli && pnpm run demo-version-sync:check && pnpm run repo:health && pnpm run actions:check && pnpm run demo:verify\",\n    \"build:cli\": \"pnpm exec tsup --config tsup.cli.config.ts\",\n    \"repo:health\": \"node scripts/validate-repo-health.mjs\",\n    \"demo:generate\": \"node scripts/demo-generate.mjs\",\n    \"demo:verify\": \"node scripts/demo-verify.mjs\",\n    \"compat:smoke\": \"node scripts/compat-smoke.mjs\",\n    \"compat:ai-sdk-matrix\": \"node scripts/ai-sdk-peer-matrix.mjs\",\n    \"fixtures:check\": \"node scripts/validate-fixtures.mjs\",\n    \"recipes:check\": \"node scripts/validate-recipes.mjs\",\n    \"perf:baseline\": \"node scripts/performance-baseline.mjs\",\n    \"examples:check\": \"pnpm install && pnpm --filter agent-inspect-example-01-basic run start\",\n    \"changeset\": \"changeset\",\n    \"version:packages\": \"changeset version && pnpm public-truth:sync && pnpm build && pnpm demo:generate && pnpm public-truth:check && pnpm demo:verify && pnpm package-licenses:check\",\n    \"release\": \"changeset publish\",\n    \"website:dev\": \"pnpm --filter @agent-inspect/website dev\",\n    \"website:build\": \"pnpm --filter @agent-inspect/website build\",\n    \"website:typecheck\": \"pnpm --filter @agent-inspect/website typecheck\",\n    \"website:check\": \"pnpm --filter @agent-inspect/website check\",\n    \"website:crawl\": \"pnpm --filter @agent-inspect/website crawl\",\n    \"package-licenses:check\": \"node scripts/validate-package-licenses.mjs\",\n    \"package-licenses:sync\": \"node scripts/sync-package-licenses.mjs\",\n    \"demo-version-sync:check\": \"node scripts/check-demo-version-sync.mjs\"\n  },\n  \"devDependencies\": {\n    \"@changesets/cli\": \"^2.27.10\",\n    \"@size-limit/preset-small-lib\": \"^11.1.6\",\n    \"@types/node\": \"^22.10.2\",\n    \"@vitest/coverage-v8\": \"^3.2.7\",\n    \"size-limit\": \"^11.1.6\",\n    \"tsup\": \"^8.3.5\",\n    \"typescript\": \"^5.7.2\",\n    \"vitest\": \"^3.2.7\"\n  },\n  \"pnpm\": {\n    \"overrides\": {\n      \"vite\": \"6.4.3\",\n      \"nanoid@^3.0.0\": \"3.3.18\",\n      \"brace-expansion@^1.0.0\": \"1.1.18\",\n      \"brace-expansion@^2.0.0\": \"2.1.4\",\n      \"ws@^8.0.0\": \"8.21.0\",\n      \"sharp\": \"0.35.4\",\n      \"fast-uri@^3.0.0\": \"3.1.7\",\n      \"ip-address@^10.0.0\": \"10.7.0\",\n      \"postcss\": \"8.5.26\"\n    }\n  }\n}\n","import {\n  formatDuration,\n  formatTimestamp,\n  truncateName,\n  TraceDirectory,\n  extractMetadata,\n  filterTraces,\n  parseDuration,\n  resolveTraceDir,\n  type TraceMetadata,\n  type TraceMetadataStatus,\n} from \"@agent-inspect/core/advanced\";\n\nimport { assessTraceDirectoryScale, emitScaleWarnings } from \"./trace-dir-scale.js\";\n\nexport interface ListOptions {\n  dir?: string;\n  limit?: string;\n  status?: TraceMetadataStatus;\n  name?: string;\n  since?: string;\n  json?: boolean;\n}\n\nfunction parseLimit(raw?: string): number {\n  const fallback = 20;\n  if (raw === undefined || raw.trim() === \"\") return fallback;\n  const n = Number.parseInt(raw, 10);\n  if (!Number.isFinite(n) || n <= 0) return fallback;\n  return Math.min(n, 100);\n}\n\nfunction statusIcon(status: TraceMetadataStatus): string {\n  if (status === \"success\") return \"✓\";\n  if (status === \"error\") return \"✗\";\n  if (status === \"running\") return \"⏳\";\n  return \"?\";\n}\n\nfunction durationCell(status: TraceMetadataStatus, durationMs?: number): string {\n  if (status === \"running\" || status === \"unknown\") return \"-\";\n  if (durationMs !== undefined && Number.isFinite(durationMs)) {\n    return formatDuration(durationMs);\n  }\n  return \"-\";\n}\n\nfunction timestampCell(startedAt?: number, createdAt?: Date): string {\n  const t =\n    typeof startedAt === \"number\" && Number.isFinite(startedAt) && startedAt > 0\n      ? startedAt\n      : createdAt instanceof Date\n        ? createdAt.getTime()\n        : NaN;\n  const s = formatTimestamp(t);\n  return s === \"Invalid date\" ? \"Invalid date\" : s;\n}\n\n/**\n * Prints a table of recent runs under the trace directory. Swallows expected I/O issues;\n * unexpected failures set `process.exitCode` and log a short message (no `process.exit`).\n */\nexport async function list(options: ListOptions = {}): Promise<void> {\n  try {\n    const traceDir = resolveTraceDir({ dir: options.dir });\n    const td = new TraceDirectory({ dir: traceDir });\n\n    // Validate filters early so invalid input fails even when no traces exist.\n    if (typeof options.since === \"string\" && options.since.trim() !== \"\") {\n      parseDuration(options.since.trim());\n    }\n\n    const files = await td.list();\n    const scale = await assessTraceDirectoryScale(td);\n    emitScaleWarnings(scale, { json: options.json });\n    if (files.length === 0) {\n      if (options.json) {\n        console.log(\"[]\");\n      } else {\n        console.log(\"No AgentInspect runs found\");\n        console.log(`Trace directory: ${traceDir}`);\n      }\n      return;\n    }\n\n    const metas: TraceMetadata[] = [];\n    for (const fileName of files) {\n      try {\n        const filePath = td.getPath(fileName);\n        const meta = await extractMetadata(filePath);\n        metas.push(meta);\n      } catch {\n        /* skip malformed */\n      }\n    }\n\n    if (metas.length === 0) {\n      if (options.json) {\n        console.log(\"[]\");\n      } else {\n        console.log(\"No AgentInspect runs found\");\n        console.log(`Trace directory: ${traceDir}`);\n      }\n      return;\n    }\n\n    const limit = parseLimit(options.limit);\n    // Filter without a limit so the summary reports how many runs matched;\n    // the limit only bounds the rows shown.\n    const filtered = filterTraces(metas, {\n      status: options.status,\n      name: options.name,\n      since: options.since,\n    });\n    const shown = filtered.slice(0, limit);\n\n    if (options.json) {\n      console.log(JSON.stringify(shown, null, 2));\n      return;\n    }\n\n    console.log(\"Recent AgentInspect Runs\");\n    for (const s of shown) {\n      const icon = statusIcon(s.status);\n      const dur = durationCell(s.status, s.durationMs);\n      const ts = timestampCell(s.startedAt, s.createdAt);\n      const nm = truncateName(s.name ?? \"unnamed\", 80);\n      console.log(`${icon} ${s.runId} | ${nm} | ${dur} | ${ts}`);\n    }\n\n    console.log(\"\");\n    console.log(`Showing ${shown.length} of ${filtered.length} runs`);\n    console.log(`Trace directory: ${traceDir}`);\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] list failed: ${msg}`);\n    process.exitCode = 1;\n  }\n}\n","import type { TraceDirectory } from \"@agent-inspect/core/advanced\";\n\n/** Documented in docs/SCALE-LIMITS.md — warn before expensive directory scans. */\nexport const TRACE_COUNT_WARN = 1_000;\nexport const TRACE_COUNT_SEVERE = 10_000;\nexport const LARGE_TRACE_FILE_BYTES = 50 * 1024 * 1024;\n\nexport interface TraceDirScaleAssessment {\n  traceCount: number;\n  largeFileCount: number;\n  warnings: string[];\n}\n\nexport function buildScaleWarnings(traceCount: number, largeFileCount: number): string[] {\n  const warnings: string[] = [];\n  if (traceCount >= TRACE_COUNT_SEVERE) {\n    warnings.push(\n      `trace directory has ${traceCount} runs (>= ${TRACE_COUNT_SEVERE}); archive or split traces — see docs/SCALE-LIMITS.md`,\n    );\n  } else if (traceCount >= TRACE_COUNT_WARN) {\n    warnings.push(\n      `trace directory has ${traceCount} runs (>= ${TRACE_COUNT_WARN}); list/search/stats may be slow — consider agent-inspect index build`,\n    );\n  }\n  if (largeFileCount > 0) {\n    warnings.push(\n      `${largeFileCount} trace file(s) exceed ${Math.round(LARGE_TRACE_FILE_BYTES / (1024 * 1024))}MB; open/check/report may be slow`,\n    );\n  }\n  return warnings;\n}\n\nexport async function assessTraceDirectoryScale(\n  td: TraceDirectory,\n  options: { sampleLargeFiles?: number } = {},\n): Promise<TraceDirScaleAssessment> {\n  const files = await td.list();\n  const sample = options.sampleLargeFiles ?? 25;\n  let largeFileCount = 0;\n\n  if (files.length > 0 && files.length <= sample * 4) {\n    for (const file of files) {\n      try {\n        const stats = await td.getFileStats(file);\n        if (stats.size >= LARGE_TRACE_FILE_BYTES) largeFileCount += 1;\n      } catch {\n        /* skip */\n      }\n    }\n  } else if (files.length > sample) {\n    for (const file of files.slice(0, sample)) {\n      try {\n        const stats = await td.getFileStats(file);\n        if (stats.size >= LARGE_TRACE_FILE_BYTES) largeFileCount += 1;\n      } catch {\n        /* skip */\n      }\n    }\n    if (largeFileCount > 0) {\n      largeFileCount = Math.max(largeFileCount, 1);\n    }\n  }\n\n  const warnings = buildScaleWarnings(files.length, largeFileCount);\n  return { traceCount: files.length, largeFileCount, warnings };\n}\n\nexport function emitScaleWarnings(\n  assessment: TraceDirScaleAssessment,\n  options: { json?: boolean } = {},\n): void {\n  if (options.json || assessment.warnings.length === 0) return;\n  for (const warning of assessment.warnings) {\n    console.error(`[AgentInspect] warning: ${warning}`);\n  }\n}\n","import { unlink } from \"node:fs/promises\";\nimport { stdin as input, stdout as output } from \"node:process\";\n\nimport {\n  TraceDirectory,\n  extractMetadata,\n  isAgentInspectTrace,\n  parseDuration,\n  resolveTraceDir,\n  type TraceMetadata,\n} from \"@agent-inspect/core/advanced\";\n\nexport interface CleanOptions {\n  dir?: string;\n  olderThan?: string;\n  keep?: string;\n  dryRun?: boolean;\n  yes?: boolean;\n}\n\nconst DECIMAL_INTEGER_PATTERN = /^\\d+$/;\n\nfunction parseKeep(raw?: string): number {\n  const trimmed = typeof raw === \"string\" ? raw.trim() : \"\";\n  if (!DECIMAL_INTEGER_PATTERN.test(trimmed)) {\n    throw new Error(`Invalid --keep value: ${raw}. Provide a positive integer.`);\n  }\n  const n = Number(trimmed);\n  if (!Number.isSafeInteger(n) || n <= 0) {\n    throw new Error(`Invalid --keep value: ${raw}. Provide a positive integer.`);\n  }\n  return n;\n}\n\nfunction basisTimeMs(meta: TraceMetadata): number {\n  const started = typeof meta.startedAt === \"number\" ? meta.startedAt : undefined;\n  const t = started ?? meta.createdAt.getTime();\n  return Number.isFinite(t) ? t : 0;\n}\n\nfunction stableSortNewestFirst(a: TraceMetadata, b: TraceMetadata): number {\n  const dt = basisTimeMs(b) - basisTimeMs(a);\n  if (dt !== 0) return dt;\n  return a.runId.localeCompare(b.runId);\n}\n\nasync function confirmDeletion(count: number): Promise<boolean> {\n  const { createInterface } = await import(\"node:readline/promises\");\n  const rl = createInterface({ input, output });\n  try {\n    const answer = await rl.question(\n      `Delete ${count} AgentInspect trace file(s)? Type \"yes\" to continue: `,\n    );\n    return answer.trim() === \"yes\";\n  } finally {\n    rl.close();\n  }\n}\n\nexport async function clean(options: CleanOptions = {}): Promise<void> {\n  try {\n    const hasOlder = typeof options.olderThan === \"string\" && options.olderThan.trim() !== \"\";\n    const hasKeep = typeof options.keep === \"string\" && options.keep.trim() !== \"\";\n\n    if (!hasOlder && !hasKeep) {\n      console.error('clean requires either --older-than <duration> or --keep <count>');\n      process.exitCode = 1;\n      return;\n    }\n    if (hasOlder && hasKeep) {\n      console.error(\"Use either --older-than or --keep (not both).\");\n      process.exitCode = 1;\n      return;\n    }\n\n    // Validate inputs early (even when trace dir is empty).\n    if (hasOlder) {\n      parseDuration(options.olderThan!.trim());\n    }\n    if (hasKeep) {\n      parseKeep(options.keep);\n    }\n\n    const traceDir = resolveTraceDir({ dir: options.dir });\n    const td = new TraceDirectory({ dir: traceDir });\n    const files = await td.list();\n    if (files.length === 0) {\n      console.log(\"No runs to clean.\");\n      console.log(`Trace directory: ${traceDir}`);\n      return;\n    }\n\n    const verified: TraceMetadata[] = [];\n    const skipped: string[] = [];\n\n    for (const fileName of files) {\n      const filePath = td.getPath(fileName);\n      const ok = await isAgentInspectTrace(filePath);\n      if (!ok) {\n        skipped.push(fileName);\n        continue;\n      }\n      try {\n        verified.push(await extractMetadata(filePath));\n      } catch {\n        // If we cannot extract metadata, do not delete (safety).\n        skipped.push(fileName);\n      }\n    }\n\n    if (verified.length === 0) {\n      console.log(\"No runs to clean.\");\n      console.log(`Trace directory: ${traceDir}`);\n      if (skipped.length > 0) {\n        console.log(\"\");\n        console.log(`Skipped ${skipped.length} non-AgentInspect file(s).`);\n      }\n      return;\n    }\n\n    let toDelete: TraceMetadata[] = [];\n\n    if (hasOlder) {\n      const windowMs = parseDuration(options.olderThan!.trim());\n      const cutoff = Date.now() - windowMs;\n      toDelete = verified.filter((m) => basisTimeMs(m) < cutoff).sort(stableSortNewestFirst);\n    } else {\n      const keepN = parseKeep(options.keep);\n      const sorted = [...verified].sort(stableSortNewestFirst);\n      toDelete = sorted.slice(keepN);\n    }\n\n    if (toDelete.length === 0) {\n      console.log(\"No runs to clean.\");\n      console.log(`Trace directory: ${traceDir}`);\n      if (skipped.length > 0) {\n        console.log(\"\");\n        console.log(`Skipped ${skipped.length} non-AgentInspect file(s).`);\n      }\n      return;\n    }\n\n    if (options.dryRun) {\n      console.log(`Would delete ${toDelete.length} run(s):`);\n      for (const m of toDelete) {\n        console.log(`- ${m.filePath}`);\n      }\n      if (skipped.length > 0) {\n        console.log(\"\");\n        console.log(`Skipped ${skipped.length} non-AgentInspect file(s).`);\n      }\n      return;\n    }\n\n    if (options.yes !== true) {\n      if (input.isTTY !== true) {\n        console.error(\n          \"Refusing to delete without --yes in a non-interactive terminal.\",\n        );\n        process.exitCode = 1;\n        return;\n      }\n      const ok = await confirmDeletion(toDelete.length);\n      if (!ok) {\n        console.log(\"Cancelled.\");\n        return;\n      }\n    }\n\n    let deleted = 0;\n    for (const m of toDelete) {\n      const ok = await isAgentInspectTrace(m.filePath);\n      if (!ok) {\n        skipped.push(m.filePath);\n        continue;\n      }\n      try {\n        await unlink(m.filePath);\n        deleted += 1;\n      } catch {\n        // ignore per-file failure; keep deterministic count\n      }\n    }\n\n    console.log(`Deleted ${deleted} run(s).`);\n    console.log(`Trace directory: ${traceDir}`);\n    if (skipped.length > 0) {\n      console.log(\"\");\n      console.log(`Skipped ${skipped.length} non-AgentInspect file(s).`);\n    }\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] clean failed: ${msg}`);\n    process.exitCode = 1;\n  }\n}\n","import {\n  formatDuration,\n  formatTimestamp,\n  getIndent,\n  getTraceFilePath,\n  renderErrorLine,\n  renderStepLine,\n  buildRunSummary,\n  extractMetadata,\n  resolveTraceDir,\n} from \"@agent-inspect/core/advanced\";\n\nimport { readRunTraceEvents } from \"./read-run.js\";\n\nimport type {\n  ErrorInfo,\n  RunCompletedEvent,\n  RunStartedEvent,\n  RunStatus,\n  RunSummary,\n  TraceMetadata,\n  StepCompletedEvent,\n  StepStartedEvent,\n  StepMetadata,\n  StepStatus,\n  StepType,\n  TraceEvent,\n} from \"@agent-inspect/core/advanced\";\n\nexport interface ViewOptions {\n  dir?: string;\n  summary?: boolean;\n  metadata?: boolean;\n  errorsOnly?: boolean;\n  verbose?: boolean;\n  json?: boolean;\n  /** Optional interactive TUI (requires @agent-inspect/tui installed). */\n  tui?: boolean;\n}\n\nfunction isModuleNotFound(e: unknown): boolean {\n  return (\n    e !== null &&\n    typeof e === \"object\" &&\n    \"code\" in e &&\n    (e as NodeJS.ErrnoException).code === \"ERR_MODULE_NOT_FOUND\"\n  );\n}\n\ntype StepNode = {\n  id: string;\n  parentId?: string;\n  name: string;\n  type: StepType;\n  status: StepStatus;\n  durationMs?: number;\n  error?: ErrorInfo;\n  startedAt: number;\n  metadata?: StepMetadata;\n  children: StepNode[];\n};\n\nfunction buildStepTree(events: TraceEvent[]): StepNode[] {\n  const nodes = new Map<string, StepNode>();\n\n  for (const e of events) {\n    if (e.event === \"step_started\") {\n      const s = e as StepStartedEvent;\n      nodes.set(s.stepId, {\n        id: s.stepId,\n        parentId: s.parentId,\n        name: s.name,\n        type: s.type,\n        status: \"running\",\n        startedAt: s.startTime,\n        metadata: s.metadata,\n        children: [],\n      });\n    }\n  }\n\n  for (const e of events) {\n    if (e.event !== \"step_completed\") continue;\n    const c = e as StepCompletedEvent;\n    const node = nodes.get(c.stepId);\n    if (!node) continue;\n    node.status = c.status;\n    node.durationMs = c.durationMs;\n    node.error = c.error;\n  }\n\n  const roots: StepNode[] = [];\n  for (const n of nodes.values()) {\n    if (n.parentId !== undefined && nodes.has(n.parentId)) {\n      nodes.get(n.parentId)!.children.push(n);\n    } else {\n      roots.push(n);\n    }\n  }\n\n  const sortByStarted = (a: StepNode, b: StepNode) => a.startedAt - b.startedAt;\n  roots.sort(sortByStarted);\n  for (const n of nodes.values()) {\n    n.children.sort(sortByStarted);\n  }\n\n  return roots;\n}\n\nfunction printStepTree(\n  nodes: StepNode[],\n  depth: number,\n  verbose: boolean,\n): void {\n  for (const node of nodes) {\n    console.log(\n      renderStepLine(node.name, node.durationMs, node.status, depth),\n    );\n    if (node.error !== undefined) {\n      if (verbose) {\n        console.log(renderErrorLine(node.error, depth + 1));\n        if (\n          typeof node.error.stack === \"string\" &&\n          node.error.stack.trim() !== \"\"\n        ) {\n          console.log(node.error.stack);\n        }\n      } else {\n        console.log(\n          renderErrorLine({ message: node.error.message }, depth + 1),\n        );\n      }\n    }\n    if (verbose) {\n      console.log(`${getIndent(depth + 1)}type: ${node.type}`);\n      if (\n        node.metadata !== undefined &&\n        Object.keys(node.metadata).length > 0\n      ) {\n        try {\n          console.log(\n            `${getIndent(depth + 1)}metadata: ${JSON.stringify(node.metadata)}`,\n          );\n        } catch {\n          /* ignore */\n        }\n      }\n    }\n    printStepTree(node.children, depth + 1, verbose);\n  }\n}\n\nfunction pickMode(options: ViewOptions): \"summary\" | \"metadata\" | \"errors-only\" | \"tree\" {\n  if (options.summary) return \"summary\";\n  if (options.metadata) return \"metadata\";\n  if (options.errorsOnly) return \"errors-only\";\n  return \"tree\";\n}\n\nfunction printSummary(summary: RunSummary): void {\n  console.log(\"Run Summary\");\n  console.log(`ID: ${summary.runId}`);\n  console.log(`Name: ${summary.name ?? \"unnamed\"}`);\n  console.log(`Status: ${summary.status}`);\n  console.log(\n    `Duration: ${\n      summary.durationMs !== undefined ? formatDuration(summary.durationMs) : \"-\"\n    }`,\n  );\n  console.log(`Total steps: ${summary.totalSteps}`);\n  console.log(`LLM steps: ${summary.llmSteps}`);\n  console.log(`Tool steps: ${summary.toolSteps}`);\n  console.log(`Logic steps: ${summary.logicSteps}`);\n  console.log(`Error steps: ${summary.errorSteps}`);\n  console.log(`Max depth: ${summary.maxDepth}`);\n  if (summary.longestStep) {\n    console.log(\n      `Longest step: ${summary.longestStep.name} (${formatDuration(\n        summary.longestStep.durationMs,\n      )}, ${summary.longestStep.type})`,\n    );\n  }\n}\n\nfunction printMetadata(meta: TraceMetadata): void {\n  console.log(\"Trace Metadata\");\n  console.log(`ID: ${meta.runId}`);\n  console.log(`Name: ${meta.name ?? \"unnamed\"}`);\n  console.log(`Status: ${meta.status}`);\n  console.log(\n    `Started: ${\n      meta.startedAt !== undefined ? formatTimestamp(meta.startedAt) : \"-\"\n    }`,\n  );\n  console.log(\n    `Ended: ${meta.endedAt !== undefined ? formatTimestamp(meta.endedAt) : \"-\"}`,\n  );\n  console.log(\n    `Duration: ${\n      meta.durationMs !== undefined ? formatDuration(meta.durationMs) : \"-\"\n    }`,\n  );\n  console.log(`Event count: ${meta.eventCount}`);\n  console.log(`File path: ${meta.filePath}`);\n  console.log(`File size: ${meta.fileSize}`);\n  console.log(`Created at: ${meta.createdAt.toISOString()}`);\n}\n\nfunction filterErrorEvents(events: TraceEvent[]): TraceEvent[] {\n  return events.filter((e) => {\n    if (e.event === \"run_completed\") return (e as RunCompletedEvent).status === \"error\";\n    if (e.event === \"step_completed\") return (e as StepCompletedEvent).status === \"error\";\n    return false;\n  });\n}\n\n/** Keep failed nodes and ancestors needed to situate them; drop successful siblings. */\nfunction pruneErrorTree(nodes: StepNode[]): StepNode[] {\n  const pruned: StepNode[] = [];\n  for (const node of nodes) {\n    const children = pruneErrorTree(node.children);\n    if (node.status === \"error\" || children.length > 0) {\n      pruned.push({ ...node, children });\n    }\n  }\n  return pruned;\n}\n\n/**\n * Prints a single run as a tree (or JSON). Missing runs and invalid traces set `process.exitCode`\n * without throwing from normal paths.\n */\nexport async function view(\n  runId: string,\n  options: ViewOptions = {},\n): Promise<void> {\n  try {\n    const id =\n      typeof runId === \"string\" && runId.trim() !== \"\" ? runId.trim() : \"\";\n    if (id === \"\") {\n      console.error(\"Run id is required\");\n      process.exitCode = 1;\n      return;\n    }\n\n    if (options.tui) {\n      const conflict =\n        options.json ||\n        options.summary ||\n        options.metadata ||\n        options.errorsOnly;\n      if (conflict) {\n        console.error(\n          \"--tui cannot be combined with --json, --summary, --metadata, or --errors-only\",\n        );\n        process.exitCode = 1;\n        return;\n      }\n      try {\n        const mod = (await import(\"@agent-inspect/tui\")) as {\n          runTraceViewer: (o: { runId: string; dir?: string }) => Promise<void>;\n        };\n        await mod.runTraceViewer({ runId: id, dir: options.dir });\n      } catch (e) {\n        const msg = e instanceof Error ? e.message : String(e);\n        if (msg.includes(\"interactive terminal\")) {\n          console.error(msg);\n          process.exitCode = 1;\n          return;\n        }\n        if (isModuleNotFound(e)) {\n          console.error(\n            \"TUI support is optional. Install @agent-inspect/tui to use --tui.\",\n          );\n          process.exitCode = 1;\n          return;\n        }\n        console.error(`[AgentInspect] TUI failed: ${msg}`);\n        process.exitCode = 1;\n      }\n      return;\n    }\n\n    const traceDir = resolveTraceDir({ dir: options.dir });\n\n    const result = await readRunTraceEvents(id, traceDir);\n    const events = result?.events ?? [];\n    if (events.length === 0) {\n      console.log(`Run not found: ${id}`);\n      console.log(`Trace directory: ${traceDir}`);\n      process.exitCode = 1;\n      return;\n    }\n\n    const mode = pickMode(options);\n    const filePath = getTraceFilePath(id, traceDir);\n\n    if (mode === \"summary\") {\n      const summary = buildRunSummary(events);\n      if (options.json) {\n        console.log(JSON.stringify(summary, null, 2));\n      } else {\n        printSummary(summary);\n      }\n      return;\n    }\n\n    if (mode === \"metadata\") {\n      const meta = await extractMetadata(filePath);\n      if (options.json) {\n        console.log(JSON.stringify(meta, null, 2));\n      } else {\n        printMetadata(meta);\n      }\n      return;\n    }\n\n    if (mode === \"errors-only\") {\n      const errEvents = filterErrorEvents(events);\n      if (options.json) {\n        // Machine-readable representation stays the filtered event list.\n        console.log(JSON.stringify(errEvents, null, 2));\n        return;\n      }\n      if (errEvents.length === 0) {\n        console.log(\"No errors found in trace\");\n        return;\n      }\n\n      const started = events.find(\n        (e): e is RunStartedEvent => e.event === \"run_started\",\n      );\n      const completed = events.filter(\n        (e): e is RunCompletedEvent => e.event === \"run_completed\",\n      );\n      const last = completed[completed.length - 1];\n      const status: RunStatus = last ? last.status : \"running\";\n      const durationLine =\n        last !== undefined && Number.isFinite(last.durationMs)\n          ? formatDuration(last.durationMs)\n          : \"-\";\n      const startedTs =\n        started !== undefined && Number.isFinite(started.startTime)\n          ? started.startTime\n          : started?.timestamp;\n      const startedLabel =\n        startedTs !== undefined ? formatTimestamp(startedTs) : \"-\";\n\n      console.log(`AgentInspect Run: ${started?.name ?? id}`);\n      console.log(`ID: ${id}`);\n      console.log(`Status: ${status}`);\n      console.log(`Duration: ${durationLine}`);\n      console.log(`Started: ${startedLabel}`);\n      console.log(\"\");\n      console.log(\"Error Tree:\");\n\n      const pruned = pruneErrorTree(buildStepTree(events));\n      if (pruned.length === 0) {\n        // Run-level failure without step nodes (or unmatched lifecycle).\n        if (last?.status === \"error\") {\n          console.log(\n            renderErrorLine(\n              last.error ?? { message: \"Run completed with error status\" },\n              0,\n            ),\n          );\n        } else {\n          console.log(\"No error steps recorded\");\n        }\n      } else {\n        printStepTree(pruned, 0, options.verbose === true);\n      }\n      return;\n    }\n\n    if (options.json) {\n      // Preserve existing behavior: --json alone prints raw events.\n      console.log(JSON.stringify(events, null, 2));\n      return;\n    }\n\n    const started = events.find(\n      (e): e is RunStartedEvent => e.event === \"run_started\",\n    );\n    if (!started) {\n      console.error(\"Invalid trace: missing run_started\");\n      process.exitCode = 1;\n      return;\n    }\n\n    const completed = events.filter(\n      (e): e is RunCompletedEvent => e.event === \"run_completed\",\n    );\n    const last = completed[completed.length - 1];\n    const status: RunStatus = last ? last.status : \"running\";\n    const durationLine =\n      last !== undefined && Number.isFinite(last.durationMs)\n        ? formatDuration(last.durationMs)\n        : \"-\";\n\n    const startedTs = Number.isFinite(started.startTime)\n      ? started.startTime\n      : started.timestamp;\n    const startedLabel = formatTimestamp(startedTs);\n\n    console.log(`AgentInspect Run: ${started.name}`);\n    console.log(`ID: ${id}`);\n    console.log(`Status: ${status}`);\n    console.log(`Duration: ${durationLine}`);\n    console.log(`Started: ${startedLabel}`);\n    console.log(\"\");\n\n    const tree = buildStepTree(events);\n    console.log(\"Execution Tree:\");\n    if (tree.length === 0) {\n      console.log(\"No steps recorded\");\n    } else {\n      printStepTree(tree, 0, options.verbose === true);\n    }\n\n    console.log(\"\");\n    console.log(`Trace file: ${filePath}`);\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] view failed: ${msg}`);\n    process.exitCode = 1;\n  }\n}\n","import { access } from \"node:fs/promises\";\n\nimport {\n  getTraceFilePath,\n  unknownTraceFormatMessage,\n  type TraceEvent,\n} from \"@agent-inspect/core/advanced\";\nimport {\n  persistedInspectEventsToTraceEvents,\n  type PersistedInspectEvent,\n} from \"@agent-inspect/core/persisted\";\nimport { openTrace } from \"@agent-inspect/core/readers\";\n\nexport interface ReadRunTraceResult {\n  events: TraceEvent[];\n  format: \"0.1\" | \"0.2\" | \"mixed\" | \"empty\";\n}\n\nexport interface ReadRunPersistedResult {\n  events: PersistedInspectEvent[];\n  format: \"0.1\" | \"0.2\" | \"mixed\" | \"empty\";\n}\n\nfunction mapReaderFormat(format: string): ReadRunTraceResult[\"format\"] {\n  switch (format) {\n    case \"agent-inspect-v0.1-jsonl\":\n      return \"0.1\";\n    case \"agent-inspect-v0.2-jsonl\":\n      return \"0.2\";\n    case \"agent-inspect-mixed-jsonl\":\n      return \"mixed\";\n    default:\n      return \"empty\";\n  }\n}\n\nfunction isMissingFileError(error: unknown): boolean {\n  return (\n    error !== null &&\n    typeof error === \"object\" &&\n    \"code\" in error &&\n    (error as NodeJS.ErrnoException).code === \"ENOENT\"\n  );\n}\n\n/**\n * Shared CLI read path: loads a run JSONL file through the canonical reader\n * and returns persisted rows without the lossy TraceEvent downgrade.\n */\nexport async function readRunPersistedEvents(\n  runId: string,\n  traceDir: string,\n): Promise<ReadRunPersistedResult | undefined> {\n  const filePath = getTraceFilePath(runId, traceDir);\n  try {\n    await access(filePath);\n    const result = await openTrace(\n      { type: \"file\", path: filePath },\n      { format: \"agent-inspect-jsonl\" },\n    );\n    return {\n      events: result.events,\n      format:\n        result.events.length > 0 ? mapReaderFormat(result.format) : \"empty\",\n    };\n  } catch (error) {\n    if (isMissingFileError(error)) return undefined;\n    throw error;\n  }\n}\n\n/**\n * Shared CLI read path: loads a run JSONL file through the canonical reader\n * pipeline, then adapts persisted reader rows back to legacy TraceEvent rows for\n * existing run-id command compatibility.\n */\nexport async function readRunTraceEvents(\n  runId: string,\n  traceDir: string,\n): Promise<ReadRunTraceResult | undefined> {\n  const persisted = await readRunPersistedEvents(runId, traceDir);\n  if (persisted === undefined) return undefined;\n  const events = persistedInspectEventsToTraceEvents(persisted.events);\n  return {\n    events,\n    format: events.length > 0 ? persisted.format : \"empty\",\n  };\n}\n\nexport { unknownTraceFormatMessage };\n","export type {\n  PersistedSchemaVersion,\n  PersistedEventSourceType,\n  PersistedEventSource,\n  PersistedEventStatus,\n  PersistedInspectError,\n  PersistedTokenUsage,\n  PersistedTraceContext,\n  PersistedInspectEvent,\n  PersistedInspectEventV02,\n  PersistedInspectEventV10,\n} from \"../types/persisted-inspect-event.js\";\n\nexport {\n  isPersistedInspectEvent,\n  isPersistedInspectEventV02,\n  isPersistedInspectEventV10,\n} from \"../types/persisted-inspect-event.js\";\n\nexport type { TraceEventToPersistedOptions } from \"../persisted/from-trace-event.js\";\n\nexport {\n  traceEventToPersistedInspectEvent,\n  traceEventsToPersistedInspectEvents,\n} from \"../persisted/from-trace-event.js\";\n\nexport type { InspectEventToPersistedOptions } from \"../persisted/from-inspect-event.js\";\n\nexport {\n  inspectEventToPersistedInspectEvent,\n  inspectEventsToPersistedInspectEvents,\n} from \"../persisted/from-inspect-event.js\";\n\nexport type { PersistedToInspectEventOptions } from \"../persisted/to-inspect-event.js\";\n\nexport {\n  persistedInspectEventToInspectEvent,\n  persistedInspectEventsToInspectEvents,\n} from \"../persisted/to-inspect-event.js\";\n\nexport type { PersistedToTraceEventOptions } from \"../persisted/to-trace-event.js\";\n\nexport {\n  persistedInspectEventToTraceEvents,\n  persistedInspectEventsToTraceEvents,\n} from \"../persisted/to-trace-event.js\";\n\nexport type { PersistedTreeBridgeOptions } from \"../persisted/tree-bridge.js\";\n\nexport {\n  persistedInspectEventsToRunTrees,\n  traceEventsToPersistedRunTrees,\n} from \"../persisted/tree-bridge.js\";\n","import type { EventSource, InspectEvent } from \"../types/inspect-event.js\";\nimport type {\n  PersistedEventSource,\n  PersistedEventSourceType,\n  PersistedInspectError,\n  PersistedInspectEvent,\n  PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\nimport { normalizeTokenUsage } from \"./token-usage.js\";\n\nexport interface InspectEventToPersistedOptions {\n  /**\n   * Optional source name override.\n   * If omitted, derived from event.source.type.\n   */\n  sourceName?: string;\n\n  /**\n   * Optional source version override.\n   */\n  sourceVersion?: string;\n\n  /**\n   * Stable index for deterministic fallback IDs if needed.\n   */\n  eventIndex?: number;\n}\n\nfunction sanitizeIdPart(value: string): string {\n  return value.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n}\n\nfunction createFallbackEventId(event: InspectEvent, eventIndex: number): string {\n  const runId = sanitizeIdPart(event.runId);\n  const kind = sanitizeIdPart(event.kind);\n  const name = sanitizeIdPart(event.name);\n  return `inspect:${runId}:${kind}:${name}:${eventIndex}`;\n}\n\nfunction toIsoTimestamp(\n  ms: number,\n): { iso: string; invalidTimestamp: boolean } {\n  if (typeof ms !== \"number\" || !Number.isFinite(ms)) {\n    return { iso: new Date(0).toISOString(), invalidTimestamp: true };\n  }\n  return { iso: new Date(ms).toISOString(), invalidTimestamp: false };\n}\n\nfunction compactAttributes(\n  entries: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n  const out: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(entries)) {\n    if (value !== undefined) {\n      out[key] = value;\n    }\n  }\n  return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction mapInspectSourceToPersisted(\n  source: EventSource,\n  options?: InspectEventToPersistedOptions,\n): {\n  persistedSource: PersistedEventSource;\n  originalSourceType?: EventSource[\"type\"];\n} {\n  const name = options?.sourceName;\n  const version = options?.sourceVersion;\n\n  switch (source.type) {\n    case \"pino\":\n      return {\n        persistedSource: {\n          type: \"json-log\",\n          name: name ?? \"pino\",\n          version,\n        },\n        originalSourceType: \"pino\",\n      };\n    case \"winston\":\n      return {\n        persistedSource: {\n          type: \"json-log\",\n          name: name ?? \"winston\",\n          version,\n        },\n        originalSourceType: \"winston\",\n      };\n    case \"manual\":\n    case \"json-log\":\n    case \"log4js\":\n    case \"adapter\":\n      return {\n        persistedSource: {\n          type: source.type as PersistedEventSourceType,\n          name,\n          version,\n        },\n      };\n    default:\n      return {\n        persistedSource: {\n          type: \"json-log\",\n          name,\n          version,\n        },\n      };\n  }\n}\n\nfunction mapTokenUsageFromAttributes(\n  attributes: Record<string, unknown> | undefined,\n): PersistedTokenUsage | undefined {\n  return normalizeTokenUsage(attributes?.tokens);\n}\n\nfunction mapErrorFromAttributes(\n  event: InspectEvent,\n): PersistedInspectError | undefined {\n  if (event.status !== \"error\" || !event.attributes) {\n    return undefined;\n  }\n  const message = event.attributes.errorMessage;\n  if (typeof message !== \"string\" || message.length === 0) {\n    return undefined;\n  }\n  const err: PersistedInspectError = { message };\n  if (typeof event.attributes.errorName === \"string\") {\n    err.name = event.attributes.errorName;\n  }\n  return err;\n}\n\n/**\n * Maps one in-memory {@link InspectEvent} to a v0.2 {@link PersistedInspectEvent}.\n * Does not mutate `event`.\n */\nexport function inspectEventToPersistedInspectEvent(\n  event: InspectEvent,\n  options?: InspectEventToPersistedOptions,\n): PersistedInspectEvent {\n  const eventIndex = options?.eventIndex ?? 0;\n  const eventId =\n    typeof event.eventId === \"string\" && event.eventId.length > 0\n      ? event.eventId\n      : createFallbackEventId(event, eventIndex);\n\n  const ts = toIsoTimestamp(event.timestamp);\n  const { persistedSource, originalSourceType } = mapInspectSourceToPersisted(\n    event.source,\n    options,\n  );\n\n  const attrsBase =\n    event.attributes !== undefined ? { ...event.attributes } : {};\n\n  const attributes = compactAttributes({\n    ...attrsBase,\n    sourceFile: event.source.file,\n    sourceLine: event.source.line,\n    originalSourceType,\n    invalidTimestamp: ts.invalidTimestamp ? true : undefined,\n  });\n\n  const tokenUsage = mapTokenUsageFromAttributes(event.attributes);\n  const error = mapErrorFromAttributes(event);\n\n  const inputPreview = event.attributes?.inputPreview;\n  const outputPreview = event.attributes?.outputPreview;\n\n  const out: PersistedInspectEvent = {\n    schemaVersion: \"0.2\",\n    eventId,\n    runId: event.runId,\n    kind: event.kind,\n    name: event.name,\n    timestamp: ts.iso,\n    confidence: event.confidence,\n    source: persistedSource,\n    attributes,\n  };\n\n  if (event.parentId !== undefined) {\n    out.parentId = event.parentId;\n  }\n  if (event.status !== undefined) {\n    out.status = event.status;\n  }\n  if (\n    event.durationMs !== undefined &&\n    Number.isFinite(event.durationMs) &&\n    event.durationMs >= 0\n  ) {\n    out.durationMs = event.durationMs;\n  }\n  if (tokenUsage !== undefined) {\n    out.tokenUsage = tokenUsage;\n  }\n  if (error !== undefined) {\n    out.error = error;\n  }\n  if (inputPreview !== undefined) {\n    out.inputSummary = inputPreview;\n  }\n  if (outputPreview !== undefined) {\n    out.outputSummary = outputPreview;\n  }\n\n  return out;\n}\n\n/**\n * Maps in-memory {@link InspectEvent} rows to persisted v0.2 events.\n */\nexport function inspectEventsToPersistedInspectEvents(\n  events: readonly InspectEvent[],\n  options?: Omit<InspectEventToPersistedOptions, \"eventIndex\">,\n): PersistedInspectEvent[] {\n  return events.map((event, index) =>\n    inspectEventToPersistedInspectEvent(event, { ...options, eventIndex: index }),\n  );\n}\n","export type {\n  TraceFormatCandidate,\n  TraceFormatDetectionResult,\n  TraceFormatDetectionStatus,\n  TraceInput,\n  TraceReadOptions,\n  TraceReadResult,\n  TraceReader,\n  TraceReaderDetectOptions,\n  TraceReaderReadOptions,\n  TraceReadErrorCode,\n  TraceReadWarning,\n  TraceReadWarningSeverity,\n} from \"../readers/index.js\";\n\nexport {\n  DEFAULT_TRACE_READERS,\n  TraceReadError,\n  agentInspectJsonlReader,\n  assertTraceInput,\n  detectTraceFormat,\n  openInferenceJsonReader,\n  openTrace,\n  openTraceDirectory,\n  openTraceFile,\n  openTraceText,\n  otlpJsonReader,\n  readTrace,\n  BUILTIN_MAPPING_LEDGERS,\n  OPENINFERENCE_MAPPING_LEDGER,\n  OTLP_JSON_MAPPING_LEDGER,\n  getMappingLedger,\n} from \"../readers/index.js\";\n\nexport type {\n  MappingConfidence,\n  MappingLedger,\n  MappingLedgerEntry,\n  MappingLossKind,\n} from \"../readers/index.js\";\n\nexport type {\n  ProgrammaticDiagnosticCode,\n  ProgrammaticDiagnosticSpec,\n} from \"../diagnostics/programmatic.js\";\n\nexport {\n  PROGRAMMATIC_DIAGNOSTIC_SPECS,\n  formatProgrammaticDiagnostic,\n} from \"../diagnostics/programmatic.js\";\n","import { readFile } from \"node:fs/promises\";\n\nimport type { LogEventMapping, LogIngestConfig, RedactionRule } from \"../types/log-config.js\";\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n  return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction isNonEmptyStringArray(v: unknown): v is string[] {\n  return (\n    Array.isArray(v) &&\n    v.length > 0 &&\n    v.every((x) => typeof x === \"string\" && x.trim() !== \"\")\n  );\n}\n\nfunction validateRedact(redact: unknown): asserts redact is RedactionRule[] {\n  if (!Array.isArray(redact)) {\n    throw new Error(\"Invalid config: redact must be an array\");\n  }\n  for (const r of redact) {\n    if (typeof r === \"string\") continue;\n    if (!isRecord(r)) {\n      throw new Error(\"Invalid config: redact entries must be strings or objects\");\n    }\n    if (typeof r.key !== \"string\" || r.key.trim() === \"\") {\n      throw new Error(\"Invalid config: redact.key must be a non-empty string\");\n    }\n    if (r.strategy !== \"full\" && r.strategy !== \"prefix\" && r.strategy !== \"hash\") {\n      throw new Error(\n        `Invalid config: redact.strategy must be one of full, prefix, hash (got ${String(\n          r.strategy,\n        )})`,\n      );\n    }\n    if (r.keep !== undefined && (typeof r.keep !== \"number\" || !Number.isFinite(r.keep) || r.keep < 0)) {\n      throw new Error(\"Invalid config: redact.keep must be a non-negative number when provided\");\n    }\n  }\n}\n\nfunction validateMappings(mappings: unknown): asserts mappings is Record<string, LogEventMapping> {\n  if (!isRecord(mappings)) {\n    throw new Error(\"Invalid config: mappings must be an object\");\n  }\n}\n\nexport const DEFAULT_LOG_INGEST_CONFIG: LogIngestConfig = {\n  runIdKeys: [\"runId\", \"traceId\", \"requestId\", \"decisionId\", \"jobId\"],\n  eventKey: \"event\",\n  timestampKey: \"timestamp\",\n  messageKey: \"message\",\n  levelKey: \"level\",\n  heuristicWindowMs: 2000,\n  mappings: {\n    \"*.error\": { kind: \"ERROR\", status: \"error\" },\n    \"*.failed\": { kind: \"ERROR\", status: \"error\" },\n    \"*.llm.*\": { kind: \"LLM\" },\n    \"*.tool.*\": { kind: \"TOOL\" },\n    \"*.agent.*\": { kind: \"AGENT\" },\n    \"*.retriever.*\": { kind: \"RETRIEVER\" },\n    \"*.result.*\": { kind: \"RESULT\" },\n  },\n};\n\nexport function mergeLogIngestConfig(\n  base: LogIngestConfig,\n  override: Partial<LogIngestConfig>,\n): LogIngestConfig {\n  const merged: LogIngestConfig = {\n    ...base,\n    ...override,\n    mappings: {\n      ...(base.mappings ?? {}),\n      ...(override.mappings ?? {}),\n    },\n  };\n  return merged;\n}\n\nexport async function loadLogIngestConfig(configPath?: string): Promise<LogIngestConfig> {\n  if (configPath === undefined || configPath.trim() === \"\") {\n    return DEFAULT_LOG_INGEST_CONFIG;\n  }\n\n  let rawText: string;\n  try {\n    rawText = await readFile(configPath, \"utf-8\");\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    throw new Error(`Failed to read config file: ${configPath} (${msg})`);\n  }\n\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(rawText) as unknown;\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    throw new Error(`Invalid JSON in config file: ${configPath} (${msg})`);\n  }\n\n  if (!isRecord(parsed)) {\n    throw new Error(\"Invalid config: expected a JSON object at top-level\");\n  }\n\n  const user = parsed as Partial<LogIngestConfig>;\n\n  if (user.runIdKeys !== undefined && !isNonEmptyStringArray(user.runIdKeys)) {\n    throw new Error(\"Invalid config: runIdKeys must be a non-empty array of strings\");\n  }\n  if (user.eventKey !== undefined && (typeof user.eventKey !== \"string\" || user.eventKey.trim() === \"\")) {\n    throw new Error(\"Invalid config: eventKey must be a non-empty string\");\n  }\n\n  for (const k of [\n    \"timestampKey\",\n    \"messageKey\",\n    \"levelKey\",\n    \"parentIdKey\",\n    \"durationKey\",\n    \"statusKey\",\n  ] as const) {\n    const v = (user as any)[k];\n    if (v !== undefined && (typeof v !== \"string\" || v.trim() === \"\")) {\n      throw new Error(`Invalid config: ${k} must be a non-empty string when provided`);\n    }\n  }\n\n  if (user.mappings !== undefined) {\n    validateMappings(user.mappings);\n  }\n  if (user.redact !== undefined) {\n    validateRedact(user.redact);\n  }\n  if (\n    user.heuristicWindowMs !== undefined &&\n    (typeof user.heuristicWindowMs !== \"number\" ||\n      !Number.isFinite(user.heuristicWindowMs) ||\n      user.heuristicWindowMs < 0)\n  ) {\n    throw new Error(\"Invalid config: heuristicWindowMs must be a non-negative number when provided\");\n  }\n\n  // Explicitly reject obviously unsafe config patterns.\n  if ((user as any).redact && JSON.stringify((user as any).redact).includes(\"=>\")) {\n    throw new Error(\"Invalid config: function strings are not supported in redact rules\");\n  }\n\n  return mergeLogIngestConfig(DEFAULT_LOG_INGEST_CONFIG, user);\n}\n\n","import { readFile } from \"node:fs/promises\";\n\nimport type { RawLogRecord } from \"./raw-record.js\";\nimport type { ParseResult, ParserWarning } from \"./warnings.js\";\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n  return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nexport class JsonLogParser {\n  parseLines(lines: string[], filePath?: string): ParseResult<RawLogRecord> {\n    const records: RawLogRecord[] = [];\n    const warnings: ParserWarning[] = [];\n\n    for (let i = 0; i < lines.length; i++) {\n      const lineNumber = i + 1;\n      const raw = lines[i] ?? \"\";\n      const trimmed = raw.trim();\n      if (trimmed === \"\") continue;\n      let parsed: unknown;\n      try {\n        parsed = JSON.parse(trimmed) as unknown;\n      } catch {\n        warnings.push({\n          code: \"MALFORMED_JSON\",\n          message: \"Malformed JSON log line\",\n          file: filePath,\n          line: lineNumber,\n          raw: trimmed.slice(0, 500),\n        });\n        continue;\n      }\n      if (!isRecord(parsed)) {\n        warnings.push({\n          code: \"MALFORMED_JSON\",\n          message: \"JSON log line must be an object\",\n          file: filePath,\n          line: lineNumber,\n          raw: trimmed.slice(0, 500),\n        });\n        continue;\n      }\n      records.push({\n        raw: parsed,\n        file: filePath,\n        line: lineNumber,\n        sourceType: \"json-log\",\n      });\n    }\n\n    return { records, warnings };\n  }\n\n  async parseFile(filePath: string): Promise<ParseResult<RawLogRecord>> {\n    let text: string;\n    try {\n      text = await readFile(filePath, \"utf-8\");\n    } catch (e) {\n      const msg = e instanceof Error ? e.message : String(e);\n      throw new Error(`Failed to read log file: ${filePath} (${msg})`);\n    }\n    const lines = text.split(/\\r?\\n/);\n    return this.parseLines(lines, filePath);\n  }\n}\n\n","import { readFile } from \"node:fs/promises\";\n\nimport type { RawLogRecord } from \"./raw-record.js\";\nimport type { ParseResult, ParserWarning } from \"./warnings.js\";\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n  return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction findLastJsonObjectSubstring(line: string): string | undefined {\n  // Scan for balanced {...} regions and keep the last one.\n  // This is deliberately conservative: it does not attempt to parse JS object literal syntax.\n  let last: { start: number; end: number } | undefined;\n  for (let i = 0; i < line.length; i++) {\n    if (line[i] !== \"{\") continue;\n    let depth = 0;\n    let inString = false;\n    let escape = false;\n    for (let j = i; j < line.length; j++) {\n      const ch = line[j]!;\n      if (inString) {\n        if (escape) {\n          escape = false;\n          continue;\n        }\n        if (ch === \"\\\\\") {\n          escape = true;\n          continue;\n        }\n        if (ch === '\"') {\n          inString = false;\n        }\n        continue;\n      }\n\n      if (ch === '\"') {\n        inString = true;\n        continue;\n      }\n      if (ch === \"{\") depth += 1;\n      if (ch === \"}\") depth -= 1;\n      if (depth === 0) {\n        last = { start: i, end: j + 1 };\n        i = j;\n        break;\n      }\n      if (depth < 0) break;\n    }\n  }\n  if (!last) return undefined;\n  return line.slice(last.start, last.end);\n}\n\nexport class Log4jsParser {\n  parseLines(lines: string[], filePath?: string): ParseResult<RawLogRecord> {\n    const records: RawLogRecord[] = [];\n    const warnings: ParserWarning[] = [];\n\n    for (let i = 0; i < lines.length; i++) {\n      const lineNumber = i + 1;\n      const rawLine = lines[i] ?? \"\";\n      const trimmed = rawLine.trim();\n      if (trimmed === \"\") continue;\n\n      const jsonText = findLastJsonObjectSubstring(trimmed);\n      if (!jsonText) {\n        warnings.push({\n          code: \"UNSUPPORTED_LOG4JS_PAYLOAD\",\n          message: \"No embedded JSON object found in log4js line\",\n          file: filePath,\n          line: lineNumber,\n          raw: trimmed.slice(0, 500),\n        });\n        continue;\n      }\n\n      let parsed: unknown;\n      try {\n        parsed = JSON.parse(jsonText) as unknown;\n      } catch {\n        warnings.push({\n          code: \"MALFORMED_JSON\",\n          message: \"Malformed embedded JSON object in log4js line\",\n          file: filePath,\n          line: lineNumber,\n          raw: jsonText.slice(0, 500),\n        });\n        continue;\n      }\n\n      if (!isRecord(parsed)) {\n        warnings.push({\n          code: \"UNSUPPORTED_LOG4JS_PAYLOAD\",\n          message: \"Embedded JSON payload must be an object\",\n          file: filePath,\n          line: lineNumber,\n          raw: jsonText.slice(0, 500),\n        });\n        continue;\n      }\n\n      records.push({\n        raw: parsed,\n        file: filePath,\n        line: lineNumber,\n        sourceType: \"log4js\",\n      });\n    }\n\n    return { records, warnings };\n  }\n\n  async parseFile(filePath: string): Promise<ParseResult<RawLogRecord>> {\n    let text: string;\n    try {\n      text = await readFile(filePath, \"utf-8\");\n    } catch (e) {\n      const msg = e instanceof Error ? e.message : String(e);\n      throw new Error(`Failed to read log file: ${filePath} (${msg})`);\n    }\n    const lines = text.split(/\\r?\\n/);\n    return this.parseLines(lines, filePath);\n  }\n}\n\n","import type { LogEventMapping } from \"../types/log-config.js\";\n\nexport function wildcardMatch(pattern: string, value: string): boolean {\n  if (pattern === value) return true;\n  if (!pattern.includes(\"*\")) return false;\n\n  const parts = pattern.split(\"*\");\n  let idx = 0;\n  for (let i = 0; i < parts.length; i++) {\n    const part = parts[i]!;\n    if (part === \"\") continue;\n    const found = value.indexOf(part, idx);\n    if (found === -1) return false;\n    if (i === 0 && !pattern.startsWith(\"*\") && found !== 0) return false;\n    idx = found + part.length;\n  }\n  if (!pattern.endsWith(\"*\")) {\n    const last = parts[parts.length - 1]!;\n    if (last !== \"\" && !value.endsWith(last)) return false;\n    if (last === \"\" && !value.endsWith(parts[parts.length - 2] ?? \"\")) return false;\n  }\n  return true;\n}\n\nexport function matchMapping(\n  eventName: string,\n  mappings?: Record<string, LogEventMapping>,\n): LogEventMapping | undefined {\n  if (!mappings) return undefined;\n  if (mappings[eventName]) return mappings[eventName];\n\n  let bestKey: string | undefined;\n  let bestScore = -1;\n\n  for (const key of Object.keys(mappings)) {\n    if (!key.includes(\"*\")) continue;\n    if (!wildcardMatch(key, eventName)) continue;\n    const score = key.replaceAll(\"*\", \"\").length;\n    if (score > bestScore) {\n      bestScore = score;\n      bestKey = key;\n    }\n  }\n\n  return bestKey ? mappings[bestKey] : undefined;\n}\n\n","export type {\n  LogEventMapping,\n  RedactionStrategy,\n  RedactionRule,\n  LogIngestConfig,\n} from \"../types/log-config.js\";\n\nexport type { ParserWarningCode, ParserWarning, ParseResult } from \"../logs/warnings.js\";\n\nexport {\n  DEFAULT_LOG_INGEST_CONFIG,\n  loadLogIngestConfig,\n  mergeLogIngestConfig,\n} from \"../logs/config.js\";\n\nexport type { RawLogRecord } from \"../logs/raw-record.js\";\nexport { JsonLogParser } from \"../logs/json-parser.js\";\nexport { Log4jsParser } from \"../logs/log4js-parser.js\";\nexport { wildcardMatch, matchMapping } from \"../logs/mapping.js\";\nexport type { RedactorOptions } from \"../logs/redactor.js\";\nexport { DEFAULT_REDACT_KEYS, Redactor } from \"../logs/redactor.js\";\nexport type { NormalizeOptions } from \"../logs/normalizer.js\";\nexport { EventNormalizer } from \"../logs/normalizer.js\";\nexport type { TreeBuilderOptions } from \"../logs/tree-builder.js\";\nexport { TreeBuilder } from \"../logs/tree-builder.js\";\nexport type { RenderTreeOptions } from \"../logs/tree-renderer.js\";\nexport { renderRunTree, renderRunTrees } from \"../logs/tree-renderer.js\";\n\nexport type { ParseLogsOptions, LogToTreeResult } from \"../logs/index.js\";\nexport { parseLogsToTrees } from \"../logs/index.js\";\nexport type { LogSourceFormat, ParseLogLineOptions } from \"../logs/line-parser.js\";\nexport { parseLogLine } from \"../logs/line-parser.js\";\nexport type { LiveLogUpdate, LiveLogAccumulatorOptions } from \"../logs/live-tree.js\";\nexport { LiveLogAccumulator } from \"../logs/live-tree.js\";\n","import { nanoid } from \"nanoid\";\n\nimport type { InspectEvent, InspectKind } from \"../types/inspect-event.js\";\nimport type { LogIngestConfig } from \"../types/log-config.js\";\nimport type { RawLogRecord } from \"./raw-record.js\";\nimport type { ParseResult, ParserWarning } from \"./warnings.js\";\nimport { matchMapping } from \"./mapping.js\";\n\nfunction isFiniteNumber(v: unknown): v is number {\n  return typeof v === \"number\" && Number.isFinite(v);\n}\n\nfunction safeString(v: unknown): string | undefined {\n  if (typeof v !== \"string\") return undefined;\n  const t = v.trim();\n  return t === \"\" ? undefined : t;\n}\n\nfunction parseTimestamp(v: unknown): number | undefined {\n  if (isFiniteNumber(v)) return v;\n  if (typeof v === \"string\") {\n    const t = Date.parse(v);\n    if (Number.isFinite(t)) return t;\n  }\n  return undefined;\n}\n\nfunction hasToken(hay: string, token: string): boolean {\n  return hay.includes(token);\n}\n\n// \"error\"/\"failed\" must be a complete dot-delimited token (\"x.error\",\n// \"x.failed.y\"); substrings like \"error_budget\" or \"error_retry\" are not\n// error signals.\nconst ERROR_TOKEN_RE = /\\.(error|failed)(\\.|$)/;\n\nfunction inferKind(eventName: string): InspectKind {\n  if (hasToken(eventName, \".llm.\")) return \"LLM\";\n  if (hasToken(eventName, \".tool.\")) return \"TOOL\";\n  if (hasToken(eventName, \".agent.\")) return \"AGENT\";\n  if (hasToken(eventName, \".retriever.\")) return \"RETRIEVER\";\n  if (hasToken(eventName, \".result.\")) return \"RESULT\";\n  if (ERROR_TOKEN_RE.test(eventName)) {\n    return \"ERROR\";\n  }\n  return \"LOG\";\n}\n\nfunction deriveName(eventName: string, kind: InspectKind): string {\n  const parts = eventName.split(\".\");\n  const last = parts[parts.length - 1] ?? eventName;\n  if (kind === \"LLM\") return `llm:${last}`;\n  if (kind === \"TOOL\") return `tool:${last}`;\n  if (kind === \"AGENT\") return `agent:${last}`;\n  if (kind === \"RESULT\") return `result:${last}`;\n  if (kind === \"RUN\") return `run:${last}`;\n  if (kind === \"RETRIEVER\") return `retriever:${last}`;\n  if (kind === \"ERROR\") return `error:${last}`;\n  return eventName;\n}\n\nexport interface NormalizeOptions {\n  config: LogIngestConfig;\n  sourceFile?: string;\n}\n\nexport class EventNormalizer {\n  readonly #config: LogIngestConfig;\n\n  constructor(options: NormalizeOptions) {\n    this.#config = options.config;\n  }\n\n  #normalizeInternal(\n    record: RawLogRecord,\n  ): { event?: InspectEvent; warning?: ParserWarning } {\n    const raw = record.raw;\n    const cfg = this.#config;\n\n    // runId\n    let runId: string | undefined;\n    for (const k of cfg.runIdKeys) {\n      const v = raw[k];\n      const s = safeString(v);\n      if (s) {\n        runId = s;\n        break;\n      }\n    }\n    if (!runId) {\n      return {\n        warning: {\n        code: \"MISSING_RUN_ID\",\n        message: \"Missing run id (none of runIdKeys present)\",\n        file: record.file,\n        line: record.line,\n        },\n      };\n    }\n\n    // event name\n    const eventName = safeString(raw[cfg.eventKey]);\n    if (!eventName) {\n      return {\n        warning: {\n        code: \"MISSING_EVENT\",\n        message: `Missing event name (key: ${cfg.eventKey})`,\n        file: record.file,\n        line: record.line,\n        },\n      };\n    }\n\n    const mapping = matchMapping(eventName, cfg.mappings);\n\n    // timestamp\n    const tsKey = cfg.timestampKey ?? \"timestamp\";\n    const tsRaw = raw[tsKey];\n    const parsedTs = parseTimestamp(tsRaw);\n    const timestamp = parsedTs ?? Date.now();\n    const timestampMissing = parsedTs === undefined;\n\n    // parentId\n    const parentIdKey = cfg.parentIdKey;\n    const parentId = parentIdKey ? safeString(raw[parentIdKey]) : undefined;\n\n    // duration\n    let durationMs: number | undefined;\n    const durationKey = cfg.durationKey;\n    if (durationKey) {\n      const v = raw[durationKey];\n      if (isFiniteNumber(v)) durationMs = v;\n    } else if (isFiniteNumber((raw as any).durationMs)) {\n      durationMs = (raw as any).durationMs as number;\n    }\n\n    // status\n    let status: InspectEvent[\"status\"] | undefined;\n    const statusKey = cfg.statusKey;\n    const statusRaw = statusKey ? safeString(raw[statusKey]) : undefined;\n    if (statusRaw === \"running\" || statusRaw === \"ok\" || statusRaw === \"error\") {\n      status = statusRaw;\n    } else if (mapping?.status) {\n      status = mapping.status;\n    } else if (mapping?.kind === \"ERROR\") {\n      status = \"error\";\n    } else if (ERROR_TOKEN_RE.test(eventName)) {\n      status = \"error\";\n    } else if (mapping?.startsRun || mapping?.startsStep) {\n      status = \"running\";\n    } else if (mapping?.endsRun || mapping?.endsStep) {\n      status = \"ok\";\n    }\n\n    // kind\n    const kind: InspectKind = mapping?.kind ?? inferKind(eventName);\n\n    // name\n    const name = mapping?.name ?? deriveName(eventName, kind);\n\n    // confidence\n    let confidence: InspectEvent[\"confidence\"] = \"correlated\";\n    if (parentId || mapping?.startsRun) confidence = \"explicit\";\n    if (timestampMissing) confidence = \"unknown\";\n\n    // attributes: exclude used keys\n    const omit = new Set<string>([\n      ...cfg.runIdKeys,\n      cfg.eventKey,\n      tsKey,\n      cfg.messageKey ?? \"message\",\n      cfg.levelKey ?? \"level\",\n      cfg.parentIdKey ?? \"\",\n      cfg.durationKey ?? \"\",\n      cfg.statusKey ?? \"\",\n      \"durationMs\",\n    ].filter((k) => k !== \"\"));\n\n    const attributes: Record<string, unknown> = {};\n    for (const [k, v] of Object.entries(raw)) {\n      if (omit.has(k)) continue;\n      attributes[k] = v;\n    }\n\n    const event: InspectEvent = {\n      eventId: nanoid(10),\n      runId,\n      ...(parentId ? { parentId } : {}),\n      name,\n      kind,\n      timestamp,\n      ...(status ? { status } : {}),\n      ...(durationMs !== undefined ? { durationMs } : {}),\n      ...(Object.keys(attributes).length > 0 ? { attributes } : {}),\n      confidence,\n      source: {\n        type: record.sourceType,\n        file: record.file,\n        line: record.line,\n      },\n    };\n\n    if (timestampMissing) {\n      return {\n        event,\n        warning: {\n          code: \"MISSING_TIMESTAMP\",\n          message: `Missing or invalid timestamp (key: ${tsKey})`,\n          file: record.file,\n          line: record.line,\n          raw: JSON.stringify(raw).slice(0, 500),\n        },\n      };\n    }\n\n    return { event };\n  }\n\n  normalize(record: RawLogRecord): InspectEvent | ParserWarning {\n    const r = this.#normalizeInternal(record);\n    return r.event ?? (r.warning as ParserWarning);\n  }\n\n  normalizeAll(records: RawLogRecord[]): ParseResult<InspectEvent> {\n    const out: InspectEvent[] = [];\n    const warnings: ParserWarning[] = [];\n    for (const r of records) {\n      const normalized = this.#normalizeInternal(r);\n      if (normalized.event) out.push(normalized.event);\n      if (normalized.warning) warnings.push(normalized.warning);\n    }\n    return { records: out, warnings };\n  }\n}\n\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\n\nexport interface RenderTreeOptions {\n  verbose?: boolean;\n  showConfidence?: \"always\" | \"non-explicit\" | \"never\";\n  showMetadata?: boolean;\n  color?: boolean;\n  maxAttributeLength?: number;\n  summary?: boolean;\n}\n\nfunction truncate(v: string, max: number): string {\n  if (v.length <= max) return v;\n  return v.slice(0, Math.max(0, max - 1)) + \"…\";\n}\n\nfunction fmtAttrValue(value: unknown, maxLen: number): string | undefined {\n  if (value === null || value === undefined) return undefined;\n  if (typeof value === \"string\") return truncate(value, maxLen);\n  if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n    return String(value);\n  }\n  if (typeof value === \"object\") {\n    try {\n      return truncate(JSON.stringify(value), maxLen);\n    } catch {\n      return \"[object]\";\n    }\n  }\n  return String(value);\n}\n\nfunction compactAttrs(attrs: Record<string, unknown> | undefined, maxLen: number): string {\n  if (!attrs) return \"\";\n  const entries = Object.entries(attrs);\n  if (entries.length === 0) return \"\";\n\n  const picks = new Map<string, string>();\n  const set = (k: string, v: unknown) => {\n    const s = fmtAttrValue(v, maxLen);\n    if (s !== undefined) picks.set(k, s);\n  };\n\n  // Prefer common keys in expected output\n  set(\"job\", attrs.jobId ?? attrs.job ?? attrs.jobUuid);\n  set(\"user\", attrs.userUuid ?? attrs.userId ?? attrs.user);\n  set(\"trip\", attrs.tripUuid ?? attrs.tripId ?? attrs.trip);\n  set(\"msgs\", attrs.messageCount ?? attrs.msgs);\n  set(\"trips\", attrs.trips);\n  set(\"model\", attrs.model);\n\n  // tokens: input/output\n  const tokens = attrs.tokens;\n  if (tokens && typeof tokens === \"object\" && tokens !== null) {\n    const input = (tokens as any).input;\n    const output = (tokens as any).output;\n    if (typeof input === \"number\" || typeof output === \"number\") {\n      picks.set(\"tokens\", `${input ?? \"?\"}/${output ?? \"?\"}`);\n    }\n  }\n\n  // Allow a few booleans/strings\n  for (const k of [\"shouldNotify\", \"variant\"] as const) {\n    if (k in attrs) set(k, (attrs as any)[k]);\n  }\n\n  const rendered = [...picks.entries()]\n    .filter(([, v]) => v !== \"\")\n    .map(([k, v]) => `${k}=${v}`);\n\n  return rendered.length > 0 ? \" \" + rendered.join(\" \") : \"\";\n}\n\nfunction statusMark(node: InspectNode): string {\n  if (node.event.status === \"error\") return \" ✖\";\n  if (node.event.status === \"ok\") return \" ✔\";\n  return \"\";\n}\n\nfunction fmtDuration(ms: number): string {\n  if (!Number.isFinite(ms) || ms < 0) return \"\";\n  if (ms < 1000) return `${Math.round(ms)}ms`;\n  return `${(ms / 1000).toFixed(2)}s`;\n}\n\nfunction renderNodeLines(node: InspectNode, prefix: string, isLast: boolean, options: Required<RenderTreeOptions>): string[] {\n  const branch = prefix + (isLast ? \"└─ \" : \"├─ \");\n  const nextPrefix = prefix + (isLast ? \"   \" : \"│  \");\n  const attrs = compactAttrs(node.event.attributes, options.maxAttributeLength);\n  const dur = node.event.durationMs !== undefined ? ` ${fmtDuration(node.event.durationMs)}` : \"\";\n  const line = `${branch}${node.event.name}${attrs}${statusMark(node)}${dur}`;\n\n  const lines = [line];\n\n  const showConf =\n    options.showConfidence === \"always\" ||\n    (options.showConfidence === \"non-explicit\" && node.event.confidence !== \"explicit\");\n  if (showConf) {\n    lines.push(`${nextPrefix}confidence: ${node.event.confidence}`);\n  }\n\n  const children = node.children;\n  for (let i = 0; i < children.length; i++) {\n    lines.push(...renderNodeLines(children[i]!, nextPrefix, i === children.length - 1, options));\n  }\n  return lines;\n}\n\nexport function renderRunTree(tree: InspectRunTree, options?: RenderTreeOptions): string {\n  const opts: Required<RenderTreeOptions> = {\n    verbose: options?.verbose ?? false,\n    showConfidence: options?.showConfidence ?? \"always\",\n    showMetadata: options?.showMetadata ?? false,\n    color: options?.color ?? false,\n    maxAttributeLength: options?.maxAttributeLength ?? 40,\n    summary: options?.summary ?? true,\n  };\n\n  const header = `Run ${tree.runId}`;\n  const lines: string[] = [header];\n\n  const children = tree.children;\n  for (let i = 0; i < children.length; i++) {\n    lines.push(...renderNodeLines(children[i]!, \"\", i === children.length - 1, opts));\n  }\n\n  if (opts.summary) {\n    const cb = tree.metadata.confidenceBreakdown;\n    const tools = tree.metadata.kinds.TOOL ?? 0;\n    const llms = tree.metadata.kinds.LLM ?? 0;\n    lines.push(\"\");\n    lines.push(\"Summary:\");\n    lines.push(`  Events: ${tree.metadata.totalEvents}`);\n    lines.push(`  Tools: ${tools}`);\n    lines.push(`  LLMs: ${llms}`);\n    lines.push(\n      `  Confidence: ${cb.explicit} explicit, ${cb.correlated} correlated, ${cb.heuristic} heuristic, ${cb.unknown} unknown`,\n    );\n    lines.push(\"\");\n    lines.push(\"Note:\");\n    lines.push(\"  Flat timeline by default. Nesting only with explicit parentId.\");\n  }\n\n  return lines.join(\"\\n\");\n}\n\nexport function renderRunTrees(trees: InspectRunTree[], options?: RenderTreeOptions): string {\n  return trees.map((t) => renderRunTree(t, options)).join(\"\\n\\n\");\n}\n\n","import { readFile } from \"node:fs/promises\";\n\nimport type { InspectEvent, InspectRunTree } from \"../types/inspect-event.js\";\nimport type { LogIngestConfig } from \"../types/log-config.js\";\nimport { loadLogIngestConfig, mergeLogIngestConfig } from \"./config.js\";\nimport { JsonLogParser } from \"./json-parser.js\";\nimport { Log4jsParser } from \"./log4js-parser.js\";\nimport type { RawLogRecord } from \"./raw-record.js\";\nimport { Redactor } from \"./redactor.js\";\nimport { EventNormalizer } from \"./normalizer.js\";\nimport { TreeBuilder } from \"./tree-builder.js\";\nimport type { ParserWarning } from \"./warnings.js\";\nexport type { LogSourceFormat, ParseLogLineOptions } from \"./line-parser.js\";\nexport { parseLogLine } from \"./line-parser.js\";\nexport type { LiveLogUpdate, LiveLogAccumulatorOptions } from \"./live-tree.js\";\nexport { LiveLogAccumulator } from \"./live-tree.js\";\n\nexport interface ParseLogsOptions {\n  format?: \"json\" | \"log4js\" | \"auto\";\n  config?: LogIngestConfig;\n  configPath?: string;\n  runIdKeys?: string[];\n  eventKey?: string;\n  timestampKey?: string;\n  messageKey?: string;\n  levelKey?: string;\n  parentIdKey?: string;\n  durationKey?: string;\n  statusKey?: string;\n  warnings?: \"none\" | \"summary\" | \"all\";\n}\n\nexport interface LogToTreeResult {\n  events: InspectEvent[];\n  trees: InspectRunTree[];\n  warnings: ParserWarning[];\n}\n\nfunction firstNonEmptyLine(text: string): string | undefined {\n  for (const line of text.split(/\\r?\\n/)) {\n    const t = line.trim();\n    if (t !== \"\") return t;\n  }\n  return undefined;\n}\n\nasync function detectFormat(\n  filePath: string,\n): Promise<\"json\" | \"log4js\"> {\n  const text = await readFile(filePath, \"utf-8\");\n  const first = firstNonEmptyLine(text);\n  if (!first) return \"log4js\";\n  if (!first.startsWith(\"{\")) return \"log4js\";\n  try {\n    const parsed = JSON.parse(first) as unknown;\n    if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) return \"json\";\n  } catch {\n    /* ignore */\n  }\n  return \"log4js\";\n}\n\nfunction applyOverrides(\n  cfg: LogIngestConfig,\n  options: ParseLogsOptions,\n): LogIngestConfig {\n  const override: Partial<LogIngestConfig> = {};\n  for (const k of [\n    \"runIdKeys\",\n    \"eventKey\",\n    \"timestampKey\",\n    \"messageKey\",\n    \"levelKey\",\n    \"parentIdKey\",\n    \"durationKey\",\n    \"statusKey\",\n  ] as const) {\n    const v = (options as any)[k];\n    if (v !== undefined) (override as any)[k] = v;\n  }\n  return mergeLogIngestConfig(cfg, override);\n}\n\n/**\n * @experimental Compatibility-oriented API for parsing structured logs into normalized run trees.\n * Subject to refinement before a future stability declaration.\n */\nexport async function parseLogsToTrees(\n  filePath: string,\n  options: ParseLogsOptions = {},\n): Promise<LogToTreeResult> {\n  const base =\n    options.config ??\n    (await loadLogIngestConfig(options.configPath));\n  const config = applyOverrides(base, options);\n\n  const format =\n    options.format === \"auto\" || options.format === undefined\n      ? await detectFormat(filePath)\n      : options.format;\n\n  let parsed: { records: RawLogRecord[]; warnings: ParserWarning[] };\n  if (format === \"json\") {\n    parsed = await new JsonLogParser().parseFile(filePath);\n  } else {\n    parsed = await new Log4jsParser().parseFile(filePath);\n  }\n\n  const normalizer = new EventNormalizer({ config });\n  const normalized = normalizer.normalizeAll(parsed.records);\n\n  // Redact attributes after normalization.\n  const redactor = new Redactor({ rules: config.redact });\n  const events: InspectEvent[] = normalized.records.map((e) => ({\n    ...e,\n    attributes: e.attributes ? redactor.redactRecord(e.attributes) : undefined,\n  }));\n\n  const trees = new TreeBuilder({ config }).build(events);\n\n  return {\n    events,\n    trees,\n    warnings: [...parsed.warnings, ...normalized.warnings],\n  };\n}\n\n","import type { RawLogRecord } from \"./raw-record.js\";\nimport { JsonLogParser } from \"./json-parser.js\";\nimport { Log4jsParser } from \"./log4js-parser.js\";\nimport type { ParseResult, ParserWarning } from \"./warnings.js\";\n\nexport type LogSourceFormat = \"json\" | \"log4js\" | \"auto\";\n\nexport interface ParseLogLineOptions {\n  format?: LogSourceFormat;\n  file?: string;\n  line?: number;\n}\n\nfunction shiftLineNumbers(\n  res: ParseResult<RawLogRecord>,\n  options: ParseLogLineOptions,\n): ParseResult<RawLogRecord> {\n  const targetLine =\n    typeof options.line === \"number\" && Number.isFinite(options.line) && options.line > 0\n      ? Math.floor(options.line)\n      : undefined;\n  const file = typeof options.file === \"string\" && options.file.trim() !== \"\" ? options.file : undefined;\n\n  if (targetLine === undefined && file === undefined) return res;\n\n  const mapRecord = (x: RawLogRecord): RawLogRecord => ({\n    ...x,\n    ...(targetLine !== undefined ? { line: targetLine } : {}),\n    ...(file !== undefined ? { file } : {}),\n  });\n\n  const mapWarning = (x: ParserWarning): ParserWarning => ({\n    ...x,\n    ...(targetLine !== undefined ? { line: targetLine } : {}),\n    ...(file !== undefined ? { file } : {}),\n  });\n\n  return {\n    records: res.records.map(mapRecord),\n    warnings: res.warnings.map(mapWarning),\n  };\n}\n\nfunction normalizeFormat(line: string, format: LogSourceFormat | undefined): LogSourceFormat {\n  if (format && format !== \"auto\") return format;\n  const trimmed = line.trim();\n  if (trimmed.startsWith(\"{\")) return \"json\";\n  return \"log4js\";\n}\n\nexport function parseLogLine(\n  line: string,\n  options: ParseLogLineOptions = {},\n): ParseResult<RawLogRecord> {\n  const raw = typeof line === \"string\" ? line : \"\";\n  const trimmed = raw.trim();\n  if (trimmed === \"\") return { records: [], warnings: [] };\n\n  const format = normalizeFormat(raw, options.format);\n  const base =\n    format === \"json\"\n      ? new JsonLogParser().parseLines([raw], options.file)\n      : new Log4jsParser().parseLines([raw], options.file);\n\n  // JsonLogParser/Log4jsParser always number lines starting at 1; for streaming tail we\n  // need to preserve the real stream/file line number when provided.\n  return shiftLineNumbers(base, options);\n}\n\n","import type { InspectEvent, InspectRunTree } from \"../types/inspect-event.js\";\nimport type { LogIngestConfig } from \"../types/log-config.js\";\nimport { mergeLogIngestConfig } from \"./config.js\";\nimport type { LogSourceFormat } from \"./line-parser.js\";\nimport { parseLogLine } from \"./line-parser.js\";\nimport { EventNormalizer } from \"./normalizer.js\";\nimport { Redactor } from \"./redactor.js\";\nimport { TreeBuilder } from \"./tree-builder.js\";\nimport type { ParserWarning } from \"./warnings.js\";\n\nexport interface LiveLogUpdate {\n  events: InspectEvent[];\n  trees: InspectRunTree[];\n  warnings: ParserWarning[];\n}\n\nexport interface LiveLogAccumulatorOptions {\n  config: LogIngestConfig;\n  format?: LogSourceFormat;\n  file?: string;\n}\n\nexport class LiveLogAccumulator {\n  readonly #config: LogIngestConfig;\n  readonly #format: LogSourceFormat;\n  readonly #file?: string;\n\n  readonly #normalizer: EventNormalizer;\n  readonly #redactor: Redactor;\n  readonly #treeBuilder: TreeBuilder;\n\n  #events: InspectEvent[] = [];\n  #warnings: ParserWarning[] = [];\n  #trees: InspectRunTree[] = [];\n\n  constructor(options: LiveLogAccumulatorOptions) {\n    // Ensure defaults are applied consistently.\n    this.#config = mergeLogIngestConfig(options.config, {});\n    this.#format = options.format ?? \"auto\";\n    this.#file = options.file;\n\n    this.#normalizer = new EventNormalizer({ config: this.#config });\n    this.#redactor = new Redactor({ rules: this.#config.redact });\n    this.#treeBuilder = new TreeBuilder({ config: this.#config });\n  }\n\n  pushLine(line: string, lineNumber?: number): LiveLogUpdate {\n    try {\n      const parsed = parseLogLine(line, {\n        format: this.#format,\n        file: this.#file,\n        line: lineNumber,\n      });\n\n      const normalized = this.#normalizer.normalizeAll(parsed.records);\n\n      // Redact attributes after normalization, before storing.\n      const redactedEvents = normalized.records.map((e) => ({\n        ...e,\n        attributes: e.attributes ? this.#redactor.redactRecord(e.attributes) : undefined,\n      }));\n\n      this.#events = [...this.#events, ...redactedEvents];\n      this.#warnings = [...this.#warnings, ...parsed.warnings, ...normalized.warnings];\n      this.#trees = this.#treeBuilder.build(this.#events);\n\n      return {\n        events: this.#events,\n        trees: this.#trees,\n        warnings: this.#warnings,\n      };\n    } catch (e) {\n      const msg = e instanceof Error ? e.message : String(e);\n      const warning: ParserWarning = {\n        code: \"UNKNOWN\",\n        message: `LiveLogAccumulator failed to process line (${msg})`,\n        file: this.#file,\n        line: lineNumber,\n        raw: typeof line === \"string\" ? line.slice(0, 500) : undefined,\n      };\n      this.#warnings = [...this.#warnings, warning];\n      return { events: this.#events, trees: this.#trees, warnings: this.#warnings };\n    }\n  }\n\n  getEvents(): InspectEvent[] {\n    return this.#events;\n  }\n\n  getTrees(): InspectRunTree[] {\n    return this.#trees;\n  }\n\n  getWarnings(): ParserWarning[] {\n    return this.#warnings;\n  }\n\n  reset(): void {\n    this.#events = [];\n    this.#trees = [];\n    this.#warnings = [];\n  }\n}\n\n","import {\n  parseLogsToTrees,\n  renderRunTrees,\n  type ParserWarning,\n  type ParserWarningCode,\n} from \"@agent-inspect/core/logs\";\n\nexport interface LogsOptions {\n  format?: \"json\" | \"log4js\" | \"auto\";\n  config?: string;\n  runIdKey?: string;\n  eventKey?: string;\n  timestampKey?: string;\n  messageKey?: string;\n  levelKey?: string;\n  parentIdKey?: string;\n  durationKey?: string;\n  statusKey?: string;\n  json?: boolean;\n  summary?: boolean;\n  warnings?: \"none\" | \"summary\" | \"all\";\n  verbose?: boolean;\n  color?: boolean;\n}\n\nfunction parseRunIdKeys(raw?: string): string[] | undefined {\n  if (typeof raw !== \"string\") return undefined;\n  const parts = raw\n    .split(\",\")\n    .map((s) => s.trim())\n    .filter((s) => s !== \"\");\n  return parts.length > 0 ? parts : undefined;\n}\n\nfunction summarizeWarnings(warnings: ParserWarning[]): Record<ParserWarningCode, number> {\n  const out = {} as Record<ParserWarningCode, number>;\n  for (const w of warnings) {\n    out[w.code] = (out[w.code] ?? 0) + 1;\n  }\n  return out;\n}\n\nfunction formatWarningLine(w: ParserWarning): string {\n  const loc =\n    w.line !== undefined\n      ? `line ${w.line}`\n      : w.file\n        ? \"file\"\n        : \"unknown\";\n  return `- ${loc} ${w.code}: ${w.message}`;\n}\n\nexport async function logs(filePath: string, options: LogsOptions = {}): Promise<void> {\n  try {\n    const fp = typeof filePath === \"string\" ? filePath.trim() : \"\";\n    if (fp === \"\") {\n      console.error(\"Log file path is required\");\n      process.exitCode = 1;\n      return;\n    }\n\n    const warningsMode = options.warnings ?? \"summary\";\n    if (warningsMode !== \"none\" && warningsMode !== \"summary\" && warningsMode !== \"all\") {\n      console.error(`Invalid --warnings value: ${String(options.warnings)}`);\n      process.exitCode = 1;\n      return;\n    }\n\n    const res = await parseLogsToTrees(fp, {\n      format: options.format ?? \"auto\",\n      configPath: options.config,\n      runIdKeys: parseRunIdKeys(options.runIdKey),\n      eventKey: options.eventKey,\n      timestampKey: options.timestampKey,\n      messageKey: options.messageKey,\n      levelKey: options.levelKey,\n      parentIdKey: options.parentIdKey,\n      durationKey: options.durationKey,\n      statusKey: options.statusKey,\n      warnings: warningsMode,\n    });\n\n    const summary = {\n      runs: res.trees.length,\n      events: res.events.length,\n      warnings: res.warnings.length,\n    };\n\n    const hasOutput = res.events.length > 0 && res.trees.length > 0;\n\n    if (options.json) {\n      const payload =\n        warningsMode === \"none\"\n          ? { events: res.events, trees: res.trees, warnings: [], summary }\n          : { ...res, summary };\n      console.log(JSON.stringify(payload, null, 2));\n      if (!hasOutput) process.exitCode = 1;\n      return;\n    }\n\n    // Human output\n    if (!hasOutput) {\n      console.error(\"No valid events found.\");\n      process.exitCode = 1;\n    } else {\n      const treeText = renderRunTrees(res.trees, {\n        summary: options.summary ?? true,\n        showConfidence: \"always\",\n      });\n      console.log(treeText);\n    }\n\n    if (warningsMode === \"none\") return;\n\n    const warnings = res.warnings;\n    const counts = summarizeWarnings(warnings);\n    console.log(\"\");\n    console.log(\"Warnings:\");\n    console.log(`  Total: ${warnings.length}`);\n    if (warningsMode === \"summary\") {\n      for (const [code, count] of Object.entries(counts)) {\n        console.log(`  ${code}: ${count}`);\n      }\n      return;\n    }\n\n    for (const w of warnings) {\n      console.log(formatWarningLine(w));\n    }\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] logs failed: ${msg}`);\n    process.exitCode = 1;\n  }\n}\n","import { open, stat } from \"node:fs/promises\";\nimport { stdin as input } from \"node:process\";\nimport { StringDecoder } from \"node:string_decoder\";\n\nimport {\n  LiveLogAccumulator,\n  loadLogIngestConfig,\n  mergeLogIngestConfig,\n  renderRunTrees,\n  type LogIngestConfig,\n  type ParserWarning,\n  type ParserWarningCode,\n} from \"@agent-inspect/core/logs\";\n\nexport interface TailOptions {\n  file?: string;\n  format?: \"auto\" | \"json\" | \"log4js\";\n  config?: string;\n  runIdKey?: string;\n  eventKey?: string;\n  timestampKey?: string;\n  messageKey?: string;\n  levelKey?: string;\n  parentIdKey?: string;\n  durationKey?: string;\n  statusKey?: string;\n  warnings?: \"summary\" | \"all\" | \"none\";\n  refresh?: string;\n  once?: boolean;\n  json?: boolean;\n  noClear?: boolean;\n  color?: boolean;\n}\n\nfunction parseRunIdKeys(raw?: string): string[] | undefined {\n  if (typeof raw !== \"string\") return undefined;\n  const parts = raw\n    .split(\",\")\n    .map((s) => s.trim())\n    .filter((s) => s !== \"\");\n  return parts.length > 0 ? parts : undefined;\n}\n\nfunction parseRefreshMs(raw?: string): number {\n  const fallback = 250;\n  if (raw === undefined || raw.trim() === \"\") return fallback;\n  const n = Number.parseInt(raw.trim(), 10);\n  if (!Number.isFinite(n) || n <= 0) {\n    throw new Error(`Invalid --refresh value: ${raw}. Provide a positive integer (ms).`);\n  }\n  return n;\n}\n\nfunction summarizeWarnings(warnings: ParserWarning[]): Record<ParserWarningCode, number> {\n  const out = {} as Record<ParserWarningCode, number>;\n  for (const w of warnings) {\n    out[w.code] = (out[w.code] ?? 0) + 1;\n  }\n  return out;\n}\n\nfunction formatWarningLine(w: ParserWarning): string {\n  const loc =\n    w.line !== undefined\n      ? `line ${w.line}`\n      : w.file\n        ? \"file\"\n        : \"unknown\";\n  return `- ${loc} ${w.code}: ${w.message}`;\n}\n\nfunction clearScreen(): void {\n  // Clear screen + move cursor to 0,0\n  process.stdout.write(\"\\x1b[2J\\x1b[0f\");\n}\n\nfunction sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function* readStdinLines(): AsyncGenerator<string> {\n  const { createInterface } = await import(\"node:readline\");\n  const rl = createInterface({ input, crlfDelay: Infinity });\n  try {\n    for await (const line of rl) {\n      yield line;\n    }\n  } finally {\n    rl.close();\n  }\n}\n\nasync function readFileOnce(\n  filePath: string,\n  onLine: (line: string, lineNumber: number) => void,\n): Promise<void> {\n  // Read full file and split into lines. This is acceptable for --once.\n  const fh = await open(filePath, \"r\");\n  try {\n    const text = await fh.readFile({ encoding: \"utf-8\" });\n    const lines = text.split(/\\r?\\n/);\n    for (let i = 0; i < lines.length; i++) {\n      const line = lines[i] ?? \"\";\n      onLine(line, i + 1);\n    }\n  } finally {\n    await fh.close();\n  }\n}\n\nexport async function followFile(\n  filePath: string,\n  options: { refreshMs: number; once: boolean },\n  onLine: (line: string, lineNumber: number) => void,\n  shouldStop: () => boolean,\n): Promise<void> {\n  // Tail -f semantics: start at end of file.\n  let pos = 0;\n  let lineNumber = 0;\n  let carry = \"\";\n\n  const st = await stat(filePath);\n  if (options.once) {\n    await readFileOnce(filePath, onLine);\n    return;\n  }\n\n  let decoder = new StringDecoder(\"utf-8\");\n  pos = st.size;\n\n  while (!shouldStop()) {\n    let next;\n    try {\n      next = await stat(filePath);\n    } catch (e) {\n      const msg = e instanceof Error ? e.message : String(e);\n      throw new Error(`Failed to stat file: ${filePath} (${msg})`);\n    }\n\n    if (next.size < pos) {\n      // File was truncated (or replaced with a shorter file). Reset the read\n      // offset and discard any partial line buffered from the previous contents.\n      // Rename/recreate across inodes is not claimed as fully supported.\n      pos = 0;\n      carry = \"\";\n      lineNumber = 0;\n      decoder = new StringDecoder(\"utf-8\");\n    }\n\n    if (next.size > pos) {\n      const fh = await open(filePath, \"r\");\n      try {\n        const len = next.size - pos;\n        const buf = Buffer.allocUnsafe(Number(len));\n        const { bytesRead } = await fh.read(buf, 0, buf.length, pos);\n        pos += bytesRead;\n\n        const chunk = carry + decoder.write(buf.subarray(0, bytesRead));\n        const parts = chunk.split(/\\r?\\n/);\n        carry = parts.pop() ?? \"\";\n\n        for (const p of parts) {\n          lineNumber += 1;\n          onLine(p, lineNumber);\n        }\n      } finally {\n        await fh.close();\n      }\n    }\n\n    await sleep(options.refreshMs);\n  }\n}\n\nexport async function tail(options: TailOptions = {}): Promise<void> {\n  try {\n    const warningsMode = options.warnings ?? \"summary\";\n    if (warningsMode !== \"none\" && warningsMode !== \"summary\" && warningsMode !== \"all\") {\n      console.error(`Invalid --warnings value: ${String(options.warnings)}`);\n      process.exitCode = 1;\n      return;\n    }\n\n    const refreshMs = parseRefreshMs(options.refresh);\n\n    const cfgBase = await loadLogIngestConfig(options.config);\n    const override: Partial<LogIngestConfig> = {};\n    const runIdKeys = parseRunIdKeys(options.runIdKey);\n    if (runIdKeys !== undefined) override.runIdKeys = runIdKeys;\n    for (const k of [\n      \"eventKey\",\n      \"timestampKey\",\n      \"messageKey\",\n      \"levelKey\",\n      \"parentIdKey\",\n      \"durationKey\",\n      \"statusKey\",\n    ] as const) {\n      const v = (options as any)[k];\n      if (v !== undefined) (override as any)[k] = v;\n    }\n\n    const config = mergeLogIngestConfig(cfgBase, override);\n\n    const format = options.format ?? \"auto\";\n    const filePath = typeof options.file === \"string\" && options.file.trim() !== \"\"\n      ? options.file.trim()\n      : undefined;\n\n    const acc = new LiveLogAccumulator({\n      config,\n      format,\n      file: filePath ?? \"stdin\",\n    });\n\n    const isTty = Boolean(process.stdout.isTTY);\n    const doClear = isTty && options.noClear !== true;\n\n    let stop = false;\n    const shouldStop = () => stop;\n    const onSigInt = () => {\n      stop = true;\n    };\n    process.once(\"SIGINT\", onSigInt);\n\n    let dirty = false;\n    let lastRenderedKey = \"\";\n    let waitingShown = false;\n\n    const renderNow = () => {\n      const events = acc.getEvents();\n      const trees = acc.getTrees();\n      const warnings = acc.getWarnings();\n\n      const summary = {\n        runs: trees.length,\n        events: events.length,\n        warnings: warnings.length,\n      };\n\n      if (options.json) {\n        const payload =\n          warningsMode === \"none\"\n            ? { events, trees, warnings: [], summary }\n            : { events, trees, warnings, summary };\n        process.stdout.write(JSON.stringify(payload) + \"\\n\");\n        return;\n      }\n\n      if (doClear) clearScreen();\n\n      if (!waitingShown && events.length === 0 && isTty) {\n        console.log(\"Waiting for logs...\");\n        waitingShown = true;\n      }\n\n      if (trees.length > 0) {\n        const text = renderRunTrees(trees, { summary: true, showConfidence: \"always\" });\n        console.log(text);\n      }\n\n      if (warningsMode === \"none\") return;\n\n      console.log(\"\");\n      console.log(\"Warnings:\");\n      console.log(`  Total: ${warnings.length}`);\n      if (warningsMode === \"summary\") {\n        const counts = summarizeWarnings(warnings);\n        for (const [code, count] of Object.entries(counts)) {\n          console.log(`  ${code}: ${count}`);\n        }\n      } else {\n        for (const w of warnings) console.log(formatWarningLine(w));\n      }\n    };\n\n    const renderLoop = async () => {\n      while (!shouldStop()) {\n        if (dirty) {\n          // Avoid re-rendering identical state when no new events/warnings.\n          const key = `${acc.getEvents().length}:${acc.getWarnings().length}:${acc.getTrees().length}`;\n          if (key !== lastRenderedKey) {\n            lastRenderedKey = key;\n            renderNow();\n          }\n          dirty = false;\n        }\n        await sleep(refreshMs);\n      }\n    };\n\n    const renderTask = renderLoop();\n\n    const onLine = (line: string, lineNumber: number) => {\n      acc.pushLine(line, lineNumber);\n      dirty = true;\n    };\n\n    let endedNaturally = false;\n\n    if (filePath) {\n      // Fail clearly if file does not exist.\n      try {\n        await stat(filePath);\n      } catch (e) {\n        const msg = e instanceof Error ? e.message : String(e);\n        console.error(`Log file does not exist: ${filePath} (${msg})`);\n        process.exitCode = 1;\n        stop = true;\n        return;\n      }\n\n      await followFile(\n        filePath,\n        { refreshMs, once: options.once === true },\n        onLine,\n        shouldStop,\n      );\n      endedNaturally = options.once === true;\n    } else {\n      let lineNumber = 0;\n      for await (const line of readStdinLines()) {\n        lineNumber += 1;\n        onLine(line, lineNumber);\n        if (shouldStop()) break;\n      }\n      endedNaturally = !shouldStop();\n      stop = true;\n    }\n\n    // Final render on exit.\n    dirty = true;\n    renderNow();\n\n    if (endedNaturally && acc.getEvents().length === 0) {\n      if (!options.json) {\n        console.error(\"No valid events found.\");\n      }\n      process.exitCode = 1;\n    }\n\n    stop = true;\n    await renderTask;\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] tail failed: ${msg}`);\n    process.exitCode = 1;\n  }\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { resolveTraceDir, type RedactionProfile } from \"@agent-inspect/core/advanced\";\nimport {\n  exportRunTree,\n  validateExport,\n  type ExportFormat,\n  type ExportOptions,\n} from \"@agent-inspect/core/exporters\";\nimport { persistedInspectEventsToRunTrees } from \"@agent-inspect/core/persisted\";\n\nimport {\n  resolveOutputOption,\n  resolveRedactionProfileOption,\n} from \"./cli-option-aliases.js\";\nimport { readRunPersistedEvents } from \"./read-run.js\";\n\nexport interface ExportCommandOptions {\n  dir?: string;\n  format?: string;\n  output?: string;\n  out?: string;\n  json?: boolean;\n  validate?: boolean;\n  includeAttributes?: boolean;\n  noMetadata?: boolean;\n  noErrors?: boolean;\n  redactionProfile?: string;\n  profile?: string;\n}\n\nfunction parseRedactionProfile(s: string | undefined): RedactionProfile {\n  const v = (s ?? \"local\").trim().toLowerCase();\n  if (v === \"local\" || v === \"share\" || v === \"strict\") {\n    return v;\n  }\n  throw new Error(\n    `Unsupported --redaction-profile \"${s ?? \"\"}\". Use local, share, or strict.`,\n  );\n}\n\nfunction parseExportFormat(s: string | undefined): ExportFormat {\n  const v = (s ?? \"markdown\").trim().toLowerCase();\n  if (\n    v === \"markdown\" ||\n    v === \"html\" ||\n    v === \"openinference\" ||\n    v === \"otlp-json\"\n  ) {\n    return v;\n  }\n  throw new Error(\n    `Unsupported --format \"${s ?? \"\"}\". Use markdown, html, openinference, or otlp-json.`,\n  );\n}\n\nexport async function exportCommand(\n  runId: string,\n  options: ExportCommandOptions = {},\n): Promise<void> {\n  const id =\n    typeof runId === \"string\" && runId.trim() !== \"\" ? runId.trim() : \"\";\n  if (id === \"\") {\n    console.error(\"Run id is required\");\n    process.exitCode = 1;\n    return;\n  }\n\n  let format: ExportFormat;\n  let redactionProfile: RedactionProfile;\n  try {\n    format = parseExportFormat(options.format);\n    redactionProfile = parseRedactionProfile(resolveRedactionProfileOption(options));\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(msg);\n    process.exitCode = 1;\n    return;\n  }\n\n  const traceDir = resolveTraceDir({ dir: options.dir });\n  let events;\n  try {\n    const result = await readRunPersistedEvents(id, traceDir);\n    events = result?.events ?? [];\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] export failed: ${msg}`);\n    process.exitCode = 1;\n    return;\n  }\n\n  if (events.length === 0) {\n    console.error(`Run not found or trace is empty: ${id}\\nTrace directory: ${traceDir}`);\n    process.exitCode = 1;\n    return;\n  }\n\n  let tree;\n  try {\n    const trees = persistedInspectEventsToRunTrees(events);\n    tree = trees.find((candidate) => candidate.runId === id) ?? trees[0];\n    if (tree === undefined) {\n      throw new Error(\"No run tree could be built from persisted events\");\n    }\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] export failed: ${msg}`);\n    process.exitCode = 1;\n    return;\n  }\n\n  const exportOpts: ExportOptions = {\n    format,\n    includeMetadata: options.noMetadata === true ? false : true,\n    includeAttributes: options.includeAttributes === true,\n    includeErrors: options.noErrors === true ? false : true,\n    pretty: true,\n    redacted: true,\n    maxAttributeLength: 500,\n    redactionProfile,\n  };\n\n  const result = exportRunTree(tree, exportOpts);\n  const validation =\n    options.validate === true ? validateExport(result) : undefined;\n\n  if (validation !== undefined && !validation.ok) {\n    process.exitCode = 1;\n  }\n\n  const resolvedOutput = resolveOutputOption(options);\n  const outPath =\n    resolvedOutput !== undefined ? path.resolve(resolvedOutput) : undefined;\n\n  if (outPath !== undefined) {\n    await mkdir(path.dirname(outPath), { recursive: true });\n    await writeFile(outPath, result.content, \"utf-8\");\n    const vlabel =\n      validation !== undefined ? (validation.ok ? \"ok\" : \"failed\") : \"skipped\";\n    // Human progress stays on stderr so `--json` stdout remains a single parseable object.\n    console.error(\n      `Wrote ${result.fileExtension} export to ${outPath} (validation: ${vlabel})`,\n    );\n    if (validation !== undefined && !validation.ok) {\n      console.error(\"Validation errors:\", validation.errors.join(\"; \"));\n    }\n  }\n\n  if (options.json === true) {\n    const payload: Record<string, unknown> = {\n      format: result.format,\n      contentType: result.contentType,\n      fileExtension: result.fileExtension,\n      warnings: [...result.warnings, ...(validation?.warnings ?? [])],\n      validation,\n    };\n    if (outPath !== undefined) {\n      payload.out = outPath;\n    } else {\n      payload.content = result.content;\n    }\n    console.log(JSON.stringify(payload, null, 2));\n    if (validation !== undefined && !validation.ok) {\n      console.error(\"Validation errors:\", validation.errors.join(\"; \"));\n    }\n  } else if (outPath === undefined) {\n    console.log(result.content);\n    if (options.validate === true && validation !== undefined) {\n      if (validation.ok) {\n        console.error(`Validation: ok (${validation.warnings.length} warning(s))`);\n      } else {\n        console.error(\"Validation failed:\", validation.errors.join(\"; \"));\n      }\n      if (validation.warnings.length > 0) {\n        console.error(\"Warnings:\", validation.warnings.join(\"; \"));\n      }\n    }\n  }\n}\n","/**\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","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","/**\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\";\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 { 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 { 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 { 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","export type {\n  ExportFormat,\n  ExportOptions,\n  ExportResult,\n  ExportValidationResult,\n  TraceExporter,\n} from \"../exporters/types.js\";\nexport { EXPORT_PAYLOAD_VERSION } from \"../exporters/types.js\";\nexport {\n  mergeExportDefaults,\n  exportRunTree,\n  redactRunTreeForExport,\n  validateExport,\n  manualTraceEventsToRunTree,\n  exportMarkdown,\n  exportHtml,\n  exportOpenInference,\n  exportOtlpJson,\n  validateExportContent,\n  validateOpenInferenceFixture,\n  validateOtlpJsonFixture,\n  validateOpenInferenceSemanticFixture,\n  validateOtlpJsonSemanticFixture,\n} from \"../exporters/index.js\";\nexport { OTEL_GEN_AI_SEMCONV_PIN } from \"../exporters/semconv.js\";\nexport type { OpenInferenceExport, OpenInferenceSpan } from \"../exporters/openinference-exporter.js\";\nexport type { ReportFormat, ReportOptions, ReportResult } from \"../report.js\";\nexport { buildRunReport } from \"../report.js\";\nexport {\n  safeString,\n  escapeMarkdown,\n  escapeHtml,\n  stableJson,\n  compactAttributes,\n  summarizeTree,\n  flattenTree,\n} from \"../exporters/helpers.js\";\n","/**\n * Canonical CLI spellings are `--output` and `--redaction-profile`.\n * Legacy aliases `--out` and `--profile` remain supported through the current major.\n */\n\nexport function resolveOutputOption(options: {\n  output?: string;\n  out?: string;\n}): string | undefined {\n  const canonical = options.output?.trim();\n  if (canonical) return canonical;\n  const legacy = options.out?.trim();\n  return legacy || undefined;\n}\n\nexport function resolveRedactionProfileOption(options: {\n  redactionProfile?: string;\n  profile?: string;\n}): string | undefined {\n  const canonical = options.redactionProfile?.trim();\n  if (canonical) return canonical;\n  const legacy = options.profile?.trim();\n  return legacy || undefined;\n}\n","import type { DiffOptions } from \"@agent-inspect/core/diff\";\nimport { parseDuration, resolveTraceDir } from \"@agent-inspect/core/advanced\";\nimport {\n  diffTraceEvents,\n  renderRunDiff,\n} from \"@agent-inspect/core/diff\";\n\nimport { readRunTraceEvents } from \"./read-run.js\";\n\nexport interface DiffCommandOptions {\n  dir?: string;\n  json?: boolean;\n  ignoreDuration?: boolean;\n  durationThreshold?: string;\n  focus?: \"all\" | \"errors\" | \"structure\" | \"outputs\";\n  check?: \"all\" | \"structure\" | \"outputs\" | \"errors\" | \"timing\";\n  verbose?: boolean;\n}\n\nfunction parseFocus(s: string | undefined): DiffOptions[\"focus\"] {\n  const v = (s ?? \"all\").trim().toLowerCase();\n  if (v === \"all\" || v === \"errors\" || v === \"structure\" || v === \"outputs\") {\n    return v;\n  }\n  throw new Error(\n    `Invalid --focus \"${s ?? \"\"}\". Use all, errors, structure, or outputs.`,\n  );\n}\n\nfunction parseCheck(s: string | undefined): DiffOptions[\"check\"] {\n  const v = (s ?? \"all\").trim().toLowerCase();\n  if (\n    v === \"all\" ||\n    v === \"structure\" ||\n    v === \"outputs\" ||\n    v === \"errors\" ||\n    v === \"timing\"\n  ) {\n    return v;\n  }\n  throw new Error(\n    `Invalid --check \"${s ?? \"\"}\". Use all, structure, outputs, errors, or timing.`,\n  );\n}\n\nexport async function diffCommand(\n  leftRunId: string,\n  rightRunId: string,\n  options: DiffCommandOptions = {},\n): Promise<void> {\n  const leftId =\n    typeof leftRunId === \"string\" && leftRunId.trim() !== \"\"\n      ? leftRunId.trim()\n      : \"\";\n  const rightId =\n    typeof rightRunId === \"string\" && rightRunId.trim() !== \"\"\n      ? rightRunId.trim()\n      : \"\";\n  if (leftId === \"\" || rightId === \"\") {\n    console.error(\"Both left and right run ids are required\");\n    process.exitCode = 1;\n    return;\n  }\n\n  let focus: DiffOptions[\"focus\"];\n  let check: DiffOptions[\"check\"];\n  try {\n    focus = parseFocus(options.focus);\n    check = parseCheck(options.check);\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(msg);\n    process.exitCode = 1;\n    return;\n  }\n\n  let durationThresholdMs: number | undefined;\n  if (options.durationThreshold !== undefined && options.durationThreshold.trim() !== \"\") {\n    try {\n      durationThresholdMs = parseDuration(options.durationThreshold.trim());\n    } catch (e) {\n      const msg = e instanceof Error ? e.message : String(e);\n      console.error(`Invalid --duration-threshold: ${msg}`);\n      process.exitCode = 1;\n      return;\n    }\n  }\n\n  const traceDir = resolveTraceDir({ dir: options.dir });\n\n  let leftEvents;\n  let rightEvents;\n  try {\n    const leftResult = await readRunTraceEvents(leftId, traceDir);\n    const rightResult = await readRunTraceEvents(rightId, traceDir);\n    leftEvents = leftResult?.events ?? [];\n    rightEvents = rightResult?.events ?? [];\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] diff failed: ${msg}`);\n    process.exitCode = 1;\n    return;\n  }\n\n  if (leftEvents.length === 0) {\n    console.error(\n      `Run not found or trace is empty: ${leftId}\\nTrace directory: ${traceDir}`,\n    );\n    process.exitCode = 1;\n    return;\n  }\n  if (rightEvents.length === 0) {\n    console.error(\n      `Run not found or trace is empty: ${rightId}\\nTrace directory: ${traceDir}`,\n    );\n    process.exitCode = 1;\n    return;\n  }\n\n  const diffOpts: DiffOptions = {\n    ignoreDuration: options.ignoreDuration === true,\n    durationThresholdMs,\n    focus,\n    check,\n  };\n\n  let result;\n  try {\n    result = diffTraceEvents(leftEvents, rightEvents, diffOpts);\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] diff failed: ${msg}`);\n    process.exitCode = 1;\n    return;\n  }\n\n  if (options.json === true) {\n    console.log(JSON.stringify(result, null, 2));\n    return;\n  }\n\n  console.log(\n    renderRunDiff(result, {\n      verbose: options.verbose === true,\n      color: false,\n      json: false,\n    }),\n  );\n}\n","export type {\n  DiffSeverity,\n  DiffKind,\n  DiffPathSegment,\n  DiffPath,\n  RunDiffItem,\n  StepComparable,\n  RunComparable,\n  RunDiffSummary,\n  RunDiffResult,\n  DiffOptions,\n  RenderDiffOptions,\n} from \"../diff/types.js\";\nexport {\n  manualTraceEventsToComparableRun,\n  diffRuns,\n  diffTraceEvents,\n  renderRunDiff,\n} from \"../diff/index.js\";\n","import {\n  buildRunTimeline,\n  renderTimeline,\n  resolveTraceDir,\n} from \"@agent-inspect/core/advanced\";\n\nimport { readRunTraceEvents } from \"./read-run.js\";\n\nexport interface TimelineCommandOptions {\n  dir?: string;\n  json?: boolean;\n  focus?: string;\n}\n\nexport async function timelineCommand(\n  runId: string,\n  options: TimelineCommandOptions = {},\n): Promise<void> {\n  const id =\n    typeof runId === \"string\" && runId.trim() !== \"\" ? runId.trim() : \"\";\n  if (id === \"\") {\n    console.error(\"Run id is required\");\n    process.exitCode = 1;\n    return;\n  }\n\n  const traceDir = resolveTraceDir({ dir: options.dir });\n  let events;\n  try {\n    const result = await readRunTraceEvents(id, traceDir);\n    events = result?.events ?? [];\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] timeline failed: ${msg}`);\n    process.exitCode = 1;\n    return;\n  }\n\n  if (events.length === 0) {\n    console.log(`Run not found: ${id}`);\n    console.log(`Trace directory: ${traceDir}`);\n    process.exitCode = 1;\n    return;\n  }\n\n  const focus =\n    options.focus?.trim().toLowerCase() === \"slow\" ? \"slow\" : \"all\";\n\n  const timeline = buildRunTimeline(events, {\n    focus: focus === \"slow\" ? \"slow\" : \"all\",\n  });\n\n  if (options.json) {\n    console.log(JSON.stringify(timeline, null, 2));\n    return;\n  }\n\n  console.log(renderTimeline(timeline, { focus }));\n}\n","import {\n  TraceDirectory,\n  buildTraceStats,\n  extractMetadata,\n  parseDuration,\n  renderTraceStats,\n  resolveTraceDir,\n} from \"@agent-inspect/core/advanced\";\n\nimport { assessTraceDirectoryScale, emitScaleWarnings } from \"./trace-dir-scale.js\";\n\nexport interface StatsCommandOptions {\n  dir?: string;\n  since?: string;\n  json?: boolean;\n  correlationId?: string;\n  groupId?: string;\n}\n\nexport async function statsCommand(\n  options: StatsCommandOptions = {},\n): Promise<void> {\n  try {\n    const traceDir = resolveTraceDir({ dir: options.dir });\n    const td = new TraceDirectory({ dir: traceDir });\n\n    if (typeof options.since === \"string\" && options.since.trim() !== \"\") {\n      parseDuration(options.since.trim());\n    }\n\n    const files = await td.list();\n    const scale = await assessTraceDirectoryScale(td);\n    emitScaleWarnings(scale, { json: options.json });\n    if (files.length === 0) {\n      if (options.json) {\n        console.log(\n          JSON.stringify({\n            traceDir,\n            totalRuns: 0,\n            successCount: 0,\n            errorCount: 0,\n            runningCount: 0,\n            unknownCount: 0,\n            errorRate: 0,\n            duration: {},\n            totalSteps: 0,\n            avgStepsPerRun: 0,\n            totalLlmSteps: 0,\n            totalToolSteps: 0,\n            totalErrorSteps: 0,\n            slowestRuns: [],\n            slowestSteps: [],\n          }),\n        );\n      } else {\n        console.log(\"No AgentInspect runs found\");\n        console.log(`Trace directory: ${traceDir}`);\n      }\n      return;\n    }\n\n    const metas = [];\n    for (const fileName of files) {\n      try {\n        metas.push(await extractMetadata(td.getPath(fileName)));\n      } catch {\n        /* skip */\n      }\n    }\n\n    const stats = await buildTraceStats(metas, {\n      traceDir,\n      since: options.since,\n      correlationId: options.correlationId,\n      groupId: options.groupId,\n    });\n\n    if (options.json) {\n      console.log(JSON.stringify(stats, null, 2));\n      return;\n    }\n\n    console.log(renderTraceStats(stats));\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] stats failed: ${msg}`);\n    process.exitCode = 1;\n  }\n}\n","import {\n  TraceDirectory,\n  filterMetasBySessionScope,\n  formatStepLabel,\n  loadSessionRunRecords,\n  loadTraceMetadataList,\n  parseDuration,\n  parseDurationFilter,\n  resolveTraceDir,\n  searchTraces,\n} from \"@agent-inspect/core/advanced\";\n\nimport { assessTraceDirectoryScale, emitScaleWarnings } from \"./trace-dir-scale.js\";\n\nexport interface SearchCommandOptions {\n  dir?: string;\n  since?: string;\n  status?: string;\n  kind?: string;\n  type?: string;\n  name?: string;\n  tool?: string;\n  duration?: string;\n  limit?: string;\n  session?: string;\n  correlateGroup?: boolean;\n  observation?: string;\n  json?: boolean;\n}\n\nfunction parseLimit(raw?: string): number {\n  if (raw === undefined || raw.trim() === \"\") return 50;\n  const n = Number.parseInt(raw, 10);\n  if (!Number.isFinite(n) || n <= 0) return 50;\n  return Math.min(n, 500);\n}\n\nexport async function searchCommand(\n  options: SearchCommandOptions = {},\n): Promise<void> {\n  try {\n    const traceDir = resolveTraceDir({ dir: options.dir });\n    const td = new TraceDirectory({ dir: traceDir });\n\n    if (typeof options.since === \"string\" && options.since.trim() !== \"\") {\n      parseDuration(options.since.trim());\n    }\n    if (options.duration) {\n      parseDurationFilter(options.duration);\n    }\n\n    const files = await td.list();\n    const scale = await assessTraceDirectoryScale(td);\n    emitScaleWarnings(scale, { json: options.json });\n    let metas = await loadTraceMetadataList(traceDir, files, (f) =>\n      td.getPath(f),\n    );\n\n    const sessionId = options.session?.trim();\n    if (sessionId) {\n      const records = await loadSessionRunRecords(metas);\n      const scoped = filterMetasBySessionScope(metas, records, {\n        sessionId,\n        correlateByGroupId: options.correlateGroup === true,\n      });\n      if (scoped.notFound) {\n        if (options.json) {\n          console.log(JSON.stringify([], null, 2));\n        } else {\n          console.log(`Session not found: ${sessionId}`);\n          console.log(`Trace directory: ${traceDir}`);\n        }\n        process.exitCode = 1;\n        return;\n      }\n      metas = scoped.metas;\n    }\n\n    const status =\n      options.status === \"success\" ||\n      options.status === \"error\" ||\n      options.status === \"running\" ||\n      options.status === \"unknown\"\n        ? options.status\n        : undefined;\n\n    const results = await searchTraces(metas, {\n      traceDir,\n      since: options.since,\n      status,\n      kind: options.kind,\n      type: options.type,\n      name: options.name,\n      tool: options.tool,\n      duration: options.duration,\n      limit: parseLimit(options.limit),\n      ...(sessionId ? { session: sessionId } : {}),\n      ...(options.correlateGroup ? { correlateGroup: true } : {}),\n      ...(options.observation ? { observation: options.observation } : {}),\n    });\n\n    if (options.json) {\n      console.log(JSON.stringify(results, null, 2));\n      return;\n    }\n\n    if (results.length === 0) {\n      console.log(\"No matching traces found\");\n      console.log(`Trace directory: ${traceDir}`);\n      return;\n    }\n\n    console.log(`Search results (${results.length})`);\n    for (const r of results) {\n      const step =\n        r.stepName !== undefined\n          ? ` | ${formatStepLabel(r.stepType ?? \"step\", r.stepName)}`\n          : \"\";\n      const dur =\n        r.durationMs !== undefined ? ` | ${r.durationMs}ms` : \"\";\n      console.log(\n        `${r.runId}${step} | ${r.runStatus}${dur} | ${r.matchReason}`,\n      );\n    }\n    console.log(\"\");\n    console.log(`Trace directory: ${traceDir}`);\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] search failed: ${msg}`);\n    process.exitCode = 1;\n  }\n}\n","import {\n  buildActivitySummary,\n  buildRunTimeline,\n  buildSessionIndex,\n  parseDuration,\n  renderActivitySummaryHuman,\n  renderTimeline,\n  resolveTraceDir,\n  type HandoffEdge,\n  type SessionIndex,\n  type SessionSummary,\n} from \"@agent-inspect/core/advanced\";\n\nimport { readRunTraceEvents } from \"./read-run.js\";\nimport { loadSessionRuns } from \"./sessions-load.js\";\n\nexport interface SessionsCommandOptions {\n  dir?: string;\n  json?: boolean;\n  correlateGroup?: boolean;\n  since?: string;\n  staleAfter?: string;\n  session?: string;\n}\n\nexport interface SessionCommandOptions {\n  dir?: string;\n  json?: boolean;\n  timeline?: boolean;\n  criticalPath?: boolean;\n  diagnostics?: boolean;\n}\n\nasync function loadSessionIndex(\n  traceDir: string,\n  options: {\n    correlateGroup?: boolean;\n    staleAfter?: string;\n  } = {},\n): Promise<SessionIndex> {\n  const { runs } = await loadSessionRuns(traceDir);\n  const staleThresholdMs =\n    options.staleAfter && options.staleAfter.trim() !== \"\"\n      ? parseDuration(options.staleAfter.trim())\n      : undefined;\n  return buildSessionIndex(runs, {\n    correlateByGroupId: options.correlateGroup === true,\n    staleThresholdMs,\n  });\n}\n\nfunction findSession(\n  index: SessionIndex,\n  sessionId: string,\n): SessionSummary | undefined {\n  return index.sessions.find((session) => session.sessionId === sessionId);\n}\n\nfunction latestSession(index: SessionIndex): SessionSummary | undefined {\n  if (index.sessions.length === 0) return undefined;\n  return [...index.sessions].sort(\n    (a, b) => Date.parse(b.lastActivity) - Date.parse(a.lastActivity),\n  )[0];\n}\n\nfunction parseSinceCutoff(since: string | undefined): number | undefined {\n  if (!since || since.trim() === \"\") return undefined;\n  return Date.now() - parseDuration(since.trim());\n}\n\nfunction sessionsInSinceWindow(\n  index: SessionIndex,\n  since?: string,\n): SessionSummary[] {\n  const cutoff = parseSinceCutoff(since);\n  if (cutoff === undefined) return index.sessions;\n  return index.sessions.filter(\n    (session) => Date.parse(session.lastActivity) >= cutoff,\n  );\n}\n\nfunction renderSessionsHuman(index: SessionIndex, traceDir: string): void {\n  if (index.sessions.length === 0) {\n    console.log(\"No sessions found\");\n    console.log(`Trace directory: ${traceDir}`);\n    if (index.unscopedRunIds.length > 0) {\n      console.log(\n        `Unscoped runs (no sessionId): ${index.unscopedRunIds.join(\", \")}`,\n      );\n    }\n    return;\n  }\n\n  console.log(\"Sessions:\");\n  for (const session of index.sessions) {\n    const suffix = session.workflowId ? ` workflow=${session.workflowId}` : \"\";\n    console.log(\n      `  ${session.sessionId} [${session.status}] (${session.runIds.length} run${session.runIds.length === 1 ? \"\" : \"s\"})${suffix}`,\n    );\n  }\n\n  if (index.unscopedRunIds.length > 0) {\n    console.log(\"\");\n    console.log(\n      `Unscoped runs (no sessionId): ${index.unscopedRunIds.join(\", \")}`,\n    );\n  }\n}\n\nfunction renderSessionHuman(\n  session: SessionSummary,\n  index: SessionIndex,\n  options: SessionCommandOptions,\n): void {\n  console.log(`Session: ${session.sessionId}`);\n  console.log(`Status: ${session.status}`);\n  console.log(`Runs: ${session.runIds.join(\", \")}`);\n  if (session.lastActivity) console.log(`Last activity: ${session.lastActivity}`);\n  if (session.lastError) {\n    console.log(\n      `Last error: ${session.lastError.message} (run ${session.lastError.runId})`,\n    );\n  }\n\n  if (session.handoffs.length > 0) {\n    console.log(\"\");\n    console.log(\"Handoffs:\");\n    for (const edge of session.handoffs) {\n      console.log(\n        `  ${edge.from} -> ${edge.to} (${edge.confidence}, ${edge.source})`,\n      );\n    }\n  }\n\n  if (session.retries.length > 0) {\n    console.log(\"\");\n    console.log(\"Retries:\");\n    for (const retry of session.retries) {\n      const attempt =\n        retry.attempt !== undefined ? ` attempt=${retry.attempt}` : \"\";\n      const of = retry.retryOf !== undefined ? ` retryOf=${retry.retryOf}` : \"\";\n      console.log(\n        `  ${retry.runId}${attempt}${of} (${retry.confidence})`,\n      );\n    }\n  }\n\n  if (options.criticalPath && session.criticalPath.length > 0) {\n    console.log(\"\");\n    console.log(\"Critical path:\");\n    for (const step of session.criticalPath) {\n      const duration =\n        step.durationMs !== undefined ? ` ${step.durationMs}ms` : \"\";\n      console.log(\n        `  ${step.runId}${step.name ? ` (${step.name})` : \"\"}${duration} [${step.confidence}]`,\n      );\n    }\n  }\n\n  if (options.diagnostics && index.warnings.length > 0) {\n    const scoped = index.warnings.filter(\n      (warning) =>\n        warning.sessionId === session.sessionId || !warning.sessionId,\n    );\n    if (scoped.length > 0) {\n      console.log(\"\");\n      console.log(\"Diagnostics:\");\n      for (const warning of scoped) {\n        const run = warning.runId ? ` run=${warning.runId}` : \"\";\n        console.log(`  [${warning.code}]${run} ${warning.message}`);\n      }\n    }\n  }\n}\n\nfunction collectHandoffs(\n  index: SessionIndex,\n  sessionId?: string,\n): Array<HandoffEdge & { sessionId: string }> {\n  const sessions = sessionId\n    ? index.sessions.filter((s) => s.sessionId === sessionId)\n    : index.sessions;\n  const out: Array<HandoffEdge & { sessionId: string }> = [];\n  for (const session of sessions) {\n    for (const edge of session.handoffs) {\n      out.push({ ...edge, sessionId: session.sessionId });\n    }\n  }\n  return out.sort((a, b) => {\n    const session = a.sessionId.localeCompare(b.sessionId);\n    if (session !== 0) return session;\n    const from = a.from.localeCompare(b.from);\n    if (from !== 0) return from;\n    return a.to.localeCompare(b.to);\n  });\n}\n\nexport async function sessionsCommand(\n  options: SessionsCommandOptions = {},\n): Promise<void> {\n  try {\n    const traceDir = resolveTraceDir({ dir: options.dir });\n    const index = await loadSessionIndex(traceDir, {\n      correlateGroup: options.correlateGroup,\n      staleAfter: options.staleAfter,\n    });\n\n    if (options.json) {\n      console.log(\n        JSON.stringify(\n          {\n            traceDir,\n            sessions: index.sessions,\n            unscopedRunIds: index.unscopedRunIds,\n            warnings: index.warnings,\n          },\n          null,\n          2,\n        ),\n      );\n      return;\n    }\n\n    renderSessionsHuman(index, traceDir);\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] sessions failed: ${msg}`);\n    process.exitCode = 1;\n  }\n}\n\nexport async function sessionsLatestCommand(\n  options: SessionsCommandOptions = {},\n): Promise<void> {\n  try {\n    const traceDir = resolveTraceDir({ dir: options.dir });\n    const index = await loadSessionIndex(traceDir, {\n      correlateGroup: options.correlateGroup,\n      staleAfter: options.staleAfter,\n    });\n    const latest = latestSession(index);\n    if (!latest) {\n      if (options.json) {\n        console.log(JSON.stringify({ ok: false, traceDir, reason: \"no-sessions\" }, null, 2));\n      } else {\n        console.log(\"No sessions found\");\n        console.log(`Trace directory: ${traceDir}`);\n      }\n      process.exitCode = 1;\n      return;\n    }\n    if (options.json) {\n      console.log(JSON.stringify({ ok: true, traceDir, session: latest }, null, 2));\n      return;\n    }\n    console.log(`Latest session: ${latest.sessionId}`);\n    console.log(`Status: ${latest.status}`);\n    console.log(`Last activity: ${latest.lastActivity}`);\n    console.log(`Runs: ${latest.runIds.join(\", \")}`);\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] sessions latest failed: ${msg}`);\n    process.exitCode = 1;\n  }\n}\n\nexport async function sessionsActivityCommand(\n  options: SessionsCommandOptions = {},\n): Promise<void> {\n  try {\n    const traceDir = resolveTraceDir({ dir: options.dir });\n    const index = await loadSessionIndex(traceDir, {\n      correlateGroup: options.correlateGroup,\n      staleAfter: options.staleAfter,\n    });\n    const summary = buildActivitySummary(index, { since: options.since });\n    if (options.json) {\n      console.log(JSON.stringify({ ok: true, traceDir, ...summary }, null, 2));\n      return;\n    }\n    console.log(renderActivitySummaryHuman(summary));\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] sessions activity failed: ${msg}`);\n    process.exitCode = 1;\n  }\n}\n\nexport async function sessionsHandoffsCommand(\n  options: SessionsCommandOptions = {},\n): Promise<void> {\n  try {\n    const traceDir = resolveTraceDir({ dir: options.dir });\n    const index = await loadSessionIndex(traceDir, {\n      correlateGroup: options.correlateGroup,\n    });\n    const handoffs = collectHandoffs(index, options.session);\n    if (options.json) {\n      console.log(\n        JSON.stringify({ ok: true, traceDir, count: handoffs.length, handoffs }, null, 2),\n      );\n      return;\n    }\n    if (handoffs.length === 0) {\n      console.log(\"No handoffs found\");\n      return;\n    }\n    for (const edge of handoffs) {\n      console.log(\n        `${edge.sessionId}: ${edge.from} -> ${edge.to} (${edge.confidence})`,\n      );\n    }\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] sessions handoffs failed: ${msg}`);\n    process.exitCode = 1;\n  }\n}\n\nexport async function sessionsErrorsCommand(\n  options: SessionsCommandOptions = {},\n): Promise<void> {\n  try {\n    const traceDir = resolveTraceDir({ dir: options.dir });\n    const index = await loadSessionIndex(traceDir, {\n      correlateGroup: options.correlateGroup,\n      staleAfter: options.staleAfter,\n    });\n    const scoped = sessionsInSinceWindow(index, options.since);\n    const errors = scoped.filter((session) => session.status === \"error\");\n    if (options.json) {\n      console.log(\n        JSON.stringify(\n          { ok: true, traceDir, count: errors.length, sessions: errors },\n          null,\n          2,\n        ),\n      );\n      return;\n    }\n    if (errors.length === 0) {\n      console.log(\"No error sessions found\");\n      return;\n    }\n    for (const session of errors) {\n      const detail = session.lastError?.message ?? \"error\";\n      console.log(`${session.sessionId}  ${detail}  (${session.runIds.length} runs)`);\n    }\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] sessions errors failed: ${msg}`);\n    process.exitCode = 1;\n  }\n}\n\nexport async function sessionsShowCommand(\n  sessionId: string,\n  options: SessionCommandOptions = {},\n): Promise<void> {\n  await sessionCommand(sessionId, options);\n}\n\nexport async function sessionCommand(\n  sessionId: string,\n  options: SessionCommandOptions = {},\n): Promise<void> {\n  const id =\n    typeof sessionId === \"string\" && sessionId.trim() !== \"\"\n      ? sessionId.trim()\n      : \"\";\n  if (id === \"\") {\n    console.error(\"Session id is required\");\n    process.exitCode = 1;\n    return;\n  }\n\n  try {\n    const traceDir = resolveTraceDir({ dir: options.dir });\n    const index = await loadSessionIndex(traceDir);\n    const session = findSession(index, id);\n\n    if (!session) {\n      console.log(`Session not found: ${id}`);\n      console.log(`Trace directory: ${traceDir}`);\n      process.exitCode = 1;\n      return;\n    }\n\n    if (options.json) {\n      const timelines: Record<string, unknown> = {};\n      if (options.timeline) {\n        for (const runId of session.runIds) {\n          const result = await readRunTraceEvents(runId, traceDir);\n          if (result && result.events.length > 0) {\n            timelines[runId] = buildRunTimeline(result.events);\n          }\n        }\n      }\n\n      console.log(\n        JSON.stringify(\n          {\n            traceDir,\n            session,\n            warnings: index.warnings.filter(\n              (warning) =>\n                warning.sessionId === id || warning.sessionId === undefined,\n            ),\n            ...(options.timeline ? { timelines } : {}),\n          },\n          null,\n          2,\n        ),\n      );\n      return;\n    }\n\n    renderSessionHuman(session, index, options);\n\n    if (options.timeline) {\n      for (const runId of session.runIds) {\n        const result = await readRunTraceEvents(runId, traceDir);\n        if (!result || result.events.length === 0) continue;\n        const timeline = buildRunTimeline(result.events);\n        console.log(\"\");\n        console.log(`Timeline: ${runId}`);\n        console.log(renderTimeline(timeline));\n      }\n    }\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] session failed: ${msg}`);\n    process.exitCode = 1;\n  }\n}\n","import path from \"node:path\";\n\nimport {\n  TraceDirectory,\n  enrichSessionRunRecord,\n  loadSessionRunRecords,\n  loadTraceMetadataList,\n  type SessionRunRecord,\n  type TraceMetadata,\n  type TraceMetadataStatus,\n} from \"@agent-inspect/core/advanced\";\n\nfunction isModuleNotFound(e: unknown): boolean {\n  return (\n    e !== null &&\n    typeof e === \"object\" &&\n    \"code\" in e &&\n    ((e as NodeJS.ErrnoException).code === \"ERR_MODULE_NOT_FOUND\" ||\n      (e as NodeJS.ErrnoException).code === \"MODULE_NOT_FOUND\")\n  );\n}\n\nfunction toStatus(raw: string | null | undefined): TraceMetadataStatus {\n  if (raw === \"success\" || raw === \"error\" || raw === \"running\") return raw;\n  return \"unknown\";\n}\n\nfunction indexedToMetadata(\n  row: {\n    runId: string;\n    file: string;\n    name: string | null;\n    status: string | null;\n    startedAt: number | null;\n    endedAt: number | null;\n    durationMs: number | null;\n    mtimeMs: number;\n  },\n  traceDir: string,\n): TraceMetadata {\n  return {\n    runId: row.runId,\n    name: row.name ?? undefined,\n    status: toStatus(row.status),\n    startedAt: row.startedAt ?? undefined,\n    endedAt: row.endedAt ?? undefined,\n    durationMs: row.durationMs ?? undefined,\n    eventCount: 0,\n    filePath: path.join(traceDir, row.file),\n    fileSize: 0,\n    createdAt: new Date(row.mtimeMs),\n  };\n}\n\nasync function loadFromScan(traceDir: string): Promise<SessionRunRecord[]> {\n  const td = new TraceDirectory({ dir: traceDir });\n  const files = await td.list();\n  const metas = await loadTraceMetadataList(traceDir, files, (fileName) =>\n    td.getPath(fileName),\n  );\n  return loadSessionRunRecords(metas);\n}\n\nasync function newestTraceMtimeMs(traceDir: string): Promise<number> {\n  const td = new TraceDirectory({ dir: traceDir });\n  let newest = 0;\n  for (const file of await td.list()) {\n    try {\n      const stats = await td.getFileStats(file);\n      if (stats.mtimeMs > newest) newest = stats.mtimeMs;\n    } catch {\n      // ignore\n    }\n  }\n  return newest;\n}\n\nexport interface LoadSessionRunsResult {\n  runs: SessionRunRecord[];\n  source: \"index\" | \"scan\";\n}\n\n/**\n * Loads session run records, preferring a healthy SQLite index when available.\n * Always enriches from trace files so handoff/retry metadata matches the scan path.\n */\nexport async function loadSessionRuns(traceDir: string): Promise<LoadSessionRunsResult> {\n  try {\n    const mod = (await import(\"@agent-inspect/index-sqlite\")) as {\n      resolveIndexDbPath: (dir: string) => string;\n      indexStatus: (dbPath: string) => { healthy: boolean };\n      isIndexStale: (dbPath: string, newestTraceMtimeMs: number) => boolean;\n      queryRuns: (\n        dbPath: string,\n        query?: { limit?: number },\n      ) => Array<{\n        runId: string;\n        file: string;\n        mtimeMs: number;\n        name: string | null;\n        status: string | null;\n        startedAt: number | null;\n        endedAt: number | null;\n        durationMs: number | null;\n      }>;\n    };\n\n    const dbPath = mod.resolveIndexDbPath(traceDir);\n    const status = mod.indexStatus(dbPath);\n    if (!status.healthy) {\n      return { runs: await loadFromScan(traceDir), source: \"scan\" };\n    }\n\n    const newest = await newestTraceMtimeMs(traceDir);\n    if (mod.isIndexStale(dbPath, newest)) {\n      return { runs: await loadFromScan(traceDir), source: \"scan\" };\n    }\n\n    const indexed = mod.queryRuns(dbPath, { limit: 10_000 });\n    if (indexed.length === 0) {\n      return { runs: await loadFromScan(traceDir), source: \"scan\" };\n    }\n\n    const runs: SessionRunRecord[] = [];\n    for (const row of indexed) {\n      runs.push(await enrichSessionRunRecord(indexedToMetadata(row, traceDir)));\n    }\n    runs.sort((a, b) => (a.startedAt ?? 0) - (b.startedAt ?? 0));\n    return { runs, source: \"index\" };\n  } catch (e) {\n    if (!isModuleNotFound(e)) {\n      // degrade to scan on unexpected index errors\n    }\n    return { runs: await loadFromScan(traceDir), source: \"scan\" };\n  }\n}\n","import {\n  buildRunWhatSummary,\n  renderRunWhat,\n  resolveTraceDir,\n} from \"@agent-inspect/core/advanced\";\n\nimport { readRunTraceEvents } from \"./read-run.js\";\n\nexport interface WhatCommandOptions {\n  dir?: string;\n  json?: boolean;\n  /** Omit correlation metadata from human output. */\n  noCorrelation?: boolean;\n}\n\nexport async function whatCommand(\n  runId: string,\n  options: WhatCommandOptions = {},\n): Promise<void> {\n  const id =\n    typeof runId === \"string\" && runId.trim() !== \"\" ? runId.trim() : \"\";\n  if (id === \"\") {\n    console.error(\"Run id is required\");\n    process.exitCode = 1;\n    return;\n  }\n\n  const traceDir = resolveTraceDir({ dir: options.dir });\n  let events;\n  try {\n    const result = await readRunTraceEvents(id, traceDir);\n    events = result?.events ?? [];\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] what failed: ${msg}`);\n    process.exitCode = 1;\n    return;\n  }\n\n  if (events.length === 0) {\n    console.log(`Run not found: ${id}`);\n    console.log(`Trace directory: ${traceDir}`);\n    process.exitCode = 1;\n    return;\n  }\n\n  const summary = buildRunWhatSummary(events);\n\n  if (options.json) {\n    console.log(JSON.stringify(summary, null, 2));\n    return;\n  }\n\n  console.log(renderRunWhat(summary, { correlation: !options.noCorrelation }));\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { resolveTraceDir, type RedactionProfile } from \"@agent-inspect/core/advanced\";\nimport {\n  buildRunReport,\n  type ReportFormat,\n} from \"@agent-inspect/core/exporters\";\n\nimport {\n  resolveOutputOption,\n  resolveRedactionProfileOption,\n} from \"./cli-option-aliases.js\";\nimport { readRunTraceEvents } from \"./read-run.js\";\n\nexport interface ReportCommandOptions {\n  dir?: string;\n  format?: string;\n  output?: string;\n  out?: string;\n  json?: boolean;\n  includeAttributes?: boolean;\n  noErrors?: boolean;\n  noCorrelation?: boolean;\n  redactionProfile?: string;\n  profile?: string;\n  section?: string;\n}\n\nfunction parseReportFormat(s: string | undefined): ReportFormat {\n  const v = (s ?? \"markdown\").trim().toLowerCase();\n  if (v === \"markdown\" || v === \"html\") {\n    return v;\n  }\n  throw new Error(\n    `Unsupported --format \"${s ?? \"\"}\". Use markdown or html.`,\n  );\n}\n\nfunction parseRedactionProfile(s: string | undefined): RedactionProfile {\n  const v = (s ?? \"local\").trim().toLowerCase();\n  if (v === \"local\" || v === \"share\" || v === \"strict\") {\n    return v;\n  }\n  throw new Error(\n    `Unsupported --redaction-profile \"${s ?? \"\"}\". Use local, share, or strict.`,\n  );\n}\n\nexport async function reportCommand(\n  runId: string,\n  options: ReportCommandOptions = {},\n): Promise<void> {\n  const id =\n    typeof runId === \"string\" && runId.trim() !== \"\" ? runId.trim() : \"\";\n  if (id === \"\") {\n    console.error(\"Run id is required\");\n    process.exitCode = 1;\n    return;\n  }\n\n  let format: ReportFormat;\n  let redactionProfile: RedactionProfile;\n  try {\n    format = parseReportFormat(options.format);\n    redactionProfile = parseRedactionProfile(resolveRedactionProfileOption(options));\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(msg);\n    process.exitCode = 1;\n    return;\n  }\n\n  const traceDir = resolveTraceDir({ dir: options.dir });\n  let events;\n  try {\n    const result = await readRunTraceEvents(id, traceDir);\n    events = result?.events ?? [];\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] report failed: ${msg}`);\n    process.exitCode = 1;\n    return;\n  }\n\n  if (events.length === 0) {\n    console.log(`Run not found: ${id}`);\n    console.log(`Trace directory: ${traceDir}`);\n    process.exitCode = 1;\n    return;\n  }\n\n  const result = buildRunReport(events, {\n    format,\n    includeAttributes: options.includeAttributes === true,\n    includeErrors: options.noErrors !== true,\n    redactionProfile,\n    correlation: !options.noCorrelation,\n    ...(options.section ? { section: options.section as never } : {}),\n  });\n\n  const resolvedOutput = resolveOutputOption(options);\n  const outPath =\n    resolvedOutput !== undefined ? path.resolve(resolvedOutput) : undefined;\n\n  if (outPath !== undefined) {\n    await mkdir(path.dirname(outPath), { recursive: true });\n    await writeFile(outPath, result.content, \"utf-8\");\n    console.log(`Wrote ${result.fileExtension} report to ${outPath}`);\n  }\n\n  if (options.json === true) {\n    const payload: Record<string, unknown> = {\n      format: result.format,\n      contentType: result.contentType,\n      fileExtension: result.fileExtension,\n    };\n    if (outPath === undefined) {\n      payload.content = result.content;\n    } else {\n      payload.output = outPath;\n    }\n    console.log(JSON.stringify(payload, null, 2));\n  } else if (outPath === undefined) {\n    console.log(result.content);\n  }\n}\n","import { readFile, stat, writeFile } from \"node:fs/promises\";\n\nimport {\n  getTraceFilePath,\n  resolveTraceDir,\n} from \"@agent-inspect/core/advanced\";\nimport {\n  createRedactor,\n  type RedactionFinding,\n  type RedactionProfile,\n} from \"@agent-inspect/redact\";\n\nimport {\n  resolveOutputOption,\n  resolveRedactionProfileOption,\n} from \"./cli-option-aliases.js\";\nimport type { CompiledRedactionPolicy } from \"./redaction-policy.js\";\nimport { loadRedactionPolicy } from \"./redaction-policy.js\";\nimport {\n  assessResidualFromContent,\n  type ResidualSafetyAssessment,\n} from \"./safety.js\";\nimport { readStdin } from \"./trace-input.js\";\n\nexport interface RedactCommandOptions {\n  dir?: string;\n  profile?: string;\n  redactionProfile?: string;\n  output?: string;\n  out?: string;\n  json?: boolean;\n  /** Local JSON path for bounded custom redaction policy (#329). */\n  policy?: string;\n  /** Opt-in: non-zero exit when residual assessment is UNSAFE or UNKNOWN (#328). */\n  failOnResidual?: boolean;\n}\n\ninterface RedactedDocument {\n  content: string;\n  findings: RedactionFinding[];\n}\n\nfunction parseRedactionProfile(value: string | undefined): RedactionProfile {\n  if (value === undefined || value === \"local\" || value === \"share\" || value === \"strict\") {\n    return value ?? \"share\";\n  }\n  throw new Error(`Unsupported --profile \"${value}\". Use local, share, or strict.`);\n}\n\nfunction stable(value: unknown): unknown {\n  if (Array.isArray(value)) return value.map(stable);\n  if (value === null || typeof value !== \"object\") return value;\n  const record = value as Record<string, unknown>;\n  return Object.fromEntries(\n    Object.keys(record)\n      .sort((a, b) => a.localeCompare(b))\n      .map((key) => [key, stable(record[key])]),\n  );\n}\n\nfunction isMissingFileError(error: unknown): boolean {\n  return (\n    error !== null &&\n    typeof error === \"object\" &&\n    \"code\" in error &&\n    (error as NodeJS.ErrnoException).code === \"ENOENT\"\n  );\n}\n\nasync function contentFromTarget(\n  target: string,\n  options: RedactCommandOptions,\n  stdin: NodeJS.ReadableStream,\n): Promise<{ content: string; source: string }> {\n  if (target === \"-\") {\n    return { content: await readStdin(stdin), source: \"stdin\" };\n  }\n\n  try {\n    const stats = await stat(target);\n    if (stats.isDirectory()) {\n      throw new Error(\"redact requires a trace file, JSON file, stdin, or run id.\");\n    }\n    return { content: await readFile(target, \"utf-8\"), source: target };\n  } catch (error) {\n    if (!isMissingFileError(error)) throw error;\n  }\n\n  const runPath = getTraceFilePath(target, resolveTraceDir({ dir: options.dir }));\n  const stats = await stat(runPath);\n  if (stats.isDirectory()) {\n    throw new Error(\"redact requires a trace file, JSON file, stdin, or run id.\");\n  }\n  return { content: await readFile(runPath, \"utf-8\"), source: runPath };\n}\n\nfunction applyRedact(\n  value: unknown,\n  profile: RedactionProfile,\n  policy: CompiledRedactionPolicy | undefined,\n): { value: unknown; findings: RedactionFinding[] } {\n  const result = createRedactor({\n    profile,\n    ...(policy?.extraKeys.length ? { extraKeys: [...policy.extraKeys] } : {}),\n    ...(policy?.detectors.length ? { detectors: [...policy.detectors] } : {}),\n  }).redact(value);\n  return { value: result.value, findings: result.findings };\n}\n\nfunction redactJsonText(\n  content: string,\n  profile: RedactionProfile,\n  policy: CompiledRedactionPolicy | undefined,\n): RedactedDocument {\n  const parsed = JSON.parse(content) as unknown;\n  const result = applyRedact(parsed, profile, policy);\n  return {\n    content: `${JSON.stringify(result.value, null, 2)}\\n`,\n    findings: result.findings,\n  };\n}\n\nfunction redactJsonlText(\n  content: string,\n  profile: RedactionProfile,\n  policy: CompiledRedactionPolicy | undefined,\n): RedactedDocument {\n  const lines = content.split(/\\r?\\n/);\n  const out: string[] = [];\n  const findings: RedactionFinding[] = [];\n\n  for (let index = 0; index < lines.length; index += 1) {\n    const line = lines[index] ?? \"\";\n    if (line.trim() === \"\") continue;\n\n    let parsed: unknown;\n    try {\n      parsed = JSON.parse(line);\n    } catch {\n      throw new Error(`Input is not valid JSON or JSONL at line ${index + 1}.`);\n    }\n\n    const result = applyRedact(parsed, profile, policy);\n    out.push(JSON.stringify(result.value));\n    findings.push(\n      ...result.findings.map((finding) => ({\n        ...finding,\n        path: `line:${index + 1}:${finding.path}`,\n      })),\n    );\n  }\n\n  return {\n    content: out.length === 0 ? \"\" : `${out.join(\"\\n\")}\\n`,\n    findings,\n  };\n}\n\nfunction redactDocument(\n  content: string,\n  profile: RedactionProfile,\n  policy?: CompiledRedactionPolicy,\n): RedactedDocument {\n  const trimmed = content.trim();\n  // Single-line AgentInspect events parse as JSON but must stay JSONL for re-read.\n  if (trimmed.startsWith(\"{\")) {\n    try {\n      const parsed = JSON.parse(trimmed) as unknown;\n      if (\n        parsed !== null &&\n        typeof parsed === \"object\" &&\n        !Array.isArray(parsed) &&\n        (\"schemaVersion\" in parsed || \"eventId\" in parsed || \"runId\" in parsed)\n      ) {\n        return redactJsonlText(content, profile, policy);\n      }\n    } catch {\n      // fall through\n    }\n  }\n  try {\n    return redactJsonText(content, profile, policy);\n  } catch {\n    return redactJsonlText(content, profile, policy);\n  }\n}\n\n/** Redacts JSON or JSONL trace text with the given profile (used by bundle and redact commands). */\nexport function redactTraceContent(\n  content: string,\n  profile: RedactionProfile,\n  policy?: CompiledRedactionPolicy,\n): RedactedDocument {\n  return redactDocument(content, profile, policy);\n}\n\nfunction looksLikeAgentInspectTrace(content: string): boolean {\n  const trimmed = content.trim();\n  if (!trimmed.startsWith(\"{\")) return false;\n  try {\n    const firstLine = trimmed.split(/\\r?\\n/).find((line) => line.trim() !== \"\") ?? trimmed;\n    const parsed = JSON.parse(firstLine) as unknown;\n    return (\n      parsed !== null &&\n      typeof parsed === \"object\" &&\n      !Array.isArray(parsed) &&\n      (\"schemaVersion\" in parsed || \"eventId\" in parsed || \"runId\" in parsed)\n    );\n  } catch {\n    return false;\n  }\n}\n\nfunction printResidualWarning(\n  assessment: ResidualSafetyAssessment,\n  sourceLooksLikeTrace: boolean,\n): void {\n  if (assessment.status === \"SAFE\") return;\n  // Arbitrary JSON that is not a supported trace yields UNKNOWN; keep human stdout quiet.\n  if (assessment.status === \"UNKNOWN\" && !sourceLooksLikeTrace) return;\n  const codes =\n    assessment.codes.length > 0 ? ` codes=${assessment.codes.join(\",\")}` : \"\";\n  console.error(\n    `Residual safety: ${assessment.status} (findings=${assessment.findings}, warnings=${assessment.warnings}, errors=${assessment.errors})${codes}. Redact does not certify safe sharing; run verify-safe before publishing.`,\n  );\n}\n\nfunction residualExitCode(assessment: ResidualSafetyAssessment): number {\n  if (assessment.status === \"UNSAFE\") return 1;\n  if (assessment.status === \"UNKNOWN\") return 2;\n  return 0;\n}\n\nexport async function redactCommand(\n  target: string,\n  options: RedactCommandOptions = {},\n  stdin: NodeJS.ReadableStream = process.stdin,\n): Promise<void> {\n  const profile = parseRedactionProfile(resolveRedactionProfileOption(options));\n  const policy =\n    options.policy !== undefined ? await loadRedactionPolicy(options.policy) : undefined;\n  const source = await contentFromTarget(target, options, stdin);\n  const redacted = redactDocument(source.content, profile, policy);\n  const outputPath = resolveOutputOption(options);\n  const residualAssessment = await assessResidualFromContent(redacted.content, {\n    compiledPolicy: policy,\n  });\n\n  if (outputPath !== undefined) {\n    await writeFile(outputPath, redacted.content, \"utf-8\");\n  }\n\n  if (options.failOnResidual === true) {\n    process.exitCode = residualExitCode(residualAssessment);\n  }\n\n  if (options.json) {\n    console.log(\n      JSON.stringify(\n        stable({\n          ok: true,\n          profile,\n          source: source.source,\n          output: outputPath,\n          findings: redacted.findings,\n          residualAssessment,\n          ...(policy !== undefined\n            ? {\n                policy: {\n                  path: policy.path,\n                  extraKeys: policy.extraKeys.length,\n                  patterns: policy.detectors.length,\n                  diagnostics: policy.diagnostics,\n                },\n              }\n            : {}),\n          content: outputPath === undefined ? redacted.content : undefined,\n        }),\n        null,\n        2,\n      ),\n    );\n    return;\n  }\n\n  printResidualWarning(residualAssessment, looksLikeAgentInspectTrace(redacted.content));\n\n  if (outputPath === undefined) {\n    process.stdout.write(redacted.content);\n  }\n}\n","/**\n * Mirrors `packages/core/src/safety/sensitive-key.ts` for dependency-light\n * @agent-inspect/redact consumers. Keep both copies in sync (6.14.2 parity).\n */\n\n/** True when the original key already uses an explicit separator. */\nfunction keyHasExplicitSeparator(value: string): boolean {\n  return /[_\\-.]/.test(value);\n}\n\n/**\n * Canonicalize field names so camelCase / kebab / dot / snake forms share a\n * snake_case shape the compound matcher can recognize (`userPassword` →\n * `user_password`).\n */\nexport function normalizeSensitiveKey(value: string): string {\n  return value\n    .replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, \"_\")\n    .replace(/^_+|_+$/g, \"\");\n}\n\nexport const NON_CREDENTIAL_TOKEN_CONFIG_KEYS: ReadonlySet<string> = new Set(\n  [\n    \"tokens\",\n    \"max_tokens\",\n    \"min_tokens\",\n    \"ls_max_tokens\",\n    \"token_count\",\n    \"token_limit\",\n    \"token_budget\",\n    \"input_tokens\",\n    \"output_tokens\",\n    \"total_tokens\",\n    \"cached_tokens\",\n    \"prompt_tokens\",\n    \"completion_tokens\",\n  ].map(normalizeSensitiveKey),\n);\n\nfunction isTokenCredentialKey(normalized: string): boolean {\n  if (NON_CREDENTIAL_TOKEN_CONFIG_KEYS.has(normalized)) return false;\n  if (normalized === \"token\") return true;\n  if (normalized.endsWith(\"tokens\")) return false;\n  return normalized.endsWith(\"token\");\n}\n\n/**\n * True when the field name looks credential-sensitive under the shared policy.\n *\n * Suffix compounds (`user_password`, `userPassword`) always match. Prefix\n * compounds (`email_note`) match only when the original key already contained\n * an explicit separator, so camelCase topic fields like `emailNote` stay for\n * value detectors instead of key redaction.\n */\nexport function isCredentialSensitiveKey(\n  key: string | undefined,\n  sensitiveKeys: readonly string[],\n): boolean {\n  if (!key) return false;\n  const normalized = normalizeSensitiveKey(key);\n  if (!normalized) return false;\n  if (NON_CREDENTIAL_TOKEN_CONFIG_KEYS.has(normalized)) return false;\n\n  const allowPrefixCompound = keyHasExplicitSeparator(key);\n\n  for (const sensitive of sensitiveKeys) {\n    const s = normalizeSensitiveKey(sensitive);\n    if (!s) continue;\n    if (s === \"token\") {\n      if (isTokenCredentialKey(normalized)) return true;\n      continue;\n    }\n    if (normalized === s) return true;\n    if (normalized.endsWith(`_${s}`)) return true;\n    if (allowPrefixCompound && normalized.startsWith(`${s}_`)) return true;\n  }\n  return false;\n}\n","/**\n * High-confidence key/value credential forms shared with core\n * `safety.secretPattern` / `key-value-secret` (keep sources in sync).\n *\n * Matches house-format credentials such as:\n *   internal_token=<credential>\n *   token=<credential>\n *   api_key=<credential>\n *\n * Intentionally does **not** match metric/config lookalikes such as\n * maxTokens=, tokenCount=, secret=false, short placeholders, or values that are\n * *entirely* a redaction placeholder (`[REDACTED]`, `[REDACTED:…]`, `[HASH:xxxxxxxx]`).\n * A marker used as a prefix (`[REDACTED]canary…`) or incomplete marker\n * (`[REDACTED]/canary…`) is still a secret. Query separators (`&`, `#`, `?`)\n * may end a complete placeholder when the same form appears in a URL query;\n * `/` and `;` do **not** — they are ordinary free-text characters.\n */\nexport const KEY_VALUE_SECRET_PATTERN_SOURCE =\n  String.raw`\\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\\[(?:REDACTED(?::[^\\]]*)?|HASH:[0-9a-f]{8})\\](?![^\\s\"'\\\\&#?]))([^\\s\"'\\\\]{8,})`;\n\nexport const KEY_VALUE_SECRET_PATTERN = new RegExp(\n  KEY_VALUE_SECRET_PATTERN_SOURCE,\n  \"i\",\n);\n\nexport function valueContainsKeyValueSecret(value: string): boolean {\n  KEY_VALUE_SECRET_PATTERN.lastIndex = 0;\n  return KEY_VALUE_SECRET_PATTERN.test(value);\n}\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/core/src/safety/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 crypto from \"node:crypto\";\nimport { isCredentialSensitiveKey } from \"./sensitive-key.js\";\nimport { valueContainsKeyValueSecret } from \"./key-value-secret.js\";\nimport { looksLikeUrlForRedaction, redactUrlString } from \"./url-redaction.js\";\n\nexport type RedactionProfile = \"local\" | \"share\" | \"strict\";\n\nexport type RedactionAction = \"replace\" | \"hash\" | \"prefix\" | \"truncate\" | \"keep\";\n\nexport type RedactionSeverity = \"info\" | \"warning\" | \"error\";\n\nexport type RedactionMatchKind = \"key\" | \"value\" | \"custom\";\n\nexport type RedactionRule =\n  | string\n  | { key: string; strategy: \"full\" }\n  | { key: string; strategy: \"prefix\"; keep?: number }\n  | { key: string; strategy: \"hash\" };\n\nexport interface RedactionFinding {\n  path: string;\n  detector: string;\n  action: RedactionAction;\n  severity: RedactionSeverity;\n  matchKind: RedactionMatchKind;\n  preview?: string;\n}\n\nexport interface RedactionDetection {\n  action?: RedactionAction;\n  replacement?: unknown;\n  severity?: RedactionSeverity;\n  matchKind?: RedactionMatchKind;\n  preview?: string;\n}\n\nexport interface RedactionDetectorInput {\n  path: string;\n  key?: string;\n  value: unknown;\n}\n\nexport interface RedactionDetector {\n  id: string;\n  severity?: RedactionSeverity;\n  matchKind?: RedactionMatchKind;\n  detect(input: RedactionDetectorInput): RedactionDetection[];\n}\n\nexport interface RedactionResult<T = unknown> {\n  value: T;\n  findings: RedactionFinding[];\n  redacted: boolean;\n  profile: RedactionProfile;\n}\n\nexport interface ResolvedRedactionProfile {\n  profile: RedactionProfile;\n  extraKeys: readonly string[];\n  maxMetadataValueLengthCap?: number;\n  maxPreviewLengthCap?: number;\n}\n\nexport interface RedactOptions {\n  profile?: RedactionProfile;\n  detectors?: RedactionDetector[];\n  rules?: RedactionRule[];\n  replacement?: string;\n  maxDepth?: number;\n  maxStringLength?: number;\n  collectFindings?: boolean;\n}\n\nexport interface RedactorOptions extends RedactOptions {\n  extraKeys?: readonly string[];\n}\n\nexport const DEFAULT_REDACT_KEYS = [\n  \"authorization\",\n  \"cookie\",\n  \"token\",\n  \"apiKey\",\n  \"password\",\n  \"secret\",\n  \"email\",\n] as const;\n\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  \"currentTask\",\n  \"task\",\n  \"userInput\",\n  \"requestText\",\n  \"conversationText\",\n] as const;\n\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\ntype CompiledRule = (\n  | { key: string; strategy: \"full\" }\n  | { key: string; strategy: \"prefix\"; keep: number }\n  | { key: string; strategy: \"hash\" }\n) & { raw?: string };\n\ninterface RedactionState {\n  findings: RedactionFinding[];\n  seen: WeakMap<object, unknown>;\n}\n\ninterface PatternDetectorOptions {\n  id: string;\n  pattern: RegExp;\n  severity?: RedactionSeverity;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n\nfunction toKey(key: string): string {\n  return key.toLowerCase();\n}\n\nfunction findCompiledKeyRule(\n  key: string,\n  rules: readonly CompiledRule[],\n): CompiledRule | undefined {\n  const exact = toKey(key);\n  const direct = rules.find((candidate) => candidate.key === exact);\n  if (direct) return direct;\n  return rules.find((candidate) =>\n    isCredentialSensitiveKey(key, [candidate.raw ?? candidate.key]),\n  );\n}\n\nfunction stableHash(value: string): string {\n  const hash = crypto.createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n  return hash.slice(0, 8);\n}\n\nfunction stringifyScalar(value: unknown): string | undefined {\n  if (typeof value === \"string\") return value;\n  if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n    return String(value);\n  }\n  return undefined;\n}\n\nfunction patternDetector(options: PatternDetectorOptions): RedactionDetector {\n  return {\n    id: options.id,\n    severity: options.severity ?? \"warning\",\n    matchKind: \"value\",\n    detect(input) {\n      if (typeof input.value !== \"string\") return [];\n      options.pattern.lastIndex = 0;\n      return options.pattern.test(input.value)\n        ? [{ action: \"replace\", severity: options.severity ?? \"warning\", matchKind: \"value\" }]\n        : [];\n    },\n  };\n}\n\nfunction digitsOnly(value: string): string {\n  return value.replace(/\\D/g, \"\");\n}\n\nfunction passesLuhn(value: string): boolean {\n  const digits = digitsOnly(value);\n  if (digits.length < 13 || digits.length > 19) return false;\n\n  let sum = 0;\n  let double = false;\n  for (let i = digits.length - 1; i >= 0; i -= 1) {\n    let digit = Number(digits[i]);\n    if (double) {\n      digit *= 2;\n      if (digit > 9) digit -= 9;\n    }\n    sum += digit;\n    double = !double;\n  }\n  return sum % 10 === 0;\n}\n\nconst UUID_RE =\n  /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n/** 13-digit Unix epoch milliseconds in a plausible modern range. */\nconst EPOCH_MS_RE = /^1[0-9]{12}$/;\n\nconst EMAIL_RE = /\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b/gi;\n\nfunction pathSuggestsNonCard(path: string): boolean {\n  const normalized = path.toLowerCase().replace(/[^a-z0-9._]/g, \"\");\n  return (\n    /(^|\\.)(tokenusage|usage)(\\.|$)/.test(normalized) ||\n    /(startedat|endedat|durationms|timestamp|createdat|updatedat)(\\.|$)/.test(normalized) ||\n    /(^|\\.)(runid|traceid|spanid|eventid|sessionid|userid|parentid|requestid|correlationid)(\\.|$)/.test(\n      normalized,\n    ) ||\n    /(^|\\.)ts(\\.|$)/.test(normalized)\n  );\n}\n\nfunction isUuidLike(value: string): boolean {\n  return UUID_RE.test(value.trim());\n}\n\nfunction isPlausibleCardCandidate(candidate: string, fullValue: string): boolean {\n  const digits = digitsOnly(candidate);\n  if (digits.length < 13 || digits.length > 19) return false;\n  if (!passesLuhn(candidate)) return false;\n\n  const trimmed = fullValue.trim();\n  if (isUuidLike(trimmed)) return false;\n\n  // Naked epoch-ms timestamps are not PANs.\n  if (EPOCH_MS_RE.test(digits) && digitsOnly(trimmed) === digits && /^\\d+$/.test(trimmed)) {\n    return false;\n  }\n\n  // Reject candidates glued inside longer alphanumeric IDs without card separators.\n  const start = fullValue.indexOf(candidate);\n  if (start >= 0) {\n    const before = fullValue[start - 1];\n    const after = fullValue[start + candidate.length];\n    if (before && /[A-Za-z0-9_]/.test(before)) return false;\n    if (after && /[A-Za-z0-9_]/.test(after)) return false;\n  }\n\n  return true;\n}\n\nfunction looksLikePathOrPackageOrUrl(value: string): boolean {\n  const trimmed = value.trim();\n  if (/^(?:[a-z][a-z0-9+.-]*:)?\\/\\//i.test(trimmed)) return true;\n  if (/^webpack:/i.test(trimmed)) return true;\n  if (/^@[A-Za-z0-9_.-]+\\/[A-Za-z0-9_.@/-]+$/.test(trimmed)) return true;\n  if (/^[A-Za-z]:[\\\\/]/.test(trimmed) || /^[/\\\\]/.test(trimmed)) return true;\n  // Path-like single token (slashes, no whitespace).\n  if (/[\\\\/]/.test(trimmed) && !/\\s/.test(trimmed)) return true;\n  return false;\n}\n\nfunction emailMatchIsPathAdjacent(value: string, index: number, length: number): boolean {\n  const before = value[index - 1];\n  const after = value[index + length];\n  return before === \"/\" || before === \"\\\\\" || after === \"/\" || after === \"\\\\\";\n}\n\nfunction valueContainsEmail(value: string): boolean {\n  if (looksLikePathOrPackageOrUrl(value)) return false;\n  EMAIL_RE.lastIndex = 0;\n  for (const match of value.matchAll(EMAIL_RE)) {\n    const text = match[0] ?? \"\";\n    const index = match.index ?? 0;\n    if (emailMatchIsPathAdjacent(value, index, text.length)) continue;\n    return true;\n  }\n  return false;\n}\n\nconst credentialDetectors: readonly RedactionDetector[] = [\n  patternDetector({\n    id: \"value.authorizationHeader\",\n    pattern: /^(?:basic|bearer|digest|apikey)\\s+[a-z0-9._~+/=-]+$/i,\n    severity: \"error\",\n  }),\n  patternDetector({\n    id: \"value.bearerToken\",\n    pattern: /\\bbearer\\s+[a-z0-9._~+/=-]{12,}\\b/i,\n    severity: \"error\",\n  }),\n  patternDetector({\n    id: \"value.cookie\",\n    pattern: /\\b[a-z0-9_.-]+=[^;\\s]+(?:;\\s*[a-z0-9_.-]+=[^;\\s]+)+/i,\n    severity: \"error\",\n  }),\n  patternDetector({\n    id: \"value.jwt\",\n    pattern: /\\beyJ[a-zA-Z0-9_-]{8,}\\.[a-zA-Z0-9_-]{8,}\\.[a-zA-Z0-9_-]{8,}\\b/,\n    severity: \"error\",\n  }),\n  patternDetector({\n    id: \"value.providerApiKey\",\n    pattern: /\\b(?:sk-(?:proj-)?[a-zA-Z0-9_-]{16,}|sk-ant-[a-zA-Z0-9_-]{16,}|AIza[0-9A-Za-z_-]{20,})\\b/,\n    severity: \"error\",\n  }),\n  patternDetector({\n    id: \"value.githubToken\",\n    pattern: /\\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{20,}\\b/,\n    severity: \"error\",\n  }),\n  patternDetector({\n    id: \"value.awsAccessKey\",\n    pattern: /\\b(?:AKIA|ASIA)[A-Z0-9]{16}\\b/,\n    severity: \"error\",\n  }),\n  patternDetector({\n    id: \"value.privateKey\",\n    pattern: /-----BEGIN [A-Z ]*PRIVATE KEY-----[\\s\\S]*-----END [A-Z ]*PRIVATE KEY-----/,\n    severity: \"error\",\n  }),\n  {\n    id: \"value.keyValueSecret\",\n    severity: \"error\",\n    matchKind: \"value\",\n    detect(input) {\n      if (typeof input.value !== \"string\") return [];\n      return valueContainsKeyValueSecret(input.value)\n        ? [{ action: \"replace\", severity: \"error\", matchKind: \"value\" }]\n        : [];\n    },\n  },\n  {\n    id: \"value.creditCard\",\n    severity: \"error\",\n    matchKind: \"value\",\n    detect(input) {\n      if (typeof input.value !== \"string\") return [];\n      if (pathSuggestsNonCard(input.path)) return [];\n      if (isUuidLike(input.value)) return [];\n      const candidatePattern = /(?:\\d[ -]?){13,19}/g;\n      for (const match of input.value.matchAll(candidatePattern)) {\n        const candidate = match[0] ?? \"\";\n        if (isPlausibleCardCandidate(candidate, input.value)) {\n          return [{ action: \"replace\", severity: \"error\", matchKind: \"value\" }];\n        }\n      }\n      return [];\n    },\n  },\n];\n\nconst identifierDetectors: readonly RedactionDetector[] = [\n  {\n    id: \"value.email\",\n    severity: \"warning\",\n    matchKind: \"value\",\n    detect(input) {\n      if (typeof input.value !== \"string\") return [];\n      return valueContainsEmail(input.value)\n        ? [{ action: \"replace\", severity: \"warning\", matchKind: \"value\" }]\n        : [];\n    },\n  },\n  patternDetector({\n    id: \"value.phone\",\n    pattern: /\\b(?:\\+\\d{1,3}[\\s.-]?)?(?:\\(?\\d{3}\\)?[\\s.-])\\d{3}[\\s.-]\\d{4}\\b/,\n  }),\n  patternDetector({\n    id: \"value.ipv4\",\n    pattern: /\\b(?:(?:25[0-5]|2[0-4]\\d|1?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1?\\d?\\d)\\b/,\n  }),\n  patternDetector({\n    id: \"value.ipv6\",\n    pattern: /\\b(?:[0-9a-f]{1,4}:){2,7}[0-9a-f]{1,4}\\b/i,\n  }),\n];\n\nfunction builtInDetectorsForProfile(profile: RedactionProfile): readonly RedactionDetector[] {\n  if (profile === \"local\") return credentialDetectors;\n  return [...credentialDetectors, ...identifierDetectors];\n}\n\nfunction compileRules(\n  rules?: RedactionRule[],\n  extraKeys?: readonly string[],\n): CompiledRule[] {\n  const out = new Map<string, CompiledRule>();\n\n  const set = (rule: CompiledRule) => {\n    const key = toKey(rule.key);\n    out.set(key, { ...rule, key, raw: rule.raw ?? rule.key } as CompiledRule);\n  };\n\n  for (const key of DEFAULT_REDACT_KEYS) {\n    set({ key, strategy: \"full\" });\n  }\n\n  for (const key of extraKeys ?? []) {\n    if (typeof key === \"string\" && key.length > 0) {\n      set({ key, strategy: \"full\" });\n    }\n  }\n\n  for (const rule of rules ?? []) {\n    if (typeof rule === \"string\") {\n      set({ key: rule, strategy: \"full\" });\n      continue;\n    }\n\n    if (rule.strategy === \"full\") set({ key: rule.key, strategy: \"full\" });\n    if (rule.strategy === \"hash\") set({ key: rule.key, strategy: \"hash\" });\n    if (rule.strategy === \"prefix\") {\n      set({\n        key: rule.key,\n        strategy: \"prefix\",\n        keep: typeof rule.keep === \"number\" ? rule.keep : 8,\n      });\n    }\n  }\n\n  return [...out.values()];\n}\n\nfunction actionForRule(rule: CompiledRule): RedactionAction {\n  if (rule.strategy === \"full\") return \"replace\";\n  return rule.strategy;\n}\n\nfunction applyRule(\n  rule: CompiledRule,\n  value: unknown,\n  replacement: string,\n): unknown {\n  if (rule.strategy === \"full\") return replacement;\n\n  const asString = stringifyScalar(value);\n  if (rule.strategy === \"prefix\") {\n    if (asString === undefined) return replacement;\n    const keep = Math.max(0, Math.floor(rule.keep));\n    return asString.length <= keep ? `${asString}…` : `${asString.slice(0, keep)}…`;\n  }\n\n  if (rule.strategy === \"hash\") {\n    if (asString === undefined) return \"[HASH:unknown]\";\n    return `[HASH:${stableHash(asString)}]`;\n  }\n\n  return value;\n}\n\nfunction childPath(path: string, key: string): string {\n  if (/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key)) {\n    return path ? `${path}.${key}` : key;\n  }\n  return `${path || \"$\"}[${JSON.stringify(key)}]`;\n}\n\nfunction indexPath(path: string, index: number): string {\n  return `${path || \"$\"}[${index}]`;\n}\n\nfunction makeFinding(\n  path: string,\n  detector: string,\n  action: RedactionAction,\n  matchKind: RedactionMatchKind,\n  severity: RedactionSeverity = \"warning\",\n  preview?: string,\n): RedactionFinding {\n  return preview === undefined\n    ? { path, detector, action, severity, matchKind }\n    : { path, detector, action, severity, matchKind, preview };\n}\n\nexport function createRedactionProfile(profile: RedactionProfile = \"local\"): 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  }\n}\n\nexport class Redactor {\n  readonly #rules: CompiledRule[];\n  readonly #sensitiveKeys: readonly string[];\n  readonly #detectors: readonly RedactionDetector[];\n  readonly #profile: RedactionProfile;\n  readonly #replacement: string;\n  readonly #maxDepth: number;\n  readonly #collectFindings: boolean;\n\n  constructor(options?: RedactorOptions) {\n    const resolved = createRedactionProfile(options?.profile ?? \"local\");\n    this.#profile = resolved.profile;\n    this.#rules = compileRules(options?.rules, [\n      ...resolved.extraKeys,\n      ...(options?.extraKeys ?? []),\n    ]);\n    this.#sensitiveKeys = this.#rules.map((rule) => rule.raw ?? rule.key);\n    this.#detectors = [\n      ...builtInDetectorsForProfile(this.#profile),\n      ...(options?.detectors ?? []),\n    ];\n    this.#replacement = options?.replacement ?? \"[REDACTED]\";\n    this.#maxDepth = options?.maxDepth ?? 32;\n    this.#collectFindings = options?.collectFindings ?? true;\n  }\n\n  redactValue(key: string, value: unknown): unknown {\n    return this.#redactValue(value, key, key, 0, {\n      findings: [],\n      seen: new WeakMap<object, unknown>(),\n    });\n  }\n\n  redactRecord(record: Record<string, unknown>): Record<string, unknown> {\n    return this.redact(record).value as Record<string, unknown>;\n  }\n\n  redact<T = unknown>(value: T): RedactionResult<T> {\n    const state: RedactionState = {\n      findings: [],\n      seen: new WeakMap<object, unknown>(),\n    };\n    const redacted = this.#redactValue(value, undefined, \"$\", 0, state);\n    return {\n      value: redacted as T,\n      findings: state.findings,\n      redacted: state.findings.some((finding) => finding.action !== \"keep\"),\n      profile: this.#profile,\n    };\n  }\n\n  #recordFinding(state: RedactionState, finding: RedactionFinding): void {\n    if (this.#collectFindings) state.findings.push(finding);\n  }\n\n  #detect(\n    value: string,\n    key: string | undefined,\n    path: string,\n  ): { detector: RedactionDetector; detection: RedactionDetection } | undefined {\n    for (const detector of this.#detectors) {\n      for (const detection of detector.detect({ path, key, value })) {\n        if ((detection.action ?? \"replace\") !== \"keep\") return { detector, detection };\n      }\n    }\n    return undefined;\n  }\n\n  #redactValue(\n    value: unknown,\n    key: string | undefined,\n    path: string,\n    depth: number,\n    state: RedactionState,\n  ): unknown {\n    if (depth > this.#maxDepth) {\n      this.#recordFinding(\n        state,\n        makeFinding(path, \"structure.maxDepth\", \"truncate\", \"value\", \"warning\"),\n      );\n      return \"[Truncated]\";\n    }\n\n    if (key !== undefined) {\n      const rule = findCompiledKeyRule(key, this.#rules);\n      if (rule) {\n        this.#recordFinding(\n          state,\n          makeFinding(path, `key.${rule.key}`, actionForRule(rule), \"key\", \"warning\"),\n        );\n        return applyRule(rule, value, this.#replacement);\n      }\n    }\n\n    if (typeof value === \"string\" && looksLikeUrlForRedaction(value)) {\n      const url = redactUrlString(value, {\n        sensitiveKeys: this.#sensitiveKeys,\n        isSensitiveValue: (candidate) => this.#detect(candidate, key, path) !== undefined,\n        replacement: this.#replacement,\n        maskPathIds: this.#profile !== \"local\",\n      });\n      if (url.value !== value) {\n        this.#recordFinding(\n          state,\n          makeFinding(\n            path,\n            url.credentialRedacted ? \"value.urlCredential\" : \"value.urlIdentifier\",\n            \"replace\",\n            \"value\",\n            url.credentialRedacted ? \"error\" : \"warning\",\n          ),\n        );\n        const residual = this.#detect(\n          url.value.split(this.#replacement).join(\"\"),\n          key,\n          path,\n        );\n        if (residual === undefined) return url.value;\n        this.#recordFinding(\n          state,\n          makeFinding(\n            path,\n            residual.detector.id,\n            \"replace\",\n            residual.detection.matchKind ?? residual.detector.matchKind ?? \"custom\",\n            residual.detection.severity ?? residual.detector.severity ?? \"warning\",\n          ),\n        );\n        return this.#replacement;\n      }\n    }\n\n    for (const detector of this.#detectors) {\n      const detections = detector.detect({ path, key, value });\n      for (const detection of detections) {\n        const action = detection.action ?? \"replace\";\n        this.#recordFinding(\n          state,\n          makeFinding(\n            path,\n            detector.id,\n            action,\n            detection.matchKind ?? detector.matchKind ?? \"custom\",\n            detection.severity ?? detector.severity ?? \"warning\",\n            detection.preview,\n          ),\n        );\n        if (action !== \"keep\") {\n          return detection.replacement ?? this.#replacement;\n        }\n      }\n    }\n\n    if (Array.isArray(value)) {\n      if (state.seen.has(value)) return state.seen.get(value);\n      const out: unknown[] = [];\n      state.seen.set(value, out);\n      value.forEach((item, index) => {\n        out[index] = this.#redactValue(item, undefined, indexPath(path, index), depth + 1, state);\n      });\n      return out;\n    }\n\n    if (isRecord(value)) {\n      if (state.seen.has(value)) return state.seen.get(value);\n      const out: Record<string, unknown> = {};\n      state.seen.set(value, out);\n      for (const [entryKey, entryValue] of Object.entries(value)) {\n        out[entryKey] = this.#redactValue(\n          entryValue,\n          entryKey,\n          childPath(path === \"$\" ? \"\" : path, entryKey),\n          depth + 1,\n          state,\n        );\n      }\n      return out;\n    }\n\n    return value;\n  }\n}\n\nexport function createRedactor(options?: RedactorOptions): Redactor {\n  return new Redactor(options);\n}\n\nexport function redact<T = unknown>(value: T, options?: RedactOptions): RedactionResult<T> {\n  return createRedactor(options).redact(value);\n}\n\nexport {\n  KEY_VALUE_SECRET_PATTERN,\n  KEY_VALUE_SECRET_PATTERN_SOURCE,\n  valueContainsKeyValueSecret,\n} from \"./key-value-secret.js\";\n\n","import { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type { RedactionDetector, RedactionSeverity } from \"@agent-inspect/redact\";\n\n/** Hard bounds for local CLI redaction policies (#329 / 6.29.1). */\nexport const REDACTION_POLICY_LIMITS = {\n  maxExtraKeys: 64,\n  maxKeyLength: 64,\n  maxPatterns: 32,\n  maxPatternLength: 128,\n  maxPatternIdLength: 64,\n  /** Maximum policy file size before parse (bytes). */\n  maxPolicyFileBytes: 64 * 1024,\n} as const;\n\n/** Supported pattern kinds after 6.29.1 (typed/user-regex removed). */\nexport type RedactionPolicyPatternType = \"literal\" | \"prefix\";\n\nexport interface RedactionPolicyPatternInput {\n  id?: unknown;\n  type?: unknown;\n  value?: unknown;\n  pattern?: unknown;\n  severity?: unknown;\n}\n\nexport interface RedactionPolicyFile {\n  version?: unknown;\n  extraKeys?: unknown;\n  patterns?: unknown;\n}\n\nexport interface PolicyDiagnostic {\n  code: string;\n  message: string;\n}\n\nexport interface CompiledRedactionPolicy {\n  path: string;\n  extraKeys: readonly string[];\n  detectors: readonly RedactionDetector[];\n  diagnostics: readonly PolicyDiagnostic[];\n}\n\nconst ALLOWED_TOP_LEVEL = new Set([\"version\", \"extraKeys\", \"patterns\"]);\nconst ALLOWED_PATTERN_FIELDS = new Set([\"id\", \"type\", \"value\", \"severity\"]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction rejectRemotePolicyPath(policyPath: string): void {\n  const trimmed = policyPath.trim();\n  if (/^[a-z][a-z0-9+.-]*:/i.test(trimmed)) {\n    throw new Error(\n      `--policy must be a local JSON file path (got a URL-like value). Remote policy fetch is not supported.`,\n    );\n  }\n}\n\nfunction parseSeverity(value: unknown, label: string): RedactionSeverity {\n  if (value === undefined) return \"error\";\n  if (value === \"info\" || value === \"warning\" || value === \"error\") return value;\n  throw new Error(`${label} severity must be info, warning, or error.`);\n}\n\nfunction validateExtraKey(key: string, index: number): string {\n  const label = `extraKeys[${index}]`;\n  if (key.length === 0) throw new Error(`${label} must be a non-empty string.`);\n  if (key.length > REDACTION_POLICY_LIMITS.maxKeyLength) {\n    throw new Error(\n      `${label} exceeds max length ${REDACTION_POLICY_LIMITS.maxKeyLength}.`,\n    );\n  }\n  if (!/^[A-Za-z_][A-Za-z0-9_.-]*$/.test(key)) {\n    throw new Error(\n      `${label} must be an identifier-like key (letters, digits, _, ., -).`,\n    );\n  }\n  return key;\n}\n\nfunction rejectUnknownFields(\n  record: Record<string, unknown>,\n  allowed: ReadonlySet<string>,\n  label: string,\n): void {\n  for (const key of Object.keys(record)) {\n    if (!allowed.has(key)) {\n      throw new Error(`${label} rejects unknown field \"${key}\".`);\n    }\n  }\n}\n\n/**\n * Literal and prefix matching use bounded string operations only.\n * No user-controlled pattern is compiled through `new RegExp`.\n */\nfunction compilePatternDetector(\n  input: RedactionPolicyPatternInput,\n  index: number,\n): RedactionDetector {\n  const label = `patterns[${index}]`;\n  if (!isRecord(input)) throw new Error(`${label} must be an object.`);\n\n  const typeEarly = input.type;\n  if (typeEarly === \"typed\") {\n    throw new Error(\n      `${label}.type \"typed\" is no longer supported (removed in 6.29.1). Use type \"literal\" or \"prefix\" with a fixed value; arbitrary regex patterns are not accepted.`,\n    );\n  }\n\n  rejectUnknownFields(input, ALLOWED_PATTERN_FIELDS, label);\n\n  const idRaw = input.id;\n  if (typeof idRaw !== \"string\" || idRaw.trim() === \"\") {\n    throw new Error(`${label}.id must be a non-empty string.`);\n  }\n  const id = idRaw.trim();\n  if (id.length > REDACTION_POLICY_LIMITS.maxPatternIdLength) {\n    throw new Error(\n      `${label}.id exceeds max length ${REDACTION_POLICY_LIMITS.maxPatternIdLength}.`,\n    );\n  }\n  if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(id)) {\n    throw new Error(`${label}.id must be an identifier-like detector id.`);\n  }\n\n  const type = input.type;\n  if (type !== \"literal\" && type !== \"prefix\") {\n    throw new Error(`${label}.type must be literal or prefix.`);\n  }\n\n  if (input.pattern !== undefined) {\n    throw new Error(\n      `${label}.pattern is not accepted; use .value with type literal or prefix.`,\n    );\n  }\n\n  const severity = parseSeverity(input.severity, label);\n  if (typeof input.value !== \"string\") {\n    throw new Error(`${label}.value must be a string for ${type} patterns.`);\n  }\n  if (input.value.length === 0) {\n    throw new Error(`${label}.value must be non-empty.`);\n  }\n  if (input.value.length > REDACTION_POLICY_LIMITS.maxPatternLength) {\n    throw new Error(\n      `${label}.value exceeds max length ${REDACTION_POLICY_LIMITS.maxPatternLength}.`,\n    );\n  }\n\n  const needle = input.value;\n  const match =\n    type === \"prefix\"\n      ? (haystack: string) => haystack.startsWith(needle)\n      : (haystack: string) => haystack.includes(needle);\n\n  return {\n    id: `policy.${id}`,\n    severity,\n    matchKind: \"custom\",\n    detect({ value }) {\n      if (typeof value !== \"string\") return [];\n      return match(value)\n        ? [{ action: \"replace\", severity, matchKind: \"custom\" }]\n        : [];\n    },\n  };\n}\n\n/**\n * Compile a local redaction policy object into extraKeys + detectors.\n * Throws deterministic errors for invalid or unbounded input.\n */\nexport function compileRedactionPolicy(\n  raw: unknown,\n  policyPath: string,\n): CompiledRedactionPolicy {\n  if (!isRecord(raw)) {\n    throw new Error(`Redaction policy must be a JSON object (${policyPath}).`);\n  }\n  rejectUnknownFields(raw, ALLOWED_TOP_LEVEL, \"Redaction policy\");\n\n  const diagnostics: PolicyDiagnostic[] = [];\n  if (raw.version !== undefined && raw.version !== 1) {\n    throw new Error(`Unsupported redaction policy version (supported: 1).`);\n  }\n\n  const extraKeysRaw = raw.extraKeys;\n  const extraKeys: string[] = [];\n  if (extraKeysRaw !== undefined) {\n    if (!Array.isArray(extraKeysRaw)) {\n      throw new Error(`extraKeys must be an array of strings.`);\n    }\n    if (extraKeysRaw.length > REDACTION_POLICY_LIMITS.maxExtraKeys) {\n      throw new Error(\n        `extraKeys exceeds max count ${REDACTION_POLICY_LIMITS.maxExtraKeys}.`,\n      );\n    }\n    for (let i = 0; i < extraKeysRaw.length; i += 1) {\n      const key = extraKeysRaw[i];\n      if (typeof key !== \"string\") {\n        throw new Error(`extraKeys[${i}] must be a string.`);\n      }\n      extraKeys.push(validateExtraKey(key, i));\n    }\n  }\n\n  const patternsRaw = raw.patterns;\n  const detectors: RedactionDetector[] = [];\n  if (patternsRaw !== undefined) {\n    if (!Array.isArray(patternsRaw)) {\n      throw new Error(`patterns must be an array.`);\n    }\n    if (patternsRaw.length > REDACTION_POLICY_LIMITS.maxPatterns) {\n      throw new Error(\n        `patterns exceeds max count ${REDACTION_POLICY_LIMITS.maxPatterns}.`,\n      );\n    }\n    const seenIds = new Set<string>();\n    for (let i = 0; i < patternsRaw.length; i += 1) {\n      const detector = compilePatternDetector(\n        patternsRaw[i] as RedactionPolicyPatternInput,\n        i,\n      );\n      if (seenIds.has(detector.id)) {\n        throw new Error(`Duplicate pattern id \"${detector.id}\".`);\n      }\n      seenIds.add(detector.id);\n      detectors.push(detector);\n    }\n  }\n\n  if (extraKeys.length === 0 && detectors.length === 0) {\n    diagnostics.push({\n      code: \"AI_POLICY_EMPTY\",\n      message: \"Redaction policy contained no extraKeys or patterns.\",\n    });\n  }\n\n  return {\n    path: policyPath,\n    extraKeys,\n    detectors,\n    diagnostics,\n  };\n}\n\n/** Load and compile a local JSON redaction policy file. Never fetches remotes. */\nexport async function loadRedactionPolicy(\n  policyPath: string,\n): Promise<CompiledRedactionPolicy> {\n  rejectRemotePolicyPath(policyPath);\n  const resolved = path.resolve(policyPath);\n\n  let fileStat;\n  try {\n    fileStat = await stat(resolved);\n  } catch (error) {\n    throw new Error(\n      `Failed to read --policy file \"${resolved}\": ${\n        error instanceof Error ? error.message : String(error)\n      }`,\n    );\n  }\n  if (!fileStat.isFile()) {\n    throw new Error(\n      `--policy must be a regular local JSON file (not a directory or special file): \"${resolved}\".`,\n    );\n  }\n  if (fileStat.size > REDACTION_POLICY_LIMITS.maxPolicyFileBytes) {\n    throw new Error(\n      `--policy file exceeds max size ${REDACTION_POLICY_LIMITS.maxPolicyFileBytes} bytes.`,\n    );\n  }\n\n  let buffer: Buffer;\n  try {\n    buffer = await readFile(resolved);\n  } catch (error) {\n    throw new Error(\n      `Failed to read --policy file \"${resolved}\": ${\n        error instanceof Error ? error.message : String(error)\n      }`,\n    );\n  }\n  if (buffer.byteLength > REDACTION_POLICY_LIMITS.maxPolicyFileBytes) {\n    throw new Error(\n      `--policy file exceeds max size ${REDACTION_POLICY_LIMITS.maxPolicyFileBytes} bytes.`,\n    );\n  }\n\n  const text = buffer.toString(\"utf-8\");\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(text) as unknown;\n  } catch (error) {\n    throw new Error(\n      `Invalid JSON in --policy file \"${resolved}\": ${\n        error instanceof Error ? error.message : String(error)\n      }`,\n    );\n  }\n\n  return compileRedactionPolicy(parsed, resolved);\n}\n","export type {\n  BaselineRegressionRuleOptions,\n  DecisionRuleOptions,\n  GuardrailRuleOptions,\n  LlmUsageRuleOptions,\n  RetrievalRuleOptions,\n  RunTraceChecksOptions,\n  MaxStepDurationRuleOptions,\n  RunDepthRuleOptions,\n  RunDurationRuleOptions,\n  RunEventCountRuleOptions,\n  RunStatusRuleOptions,\n  StallDetectionRuleOptions,\n  SafetyOversizedAttributeRuleOptions,\n  SafetyRawContentRuleOptions,\n  SafetyRedactionRuleOptions,\n  SafetySecretPattern,\n  SafetySecretPatternRuleOptions,\n  StructureIncompleteRuleOptions,\n  StructureOrphanRuleOptions,\n  StructureParallelWidthRuleOptions,\n  StructureRelationshipRuleOptions,\n  LogicalProjectionDiagnostic,\n  LogicalTraceEvent,\n  DerivedFailureConfidence,\n  DerivedFailureFact,\n  DerivedFailureRole,\n  FailureRoleCounts,\n  SemanticParitySummary,\n  TraceCheckContext,\n  TraceCheckDiagnostic,\n  TraceCheckDiagnosticCode,\n  TraceCheckEvidence,\n  TraceCheckFacts,\n  TraceCheckFinding,\n  TraceCheckFindingStatus,\n  TraceCheckInput,\n  TraceCheckResult,\n  TraceCheckRule,\n  TraceCheckRuleCategory,\n  TraceCheckRuleExecution,\n  TraceCheckRuleExecutionStatus,\n  TraceCheckSeverity,\n  TraceCheckStatus,\n  TraceCheckSummary,\n  TraceFacts,\n  TraceRelationship,\n  TraceRelationshipConfidence,\n  TraceRelationshipDiagnostic,\n  TraceRelationshipType,\n  SafetyFindingCategory,\n  SafetyFindingConfidence,\n  TraceSignalRuleOptions,\n  ToolFailureRuleOptions,\n  ToolOrderingRuleOptions,\n  StepOrderingEndpoint,\n  StepOrderingKind,\n  StepOrderingRuleOptions,\n  ToolUsageRuleOptions,\n  ObservedOutcomeRuleOptions,\n  TraceContract,\n  TraceContractAlternativeBranch,\n  TraceContractAlternatives,\n  TraceContractBody,\n  TraceContractControlRules,\n  TraceContractInput,\n  TraceContractLintDiagnostic,\n  TraceContractLlmRules,\n  TraceContractObservationProvenance,\n  TraceContractObservationRules,\n  TraceContractRetryRules,\n  TraceContractRecoveryOperation,\n  TraceContractRecoveryRetryableErrors,\n  TraceContractRecoverySuccessfulResultDependency,\n  RecoverySameArgumentsMode,\n  RecoverySideEffectClass,\n  TraceContractRunRules,\n  TraceContractScope,\n  TraceContractStepKind,\n  TraceContractStepOrderRelation,\n  TraceContractStepRef,\n  TraceContractStepRules,\n  TraceContractToolRules,\n  ControlStage,\n  ToolArgumentCheck,\n  ToolArgumentOccurrence,\n  ToolArgumentOperator,\n  ProgrammaticDiagnosticCode,\n  ProgrammaticDiagnosticSpec,\n} from \"../checks/index.js\";\n\nexport {\n  createBaselineRegressionRule,\n  createDecisionRule,\n  createGuardrailRule,\n  createLlmUsageRule,\n  createMaxStepDurationRule,\n  createObservedOutcomeRule,\n  createRequireCompletedRule,\n  createRetrievalRule,\n  createRunDepthRule,\n  createRunDurationRule,\n  createRunEventCountRule,\n  createRunStatusRule,\n  createStallDetectionRule,\n  createSafetyOversizedAttributeRule,\n  createSafetyRawContentRule,\n  createSafetyRedactionRule,\n  createSafetySecretPatternRule,\n  createStructureCycleRule,\n  createStructureIncompleteRule,\n  createStructureOrphanRule,\n  createStructureParallelWidthRule,\n  createStructureRelationshipRule,\n  createToolFailureRule,\n  createStepOrderingRule,\n  createToolOrderingRule,\n  createToolUsageRule,\n  defineTraceContract,\n  evaluateTraceContract,\n  evaluateTraceContractRead,\n  explainTraceContract,\n  lintTraceContract,\n  resolveTraceContractScope,\n  workflowMetadataForRun,\n  evaluateToolArgumentValue,\n  extractToolArgumentPayload,\n  resolveJsonPointer,\n  buildTraceFacts,\n  deriveFailureFacts,\n  deriveRelationshipFacts,\n  projectLogicalEvents,\n  resolveCanonicalToolName,\n  runTraceChecks,\n  summarizeSemanticParity,\n  PROGRAMMATIC_DIAGNOSTIC_SPECS,\n  formatProgrammaticDiagnostic,\n} from \"../checks/index.js\";\n\nexport {\n  ATTRIBUTION_CONFIDENCES,\n  ATTRIBUTION_CONFIDENCE_RANK,\n  isAttributionConfidence,\n} from \"../types/inspect-event.js\";\nexport type { AttributionConfidence } from \"../types/inspect-event.js\";\n","import { stat } from \"node:fs/promises\";\n\nimport { getTraceFilePath, resolveTraceDir } from \"@agent-inspect/core/advanced\";\nimport type { TraceInput } from \"@agent-inspect/core/readers\";\n\nexport interface TraceTargetOptions {\n  dir?: string;\n}\n\nexport async function readStdin(stdin: NodeJS.ReadableStream): Promise<string> {\n  stdin.setEncoding(\"utf8\");\n  let content = \"\";\n  for await (const chunk of stdin) {\n    content += typeof chunk === \"string\" ? chunk : String(chunk);\n  }\n  return content;\n}\n\nfunction isMissingFileError(error: unknown): boolean {\n  return (\n    error !== null &&\n    typeof error === \"object\" &&\n    \"code\" in error &&\n    (error as NodeJS.ErrnoException).code === \"ENOENT\"\n  );\n}\n\nexport async function inputFromTarget(\n  target: string,\n  options: TraceTargetOptions,\n  stdin: NodeJS.ReadableStream,\n): Promise<TraceInput> {\n  if (target === \"-\") {\n    return { type: \"string\", content: await readStdin(stdin) };\n  }\n\n  try {\n    const stats = await stat(target);\n    if (stats.isDirectory()) return { type: \"directory\", path: target };\n    return { type: \"file\", path: target };\n  } catch (error) {\n    if (!isMissingFileError(error)) throw error;\n  }\n\n  const runPath = getTraceFilePath(target, resolveTraceDir({ dir: options.dir }));\n  const stats = await stat(runPath);\n  if (stats.isDirectory()) return { type: \"directory\", path: runPath };\n  return { type: \"file\", path: runPath };\n}\n","import { readFile } from \"node:fs/promises\";\n\nimport {\n  TraceReadError,\n  openTrace,\n  type TraceReadWarning,\n} from \"@agent-inspect/core/readers\";\nimport {\n  createSafetyOversizedAttributeRule,\n  createSafetyRawContentRule,\n  createSafetyRedactionRule,\n  createSafetySecretPatternRule,\n  runTraceChecks,\n  type TraceCheckDiagnostic,\n  type TraceCheckFinding,\n  type TraceCheckRule,\n} from \"@agent-inspect/core/checks\";\nimport {\n  createRedactor,\n  type RedactionDetector,\n  type RedactionFinding,\n  type RedactionProfile,\n} from \"@agent-inspect/redact\";\n\nimport { redactTraceContent } from \"./redact.js\";\nimport type { CompiledRedactionPolicy } from \"./redaction-policy.js\";\nimport { loadRedactionPolicy } from \"./redaction-policy.js\";\nimport { inputFromTarget } from \"./trace-input.js\";\n\nexport interface SafetyCommandOptions {\n  dir?: string;\n  format?: string;\n  run?: string;\n  json?: boolean;\n  explain?: boolean;\n  maxStringLength?: string;\n  maxArrayLength?: string;\n  maxObjectKeys?: string;\n  maxSerializedBytes?: string;\n  /** Redaction profile used when deriving the artifact assessment (verify-safe). */\n  redactionProfile?: RedactionProfile;\n  /** Local JSON path for bounded custom redaction policy (#329). */\n  policy?: string;\n  /** Pre-compiled policy (tests / shared redact+verify path). */\n  compiledPolicy?: CompiledRedactionPolicy;\n}\n\ntype SafetyStatus = \"SAFE\" | \"SAFE WITH WARNINGS\" | \"UNSAFE\" | \"UNKNOWN\";\ntype SafetyCommandName = \"scan\" | \"verify-safe\";\n\n/** Residual assessment status after redact (#328); underscore form for JSON stability. */\nexport type ResidualSafetyStatus =\n  | \"SAFE\"\n  | \"SAFE_WITH_WARNINGS\"\n  | \"UNSAFE\"\n  | \"UNKNOWN\";\n\n/** Compact residual assessment: counts and codes only — never secret values. */\nexport interface ResidualSafetyAssessment {\n  status: ResidualSafetyStatus;\n  findings: number;\n  warnings: number;\n  errors: number;\n  codes: string[];\n  note: string;\n}\n\ninterface SafetyDiagnostic {\n  code: string;\n  message: string;\n  severity: \"info\" | \"warning\" | \"error\";\n}\n\ninterface SafetySummary {\n  findings: number;\n  warnings: number;\n  errors: number;\n}\n\n/** Compact layer status for source-vs-artifact reporting (6.9+). */\nexport interface SafetyLayerAssessment {\n  status: SafetyStatus;\n  summary: SafetySummary;\n  findings: TraceCheckFinding[];\n}\n\nexport interface SafetyRedactionSummary {\n  profile: RedactionProfile;\n  findings: number;\n  detectors: string[];\n}\n\ninterface SafetyResult {\n  ok: boolean;\n  command: SafetyCommandName;\n  status: SafetyStatus;\n  format: string;\n  runId?: string;\n  summary: SafetySummary;\n  findings: TraceCheckFinding[];\n  diagnostics: SafetyDiagnostic[];\n  warnings: TraceReadWarning[];\n  unsupportedFields: string[];\n  note: string;\n  /** Present on verify-safe when source and redacted-artifact assessments are both available. */\n  sourceAssessment?: SafetyLayerAssessment;\n  artifactAssessment?: SafetyLayerAssessment;\n  redactionSummary?: SafetyRedactionSummary;\n}\n\nconst BEST_EFFORT_NOTE =\n  \"Best-effort local safety verification only; not a compliance, privacy, security, or regulatory certification.\";\n\nconst DEFAULT_MAX_STRING_LENGTH = 16_384;\nconst DEFAULT_MAX_ARRAY_LENGTH = 1_000;\nconst DEFAULT_MAX_OBJECT_KEYS = 200;\nconst DEFAULT_MAX_SERIALIZED_BYTES = 128 * 1024;\n\nfunction parseLimit(value: string | undefined, label: string): number | undefined {\n  if (value === undefined) return undefined;\n  const parsed = Number(value);\n  if (!Number.isFinite(parsed) || parsed < 0) {\n    throw new Error(`${label} must be a non-negative number.`);\n  }\n  return parsed;\n}\n\nfunction stable(value: unknown): unknown {\n  if (Array.isArray(value)) return value.map(stable);\n  if (value === null || typeof value !== \"object\") return value;\n  const record = value as Record<string, unknown>;\n  return Object.fromEntries(\n    Object.keys(record)\n      .sort((a, b) => a.localeCompare(b))\n      .map((key) => [key, stable(record[key])]),\n  );\n}\n\nfunction safetyDiagnostic(\n  code: string,\n  message: string,\n  severity: SafetyDiagnostic[\"severity\"] = \"error\",\n): SafetyDiagnostic {\n  return { code, message, severity };\n}\n\nfunction warningDiagnostics(\n  warnings: readonly TraceReadWarning[],\n  unsupportedFields: readonly string[],\n): SafetyDiagnostic[] {\n  return [\n    ...warnings.map((warning) =>\n      safetyDiagnostic(\n        warning.code,\n        warning.message,\n        warning.severity === \"error\" ? \"error\" : \"warning\",\n      ),\n    ),\n    ...unsupportedFields.map((field) =>\n      safetyDiagnostic(\n        \"unsupported_field\",\n        `Reader reported unsupported field: ${field}`,\n        \"warning\",\n      ),\n    ),\n  ];\n}\n\nfunction diagnosticFromCheck(item: TraceCheckDiagnostic): SafetyDiagnostic {\n  return safetyDiagnostic(item.code, item.message, item.severity);\n}\n\nfunction statusFrom(\n  findings: readonly TraceCheckFinding[],\n  diagnostics: readonly SafetyDiagnostic[],\n): SafetyStatus {\n  if (diagnostics.some((item) => item.severity === \"error\")) return \"UNKNOWN\";\n  if (findings.some((item) => item.severity === \"error\")) return \"UNSAFE\";\n  if (diagnostics.some((item) => item.severity === \"warning\")) return \"SAFE WITH WARNINGS\";\n  if (findings.some((item) => item.severity === \"warning\")) return \"SAFE WITH WARNINGS\";\n  return \"SAFE\";\n}\n\nfunction resultFromParts(parts: {\n  command: SafetyCommandName;\n  format: string;\n  runId?: string;\n  findings?: readonly TraceCheckFinding[];\n  diagnostics?: readonly SafetyDiagnostic[];\n  warnings?: readonly TraceReadWarning[];\n  unsupportedFields?: readonly string[];\n  sourceAssessment?: SafetyLayerAssessment;\n  artifactAssessment?: SafetyLayerAssessment;\n  redactionSummary?: SafetyRedactionSummary;\n  /** When set, overrides status derived from findings (used for artifact-gated verify-safe). */\n  status?: SafetyStatus;\n}): SafetyResult {\n  const findings = [...(parts.findings ?? [])];\n  const diagnostics = [...(parts.diagnostics ?? [])];\n  const warnings = [...(parts.warnings ?? [])];\n  const unsupportedFields = [...(parts.unsupportedFields ?? [])];\n  const status = parts.status ?? statusFrom(findings, diagnostics);\n  return {\n    ok: status === \"SAFE\" || status === \"SAFE WITH WARNINGS\",\n    command: parts.command,\n    status,\n    format: parts.format,\n    ...(parts.runId !== undefined ? { runId: parts.runId } : {}),\n    summary: {\n      findings: findings.length,\n      warnings:\n        diagnostics.filter((item) => item.severity === \"warning\").length +\n        findings.filter((item) => item.severity === \"warning\").length,\n      errors:\n        diagnostics.filter((item) => item.severity === \"error\").length +\n        findings.filter((item) => item.severity === \"error\").length,\n    },\n    findings,\n    diagnostics,\n    warnings,\n    unsupportedFields,\n    note: BEST_EFFORT_NOTE,\n    ...(parts.sourceAssessment !== undefined\n      ? { sourceAssessment: parts.sourceAssessment }\n      : {}),\n    ...(parts.artifactAssessment !== undefined\n      ? { artifactAssessment: parts.artifactAssessment }\n      : {}),\n    ...(parts.redactionSummary !== undefined\n      ? { redactionSummary: parts.redactionSummary }\n      : {}),\n  };\n}\n\nfunction layerFromResult(result: SafetyResult): SafetyLayerAssessment {\n  return {\n    status: result.status,\n    summary: result.summary,\n    findings: result.findings,\n  };\n}\n\nfunction readErrorResult(\n  command: SafetyCommandName,\n  error: unknown,\n): SafetyResult {\n  if (error instanceof TraceReadError) {\n    const code =\n      error.code === \"unsupported_format\"\n        ? \"AI_SAFETY_UNSUPPORTED_FORMAT\"\n        : error.code === \"ambiguous_format\"\n          ? \"AI_SAFETY_AMBIGUOUS_FORMAT\"\n          : \"AI_SAFETY_TRACE_UNREADABLE\";\n    return resultFromParts({\n      command,\n      format: \"unknown\",\n      diagnostics: [safetyDiagnostic(code, error.message)],\n      warnings: error.warnings,\n    });\n  }\n  return resultFromParts({\n    command,\n    format: \"unknown\",\n    diagnostics: [\n      safetyDiagnostic(\n        \"AI_SAFETY_TRACE_UNREADABLE\",\n        error instanceof Error ? error.message : String(error),\n      ),\n    ],\n  });\n}\n\nfunction invalidArgumentResult(\n  command: SafetyCommandName,\n  error: unknown,\n): SafetyResult {\n  return resultFromParts({\n    command,\n    format: \"unknown\",\n    diagnostics: [\n      safetyDiagnostic(\n        \"AI_SAFETY_INVALID_ARGUMENTS\",\n        error instanceof Error ? error.message : String(error),\n      ),\n    ],\n  });\n}\n\nfunction buildSafetyRules(options: SafetyCommandOptions): TraceCheckRule[] {\n  const maxStringLength =\n    parseLimit(options.maxStringLength, \"--max-string-length\") ?? DEFAULT_MAX_STRING_LENGTH;\n  const maxArrayLength =\n    parseLimit(options.maxArrayLength, \"--max-array-length\") ?? DEFAULT_MAX_ARRAY_LENGTH;\n  const maxObjectKeys =\n    parseLimit(options.maxObjectKeys, \"--max-object-keys\") ?? DEFAULT_MAX_OBJECT_KEYS;\n  const maxSerializedBytes =\n    parseLimit(options.maxSerializedBytes, \"--max-serialized-bytes\") ??\n    DEFAULT_MAX_SERIALIZED_BYTES;\n\n  return [\n    createSafetyRawContentRule(),\n    createSafetyRedactionRule(),\n    createSafetySecretPatternRule(),\n    createSafetyOversizedAttributeRule({\n      maxStringLength,\n      maxArrayLength,\n      maxObjectKeys,\n      maxSerializedBytes,\n    }),\n  ];\n}\n\nfunction flattenNodes(\n  nodes: readonly {\n    event: {\n      eventId: string;\n      runId: string;\n      parentId?: string;\n      kind: string;\n      name: string;\n      status?: string;\n      attributes?: Record<string, unknown>;\n    };\n    children: readonly unknown[];\n  }[],\n): {\n  event: {\n    eventId: string;\n    runId: string;\n    parentId?: string;\n    kind: string;\n    name: string;\n    status?: string;\n    attributes?: Record<string, unknown>;\n  };\n  children: readonly unknown[];\n}[] {\n  return nodes.flatMap((node) => [\n    node,\n    ...flattenNodes(\n      node.children as readonly {\n        event: {\n          eventId: string;\n          runId: string;\n          parentId?: string;\n          kind: string;\n          name: string;\n          status?: string;\n          attributes?: Record<string, unknown>;\n        };\n        children: readonly unknown[];\n      }[],\n    ),\n  ]);\n}\n\nfunction detectorSeverity(finding: RedactionFinding): TraceCheckFinding[\"severity\"] {\n  return finding.severity;\n}\n\nfunction classifyRedactionDetector(detector: string): {\n  category: NonNullable<TraceCheckFinding[\"category\"]>;\n  confidence: NonNullable<TraceCheckFinding[\"confidence\"]>;\n} {\n  if (\n    detector === \"value.creditCard\" ||\n    detector === \"value.email\" ||\n    detector === \"value.phone\"\n  ) {\n    return { category: \"personal-data\", confidence: \"high\" };\n  }\n  if (detector === \"value.ipv4\" || detector === \"value.ipv6\") {\n    return { category: \"identifier\", confidence: \"medium\" };\n  }\n  if (\n    detector.startsWith(\"value.\") &&\n    (detector.includes(\"Token\") ||\n      detector.includes(\"Key\") ||\n      detector.includes(\"jwt\") ||\n      detector.includes(\"authorization\") ||\n      detector.includes(\"bearer\") ||\n      detector.includes(\"cookie\") ||\n      detector.includes(\"privateKey\") ||\n      detector.includes(\"github\") ||\n      detector.includes(\"aws\") ||\n      detector.includes(\"provider\"))\n  ) {\n    return { category: \"credential\", confidence: \"high\" };\n  }\n  if (detector.startsWith(\"key.\")) {\n    return { category: \"credential\", confidence: \"medium\" };\n  }\n  return { category: \"credential\", confidence: \"medium\" };\n}\n\nfunction redactionOptionsFromPolicy(policy: CompiledRedactionPolicy | undefined): {\n  extraKeys?: string[];\n  detectors?: RedactionDetector[];\n} {\n  if (policy === undefined) return {};\n  return {\n    ...(policy.extraKeys.length > 0 ? { extraKeys: [...policy.extraKeys] } : {}),\n    ...(policy.detectors.length > 0 ? { detectors: [...policy.detectors] } : {}),\n  };\n}\n\nfunction redactionDetectorFindings(\n  read: Awaited<ReturnType<typeof openTrace>>,\n  runId: string | undefined,\n  policy?: CompiledRedactionPolicy,\n): TraceCheckFinding[] {\n  const runs = runId === undefined\n    ? read.runs\n    : read.runs.filter((run) => run.runId === runId);\n  const out: TraceCheckFinding[] = [];\n  const policyOptions = redactionOptionsFromPolicy(policy);\n\n  for (const run of runs) {\n    for (const node of flattenNodes(run.children)) {\n      const attrs = node.event.attributes;\n      if (attrs === undefined) continue;\n\n      const result = createRedactor({\n        profile: \"share\",\n        ...policyOptions,\n      }).redact(attrs);\n      for (const finding of result.findings) {\n        if (finding.action === \"keep\") continue;\n        const taxonomy = classifyRedactionDetector(finding.detector);\n        out.push({\n          ruleId: \"safety.redactDetector\",\n          severity: detectorSeverity(finding),\n          status: finding.severity === \"error\" ? \"fail\" : \"warning\",\n          message: `Redaction detector ${finding.detector} matched ${finding.matchKind} at ${finding.path}.`,\n          expected: \"redacted trace content\",\n          actual: finding.detector,\n          evidence: [\n            {\n              runId: node.event.runId,\n              eventId: node.event.eventId,\n              ...(node.event.parentId !== undefined ? { parentId: node.event.parentId } : {}),\n              kind: node.event.kind,\n              name: node.event.name,\n              ...(node.event.status !== undefined ? { status: node.event.status } : {}),\n              path: `attributes.${finding.path.replace(/^\\$\\.?/, \"\")}`,\n            },\n          ],\n          category: taxonomy.category,\n          confidence: taxonomy.confidence,\n          detector: finding.detector,\n          action: finding.action,\n        });\n      }\n    }\n  }\n\n  return out.sort((a, b) => {\n    const aEvidence = a.evidence[0];\n    const bEvidence = b.evidence[0];\n    return (\n      (aEvidence?.runId ?? \"\").localeCompare(bEvidence?.runId ?? \"\") ||\n      (aEvidence?.eventId ?? \"\").localeCompare(bEvidence?.eventId ?? \"\") ||\n      (aEvidence?.path ?? \"\").localeCompare(bEvidence?.path ?? \"\") ||\n      a.message.localeCompare(b.message)\n    );\n  });\n}\n\nfunction exitCodeFor(result: SafetyResult): number {\n  if (result.status === \"SAFE\" || result.status === \"SAFE WITH WARNINGS\") return 0;\n  if (result.status === \"UNSAFE\") return 1;\n  return 2;\n}\n\nfunction toResidualStatus(status: SafetyStatus): ResidualSafetyStatus {\n  if (status === \"SAFE WITH WARNINGS\") return \"SAFE_WITH_WARNINGS\";\n  return status;\n}\n\n/** Map a full safety result into a residual assessment (no secret values). */\nexport function toResidualSafetyAssessment(result: {\n  status: SafetyStatus;\n  summary: SafetySummary;\n  diagnostics: readonly SafetyDiagnostic[];\n  findings: readonly TraceCheckFinding[];\n}): ResidualSafetyAssessment {\n  const codes = [\n    ...new Set([\n      ...result.diagnostics.map((item) => item.code),\n      ...result.findings.map((item) => item.ruleId),\n    ]),\n  ].sort((a, b) => a.localeCompare(b));\n  return {\n    status: toResidualStatus(result.status),\n    findings: result.summary.findings,\n    warnings: result.summary.warnings,\n    errors: result.summary.errors,\n    codes,\n    note: BEST_EFFORT_NOTE,\n  };\n}\n\n/**\n * Assess residual safety on already-redacted content using the canonical\n * verify-safe detector pipeline. Supported AgentInspect traces get full\n * assessment; arbitrary JSON that cannot be opened as a trace yields UNKNOWN.\n */\nexport async function assessResidualFromContent(\n  content: string,\n  options: SafetyCommandOptions = {},\n): Promise<ResidualSafetyAssessment> {\n  try {\n    const policy =\n      options.compiledPolicy ??\n      (options.policy !== undefined ? await loadRedactionPolicy(options.policy) : undefined);\n    const read = await openTrace(\n      { type: \"string\", content },\n      { format: options.format ?? \"agent-inspect-jsonl\" },\n    );\n    const result = assessOpenedTrace(read, {\n      ...options,\n      ...(policy !== undefined ? { compiledPolicy: policy } : {}),\n    });\n    return toResidualSafetyAssessment(result);\n  } catch (error) {\n    if (error instanceof TraceReadError) {\n      return toResidualSafetyAssessment(readErrorResult(\"verify-safe\", error));\n    }\n    const message = error instanceof Error ? error.message : String(error);\n    return {\n      status: \"UNKNOWN\",\n      findings: 0,\n      warnings: 0,\n      errors: 1,\n      codes: [\"AI_SAFETY_TRACE_UNREADABLE\"],\n      note: `${BEST_EFFORT_NOTE} Residual assessment requires a supported AgentInspect trace; ${message}`,\n    };\n  }\n}\n\nfunction explainFinding(finding: TraceCheckFinding, blocksBundle: boolean): string[] {\n  const path = finding.evidence[0]?.path ?? \"(unknown path)\";\n  const category = finding.category ?? \"structure\";\n  const confidence = finding.confidence ?? \"medium\";\n  const detector = finding.detector ?? finding.ruleId;\n  const action = finding.action ?? \"review\";\n  const redactionHint =\n    category === \"credential\" ||\n    category === \"personal-data\" ||\n    category === \"raw-content\" ||\n    action.includes(\"redact\")\n      ? \"Usually removable by share/strict redaction before bundling.\"\n      : \"May require omitting the field, lowering limits, or an explicit local override.\";\n  return [\n    `  Matched: detector=${detector}; path=${path}; category=${category}`,\n    `  Why: ${finding.message}`,\n    `  Confidence: ${confidence}`,\n    `  Redaction: ${redactionHint}`,\n    `  Override: configure a custom redaction/detector rule locally (see docs/SAFETY-POLICY.md); do not weaken defaults globally.`,\n    `  Bundle gate: ${blocksBundle ? \"blocks share-safe bundle unless --allow-unsafe\" : \"does not block by itself (warning/info)\"}`,\n  ];\n}\n\nfunction findingExplanation(finding: TraceCheckFinding): Record<string, unknown> {\n  const blocks = finding.severity === \"error\" || finding.status === \"fail\";\n  return {\n    ruleId: finding.ruleId,\n    detector: finding.detector ?? finding.ruleId,\n    path: finding.evidence[0]?.path,\n    category: finding.category,\n    confidence: finding.confidence,\n    action: finding.action,\n    blocksBundle: blocks,\n    // Never include matched secret/PII values.\n    message: finding.message,\n  };\n}\n\nfunction printHuman(result: SafetyResult, explain = false): void {\n  console.log(`Safety status: ${result.status}`);\n  console.log(`Format: ${result.format}`);\n  if (result.runId !== undefined) console.log(`Run: ${result.runId}`);\n  if (result.sourceAssessment !== undefined && result.artifactAssessment !== undefined) {\n    console.log(`Source assessment: ${result.sourceAssessment.status}`);\n    console.log(`Artifact assessment: ${result.artifactAssessment.status}`);\n    if (result.redactionSummary !== undefined) {\n      console.log(\n        `Redaction: profile=${result.redactionSummary.profile}, findings=${result.redactionSummary.findings}`,\n      );\n    }\n  }\n  console.log(\n    `Summary: ${result.summary.findings} finding(s), ${result.summary.warnings} warning(s), ${result.summary.errors} error(s)`,\n  );\n  for (const diagnostic of result.diagnostics) {\n    console.log(`- ${diagnostic.code}: ${diagnostic.message}`);\n  }\n  for (const finding of result.findings) {\n    const path = finding.evidence[0]?.path;\n    const taxonomy =\n      finding.category !== undefined || finding.confidence !== undefined\n        ? ` [${[finding.category, finding.confidence].filter(Boolean).join(\"/\")}]`\n        : \"\";\n    console.log(`- ${finding.ruleId}: ${finding.message}${path ? ` (${path})` : \"\"}${taxonomy}`);\n    if (explain) {\n      const blocks = finding.severity === \"error\" || finding.status === \"fail\";\n      for (const line of explainFinding(finding, blocks)) {\n        console.log(line);\n      }\n    }\n  }\n  console.log(`Note: ${result.note}`);\n}\n\nfunction printJson(result: SafetyResult, explain = false): void {\n  const payload =\n    explain === true\n      ? { ...result, explanations: result.findings.map(findingExplanation) }\n      : result;\n  console.log(JSON.stringify(stable(payload), null, 2));\n}\n\nasync function safetyCommand(\n  command: SafetyCommandName,\n  target: string,\n  options: SafetyCommandOptions,\n  stdin: NodeJS.ReadableStream,\n): Promise<void> {\n  let result: SafetyResult;\n\n  try {\n    const policy =\n      options.compiledPolicy ??\n      (options.policy !== undefined ? await loadRedactionPolicy(options.policy) : undefined);\n    const optionsWithPolicy: SafetyCommandOptions = {\n      ...options,\n      ...(policy !== undefined ? { compiledPolicy: policy } : {}),\n    };\n    const input = await inputFromTarget(target, optionsWithPolicy, stdin);\n    const read = await openTrace(input, {\n      ...(options.format !== undefined ? { format: options.format } : {}),\n    });\n    const source = assessOpenedTrace(read, {\n      ...optionsWithPolicy,\n      ...(options.run !== undefined ? { runId: options.run } : {}),\n    });\n    if (command === \"scan\") {\n      result = { ...source, command: \"scan\" };\n    } else {\n      const profile = options.redactionProfile ?? \"share\";\n      const rawContent =\n        input.type === \"string\"\n          ? input.content\n          : input.type === \"file\"\n            ? await readFile(input.path, \"utf-8\")\n            : undefined;\n\n      if (rawContent === undefined) {\n        // Directory / multi-run inputs: report source only until a single artifact exists.\n        result = {\n          ...source,\n          command: \"verify-safe\",\n          sourceAssessment: layerFromResult(source),\n        };\n      } else {\n        const redacted = redactTraceContent(rawContent, profile, policy);\n        // Reader labels (e.g. agent-inspect-v0.2-jsonl) are not registered format ids;\n        // re-open redacted content with the canonical JSONL reader id.\n        const artifactRead = await openTrace(\n          { type: \"string\", content: redacted.content },\n          { format: options.format ?? \"agent-inspect-jsonl\" },\n        );\n        const artifact = assessOpenedTrace(artifactRead, {\n          ...optionsWithPolicy,\n          ...(options.run !== undefined ? { runId: options.run } : {}),\n        });\n        const detectors = [\n          ...new Set(redacted.findings.map((finding) => finding.detector)),\n        ].sort((a, b) => a.localeCompare(b));\n        result = resultFromParts({\n          command: \"verify-safe\",\n          format: artifact.format,\n          runId: artifact.runId ?? source.runId,\n          findings: artifact.findings,\n          diagnostics: artifact.diagnostics,\n          warnings: artifact.warnings,\n          unsupportedFields: artifact.unsupportedFields,\n          status: artifact.status,\n          sourceAssessment: layerFromResult(source),\n          artifactAssessment: layerFromResult(artifact),\n          redactionSummary: {\n            profile,\n            findings: redacted.findings.length,\n            detectors,\n          },\n        });\n      }\n    }\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    result = message.startsWith(\"--\") || message.includes(\"--policy\")\n      ? invalidArgumentResult(command, error)\n      : readErrorResult(command, error);\n  }\n\n  process.exitCode = exitCodeFor(result);\n  if (options.json) printJson(result, options.explain === true);\n  else printHuman(result, options.explain === true);\n}\n\nexport function scanCommand(\n  target: string,\n  options: SafetyCommandOptions = {},\n  stdin: NodeJS.ReadableStream = process.stdin,\n): Promise<void> {\n  return safetyCommand(\"scan\", target, options, stdin);\n}\n\nexport function verifySafeCommand(\n  target: string,\n  options: SafetyCommandOptions = {},\n  stdin: NodeJS.ReadableStream = process.stdin,\n): Promise<void> {\n  return safetyCommand(\"verify-safe\", target, options, stdin);\n}\n\n/** Assess safety on an already-opened trace (shared by bundle and safety commands). */\nexport function assessOpenedTrace(\n  read: Awaited<ReturnType<typeof openTrace>>,\n  options: SafetyCommandOptions & { runId?: string } = {},\n): SafetyResult {\n  try {\n    const rules = buildSafetyRules(options);\n    const checkResult = runTraceChecks(\n      { read },\n      {\n        rules,\n        ...(options.runId !== undefined ? { runId: options.runId } : {}),\n        ...(options.run !== undefined ? { runId: options.run } : {}),\n      },\n    );\n    const detectorFindings =\n      checkResult.diagnostics.length === 0\n        ? redactionDetectorFindings(read, checkResult.runId, options.compiledPolicy)\n        : [];\n    return resultFromParts({\n      command: \"verify-safe\",\n      format: checkResult.format,\n      runId: checkResult.runId,\n      findings: [...checkResult.findings, ...detectorFindings],\n      diagnostics: [\n        ...checkResult.diagnostics.map(diagnosticFromCheck),\n        ...warningDiagnostics(read.warnings, read.unsupportedFields),\n      ],\n      warnings: read.warnings,\n      unsupportedFields: read.unsupportedFields,\n    });\n  } catch (error) {\n    return messageStartsWithDash(error)\n      ? invalidArgumentResult(\"verify-safe\", error)\n      : readErrorResult(\"verify-safe\", error);\n  }\n}\n\nfunction messageStartsWithDash(error: unknown): boolean {\n  const message = error instanceof Error ? error.message : String(error);\n  return message.startsWith(\"--\");\n}\n","import {\n  buildLocalExplanation,\n  type ExplainMode,\n  type ExplainResult,\n  type InspectRunTree,\n  type RedactionProfile,\n} from \"@agent-inspect/core/advanced\";\nimport {\n  TraceReadError,\n  openTrace,\n  type TraceReadResult,\n} from \"@agent-inspect/core/readers\";\n\nimport { resolveRedactionProfileOption } from \"./cli-option-aliases.js\";\nimport { inputFromTarget } from \"./trace-input.js\";\n\nexport interface ExplainCommandOptions {\n  dir?: string;\n  format?: string;\n  run?: string;\n  dryRun?: boolean;\n  json?: boolean;\n  provider?: string;\n  redactionProfile?: string;\n  profile?: string;\n}\n\nfunction parseRedactionProfile(value: string | undefined): RedactionProfile {\n  const profile = (value ?? \"local\").trim().toLowerCase();\n  if (profile === \"local\" || profile === \"share\" || profile === \"strict\") {\n    return profile;\n  }\n  throw new Error(\n    `Unsupported --redaction-profile \"${value ?? \"\"}\". Use local, share, or strict.`,\n  );\n}\n\nfunction selectRun(\n  result: TraceReadResult,\n  runId?: string,\n): InspectRunTree | undefined {\n  if (runId !== undefined) {\n    return result.runs.find((run) => run.runId === runId);\n  }\n  return result.runs.length === 1 ? result.runs[0] : undefined;\n}\n\nfunction printMultipleRuns(result: TraceReadResult): void {\n  console.error(\n    `Trace contains ${result.runs.length} runs. Re-run with --run <run-id>.`,\n  );\n  for (const run of result.runs) {\n    console.error(`- ${run.runId}${run.name !== undefined ? ` name=${run.name}` : \"\"}`);\n  }\n}\n\nfunction renderHuman(result: ExplainResult): string {\n  const lines = [\n    `Explain: ${result.name ?? result.runId}`,\n    `Mode: ${result.mode}`,\n    `Status: ${result.status ?? \"unknown\"}`,\n    `Redaction: ${result.redactionProfile}`,\n    \"\",\n    \"Facts:\",\n  ];\n  for (const fact of result.facts) {\n    lines.push(`- ${fact.id}: ${JSON.stringify(fact.value)}`);\n  }\n  lines.push(\"\", \"Inferences:\");\n  if (result.inferences.length === 0) {\n    lines.push(\"- none\");\n  } else {\n    for (const inference of result.inferences) {\n      lines.push(`- ${inference.label}: ${inference.text}`);\n    }\n  }\n  lines.push(\"\", \"Notes:\");\n  for (const note of result.notes) {\n    lines.push(`- ${note}`);\n  }\n  return lines.join(\"\\n\");\n}\n\nfunction writeJson(result: unknown): void {\n  console.log(JSON.stringify(result, null, 2));\n}\n\nfunction rejectProvider(provider: string, json: boolean | undefined): void {\n  process.exitCode = 1;\n  const message =\n    `Provider explain is not implemented in this build: ${provider}. ` +\n    \"Use --dry-run to inspect the redacted local payload.\";\n  if (json) {\n    writeJson({\n      ok: false,\n      error: { code: \"PROVIDER_NOT_IMPLEMENTED\", message },\n    });\n    return;\n  }\n  console.error(message);\n}\n\nexport async function explainCommand(\n  target: string,\n  options: ExplainCommandOptions = {},\n  stdin: NodeJS.ReadableStream = process.stdin,\n): Promise<void> {\n  if (options.provider !== undefined) {\n    rejectProvider(options.provider, options.json);\n    return;\n  }\n\n  let redactionProfile: RedactionProfile;\n  try {\n    redactionProfile = parseRedactionProfile(resolveRedactionProfileOption(options));\n  } catch (error) {\n    process.exitCode = 1;\n    console.error(error instanceof Error ? error.message : String(error));\n    return;\n  }\n\n  try {\n    const input = await inputFromTarget(target, options, stdin);\n    const read = await openTrace(input, {\n      ...(options.format !== undefined ? { format: options.format } : {}),\n    });\n    const selected = selectRun(read, options.run);\n    if (selected === undefined) {\n      process.exitCode = 1;\n      const message =\n        options.run !== undefined\n          ? `Run not found: ${options.run}`\n          : `Trace contains ${read.runs.length} runs. Specify --run <run-id>.`;\n      if (options.json) {\n        writeJson({ ok: false, error: { message }, runs: read.runs });\n      } else if (options.run !== undefined) {\n        console.error(message);\n      } else {\n        printMultipleRuns(read);\n      }\n      return;\n    }\n\n    const mode: ExplainMode = options.dryRun ? \"dry-run\" : \"local\";\n    const explanation = buildLocalExplanation(selected, {\n      mode,\n      redactionProfile,\n    });\n\n    if (options.json) {\n      writeJson({\n        ok: true,\n        format: read.format,\n        sourceFiles: read.sourceFiles,\n        warnings: read.warnings,\n        unsupportedFields: read.unsupportedFields,\n        explanation,\n      });\n      return;\n    }\n\n    console.log(renderHuman(explanation));\n  } catch (error) {\n    process.exitCode = 1;\n    const message = error instanceof Error ? error.message : String(error);\n    const code = error instanceof TraceReadError ? error.code : undefined;\n    if (options.json) {\n      writeJson({\n        ok: false,\n        error: { ...(code !== undefined ? { code } : {}), message },\n      });\n      return;\n    }\n    console.error(message);\n  }\n}\n","import { stat } from \"node:fs/promises\";\n\nimport {\n  formatDuration,\n  formatTimestamp,\n  getIndent,\n  type InspectNode,\n  type InspectRunTree,\n} from \"@agent-inspect/core/advanced\";\nimport {\n  TraceReadError,\n  openTrace,\n  type TraceInput,\n  type TraceReadResult,\n  type TraceReadWarning,\n} from \"@agent-inspect/core/readers\";\n\nexport interface OpenCommandOptions {\n  format?: string;\n  json?: boolean;\n  diagnostics?: boolean;\n  run?: string;\n}\n\nexport interface OpenCommandJsonOutput {\n  format?: string;\n  sourceFiles?: string[];\n  unsupportedFields?: string[];\n  warnings?: TraceReadWarning[];\n  selectedRunId?: string;\n  runs?: InspectRunTree[];\n  error?: {\n    code?: string;\n    message: string;\n  };\n}\n\nasync function readStdin(stdin: NodeJS.ReadableStream): Promise<string> {\n  stdin.setEncoding(\"utf8\");\n  let content = \"\";\n  for await (const chunk of stdin) {\n    content += typeof chunk === \"string\" ? chunk : String(chunk);\n  }\n  return content;\n}\n\nasync function inputFromPathOrStdin(\n  input: string | undefined,\n  stdin: NodeJS.ReadableStream,\n): Promise<TraceInput> {\n  if (input === undefined || input === \"-\") {\n    return { type: \"string\", content: await readStdin(stdin) };\n  }\n\n  const stats = await stat(input);\n  if (stats.isDirectory()) return { type: \"directory\", path: input };\n  return { type: \"file\", path: input };\n}\n\nfunction printWarnings(result: Pick<TraceReadResult, \"warnings\" | \"unsupportedFields\">): void {\n  if (result.warnings.length === 0 && result.unsupportedFields.length === 0) {\n    return;\n  }\n  console.log(\"\");\n  console.log(\"Diagnostics\");\n  for (const warning of result.warnings) {\n    const where = [\n      warning.sourceFile,\n      warning.line !== undefined ? `line ${warning.line}` : undefined,\n      warning.field,\n    ].filter((value) => value !== undefined).join(\" \");\n    console.log(\n      `- ${warning.code}: ${warning.message}${where !== \"\" ? ` (${where})` : \"\"}`,\n    );\n  }\n  for (const field of result.unsupportedFields) {\n    console.log(`- unsupported: ${field}`);\n  }\n}\n\nfunction printNode(node: InspectNode, depth: number): void {\n  const ev = node.event;\n  const status = ev.status !== undefined ? ` ${ev.status}` : \"\";\n  const duration =\n    ev.durationMs !== undefined ? ` ${formatDuration(ev.durationMs)}` : \"\";\n  console.log(`${getIndent(depth)}${ev.kind.toLowerCase()}: ${ev.name}${status}${duration}`);\n  for (const child of node.children) {\n    printNode(child, depth + 1);\n  }\n}\n\nfunction printRun(result: TraceReadResult, run: InspectRunTree): void {\n  console.log(`Format: ${result.format}`);\n  console.log(`Run: ${run.runId}`);\n  if (run.name !== undefined) console.log(`Name: ${run.name}`);\n  if (run.status !== undefined) console.log(`Status: ${run.status}`);\n  if (run.startedAt !== undefined) {\n    console.log(`Started: ${formatTimestamp(run.startedAt)}`);\n  }\n  if (run.durationMs !== undefined) {\n    console.log(`Duration: ${formatDuration(run.durationMs)}`);\n  }\n  console.log(`Events: ${run.metadata.totalEvents}`);\n  for (const node of run.children) {\n    printNode(node, 0);\n  }\n}\n\nfunction selectRun(\n  result: TraceReadResult,\n  runId?: string,\n): InspectRunTree | undefined {\n  if (runId !== undefined) {\n    return result.runs.find((run) => run.runId === runId);\n  }\n  return result.runs.length === 1 ? result.runs[0] : undefined;\n}\n\nfunction printMultipleRuns(result: TraceReadResult): void {\n  console.error(\n    `Trace contains ${result.runs.length} runs. Re-run with --run <run-id>.`,\n  );\n  for (const run of result.runs) {\n    const bits = [\n      run.runId,\n      run.name !== undefined ? `name=${run.name}` : undefined,\n      run.status !== undefined ? `status=${run.status}` : undefined,\n      `events=${run.metadata.totalEvents}`,\n    ].filter((value) => value !== undefined);\n    console.error(`- ${bits.join(\" \")}`);\n  }\n}\n\nfunction writeJson(output: OpenCommandJsonOutput): void {\n  console.log(JSON.stringify(output, null, 2));\n}\n\n/**\n * Opens any local trace format supported by the canonical reader pipeline.\n * User-facing errors set `process.exitCode` without throwing.\n */\nexport async function openCommand(\n  input: string | undefined,\n  options: OpenCommandOptions = {},\n  stdin: NodeJS.ReadableStream = process.stdin,\n): Promise<void> {\n  try {\n    const traceInput = await inputFromPathOrStdin(input, stdin);\n    const result = await openTrace(traceInput, {\n      ...(options.format !== undefined ? { format: options.format } : {}),\n    });\n    const selected = selectRun(result, options.run);\n\n    if (selected === undefined) {\n      process.exitCode = 1;\n      const message =\n        options.run !== undefined\n          ? `Run not found: ${options.run}`\n          : `Trace contains ${result.runs.length} runs. Specify --run <run-id>.`;\n      if (options.json) {\n        writeJson({\n          format: result.format,\n          sourceFiles: result.sourceFiles,\n          warnings: result.warnings,\n          unsupportedFields: result.unsupportedFields,\n          runs: result.runs,\n          error: { message },\n        });\n      } else if (options.run !== undefined) {\n        console.error(message);\n      } else {\n        printMultipleRuns(result);\n      }\n      return;\n    }\n\n    if (options.json) {\n      writeJson({\n        format: result.format,\n        sourceFiles: result.sourceFiles,\n        warnings: result.warnings,\n        unsupportedFields: result.unsupportedFields,\n        selectedRunId: selected.runId,\n        runs: [selected],\n      });\n      return;\n    }\n\n    printRun(result, selected);\n    if (options.diagnostics) {\n      printWarnings(result);\n    }\n  } catch (error) {\n    process.exitCode = 1;\n    const message = error instanceof Error ? error.message : String(error);\n    const code = error instanceof TraceReadError ? error.code : undefined;\n    const warnings = error instanceof TraceReadError ? error.warnings : [];\n    if (options.json) {\n      writeJson({\n        warnings,\n        error: { ...(code !== undefined ? { code } : {}), message },\n      });\n      return;\n    }\n    console.error(message);\n    if (options.diagnostics) {\n      printWarnings({ warnings, unsupportedFields: [] });\n    }\n  }\n}\n","import { mkdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { validateEvent } from \"@agent-inspect/core/advanced\";\nimport {\n  isPersistedInspectEvent,\n  traceEventToPersistedInspectEvent,\n  type PersistedInspectEvent,\n} from \"@agent-inspect/core/persisted\";\n\nexport interface MigrateCommandOptions {\n  to?: string;\n  dryRun?: boolean;\n  output?: string;\n  force?: boolean;\n}\n\ninterface MigrationWarning {\n  line: number;\n  message: string;\n}\n\ninterface MigrationResult {\n  input: string;\n  output?: string;\n  targetSchemaVersion: \"1.0\";\n  sourceFormats: string[];\n  validRows: number;\n  outputRows: number;\n  skippedRows: number;\n  warnings: MigrationWarning[];\n  content: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseTarget(value: string | undefined): \"1.0\" {\n  const target = (value ?? \"\").trim();\n  if (target === \"1.0\") return \"1.0\";\n  throw new Error('Unsupported migration target. Use \"--to 1.0\".');\n}\n\nfunction formatOf(value: unknown): \"0.1\" | \"0.2\" | \"1.0\" | \"unknown\" {\n  if (!isRecord(value)) return \"unknown\";\n  if (value.schemaVersion === \"0.1\") return \"0.1\";\n  if (value.schemaVersion === \"0.2\") return \"0.2\";\n  if (value.schemaVersion === \"1.0\") return \"1.0\";\n  return \"unknown\";\n}\n\nfunction toSchema10(event: PersistedInspectEvent): PersistedInspectEvent {\n  return { ...event, schemaVersion: \"1.0\" };\n}\n\nfunction uniqueSorted(values: string[]): string[] {\n  return [...new Set(values)].sort();\n}\n\nfunction isWithinDirectory(child: string, parent: string): boolean {\n  const relative = path.relative(parent, child);\n  return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n}\n\nasync function resolveOutputPath(\n  inputPath: string,\n  output: string | undefined,\n  force: boolean,\n): Promise<string | undefined> {\n  if (output === undefined || output.trim() === \"\") return undefined;\n\n  const inputAbs = path.resolve(inputPath);\n  const outputAbs = path.resolve(output.trim());\n  const inputDir = path.dirname(inputAbs);\n\n  if (!isWithinDirectory(outputAbs, inputDir)) {\n    throw new Error(\"Refusing to write migrated output outside the input directory.\");\n  }\n  if (outputAbs === inputAbs) {\n    throw new Error(\"Refusing to overwrite the input trace. Choose a different --output path.\");\n  }\n\n  try {\n    const outputStats = await stat(outputAbs);\n    if (outputStats.isDirectory()) {\n      throw new Error(\"Migration output must be a file path, not a directory.\");\n    }\n    if (!force) {\n      throw new Error(\"Output file already exists. Use --force to replace it.\");\n    }\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n      throw error;\n    }\n  }\n\n  return outputAbs;\n}\n\nasync function buildMigration(\n  inputPath: string,\n  outputPath: string | undefined,\n): Promise<MigrationResult> {\n  const raw = await readFile(inputPath, \"utf-8\");\n  const warnings: MigrationWarning[] = [];\n  const sourceFormats: string[] = [];\n  const migrated: PersistedInspectEvent[] = [];\n  let validRows = 0;\n  let skippedRows = 0;\n  let lineNumber = 0;\n\n  for (const line of raw.split(/\\r?\\n/)) {\n    lineNumber += 1;\n    const trimmed = line.trim();\n    if (trimmed === \"\") continue;\n\n    let parsed: unknown;\n    try {\n      parsed = JSON.parse(trimmed) as unknown;\n    } catch {\n      skippedRows += 1;\n      warnings.push({ line: lineNumber, message: \"Skipped invalid JSON line.\" });\n      continue;\n    }\n\n    const format = formatOf(parsed);\n    if (format === \"0.1\") {\n      if (!validateEvent(parsed)) {\n        skippedRows += 1;\n        warnings.push({ line: lineNumber, message: \"Skipped invalid v0.1 trace row.\" });\n        continue;\n      }\n      validRows += 1;\n      sourceFormats.push(format);\n      migrated.push(\n        toSchema10(\n          traceEventToPersistedInspectEvent(parsed, {\n            eventIndex: validRows - 1,\n            sourceName: \"migrate\",\n            sourceVersion: \"0.1\",\n          }),\n        ),\n      );\n      continue;\n    }\n\n    if (format === \"0.2\" || format === \"1.0\") {\n      if (!isPersistedInspectEvent(parsed)) {\n        skippedRows += 1;\n        warnings.push({\n          line: lineNumber,\n          message: `Skipped invalid v${format} persisted row.`,\n        });\n        continue;\n      }\n      validRows += 1;\n      sourceFormats.push(format);\n      migrated.push(toSchema10(parsed));\n      continue;\n    }\n\n    skippedRows += 1;\n    warnings.push({ line: lineNumber, message: \"Skipped unsupported schemaVersion.\" });\n  }\n\n  if (migrated.length === 0) {\n    throw new Error(\"No supported AgentInspect trace rows found to migrate.\");\n  }\n\n  return {\n    input: inputPath,\n    output: outputPath,\n    targetSchemaVersion: \"1.0\",\n    sourceFormats: uniqueSorted(sourceFormats),\n    validRows,\n    outputRows: migrated.length,\n    skippedRows,\n    warnings,\n    content: `${migrated.map((event) => JSON.stringify(event)).join(\"\\n\")}\\n`,\n  };\n}\n\nfunction printSummary(result: MigrationResult, dryRun: boolean): void {\n  console.log(\"AgentInspect migration summary\");\n  console.log(`Input: ${result.input}`);\n  console.log(`Target schemaVersion: ${result.targetSchemaVersion}`);\n  console.log(`Source formats: ${result.sourceFormats.join(\", \")}`);\n  console.log(`Valid rows: ${result.validRows}`);\n  console.log(`Output rows: ${result.outputRows}`);\n  console.log(`Skipped rows: ${result.skippedRows}`);\n  console.log(`Warnings: ${result.warnings.length}`);\n  for (const warning of result.warnings) {\n    console.log(`- line ${warning.line}: ${warning.message}`);\n  }\n  if (dryRun) {\n    console.log(\"Dry run: no files written.\");\n  } else if (result.output !== undefined) {\n    console.log(`Wrote migrated trace: ${result.output}`);\n  }\n}\n\nexport async function migrateCommand(\n  input: string,\n  options: MigrateCommandOptions = {},\n): Promise<void> {\n  try {\n    parseTarget(options.to);\n  } catch (error) {\n    console.error(error instanceof Error ? error.message : String(error));\n    process.exitCode = 1;\n    return;\n  }\n\n  const inputPath = path.resolve(input.trim());\n  const dryRun = options.dryRun === true;\n  if (!dryRun && (options.output === undefined || options.output.trim() === \"\")) {\n    console.error(\"migrate requires --dry-run or --output <path>.\");\n    process.exitCode = 1;\n    return;\n  }\n\n  try {\n    const inputStats = await stat(inputPath);\n    if (inputStats.isDirectory()) {\n      throw new Error(\"Migration input must be a JSONL file, not a directory.\");\n    }\n\n    const outputPath = await resolveOutputPath(\n      inputPath,\n      options.output,\n      options.force === true,\n    );\n    const result = await buildMigration(inputPath, outputPath);\n\n    if (!dryRun && outputPath !== undefined) {\n      await mkdir(path.dirname(outputPath), { recursive: true });\n      await writeFile(outputPath, result.content, \"utf-8\");\n    }\n\n    printSummary(result, dryRun);\n  } catch (error) {\n    const msg = error instanceof Error ? error.message : String(error);\n    console.error(`[AgentInspect] migrate failed: ${msg}`);\n    process.exitCode = 1;\n  }\n}\n","import { execFile } from \"node:child_process\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { promisify } from \"node:util\";\n\nconst execFileAsync = promisify(execFile);\n\nimport {\n  TraceReadError,\n  openTrace,\n  type TraceReadResult,\n} from \"@agent-inspect/core/readers\";\nimport {\n  TraceDirectory,\n  aggregateSessionCheckResults,\n  filterMetasBySessionScope,\n  loadSessionRunRecords,\n  loadTraceMetadataList,\n  parseDuration,\n  resolveTraceDir,\n} from \"@agent-inspect/core/advanced\";\nimport {\n  createLlmUsageRule,\n  createMaxStepDurationRule,\n  createRequireCompletedRule,\n  createRunDepthRule,\n  createRunDurationRule,\n  createObservedOutcomeRule,\n  createRunStatusRule,\n  createStallDetectionRule,\n  createSafetyOversizedAttributeRule,\n  createSafetyRawContentRule,\n  createSafetyRedactionRule,\n  createSafetySecretPatternRule,\n  createStructureCycleRule,\n  createStructureOrphanRule,\n  createStructureParallelWidthRule,\n  createStructureRelationshipRule,\n  createToolUsageRule,\n  defineTraceContract,\n  evaluateTraceContract,\n  runTraceChecks,\n  ATTRIBUTION_CONFIDENCES,\n  isAttributionConfidence,\n  type ControlStage,\n  type LlmUsageRuleOptions,\n  type RunStatusRuleOptions,\n  type SafetyOversizedAttributeRuleOptions,\n  type StructureRelationshipRuleOptions,\n  type ToolArgumentCheck,\n  type ToolUsageRuleOptions,\n  type TraceCheckDiagnostic,\n  type TraceCheckDiagnosticCode,\n  type TraceCheckResult,\n  type TraceCheckRule,\n  type TraceContract,\n  type TraceContractAlternatives,\n  type TraceContractBody,\n  type TraceContractControlRules,\n  type TraceContractInput,\n  type TraceContractRecoveryOperation,\n  type TraceContractRetryRules,\n  type TraceContractScope,\n} from \"@agent-inspect/core/checks\";\n\nimport {\n  checkResultToEvidenceJson,\n  parseEvidenceFormat,\n  parseEvidenceProfile,\n  resolveEvidenceOutputDir,\n  shouldEmitEvidence,\n  writeLocalEvidence,\n  type EvidenceOnMode,\n} from \"./evidence-on.js\";\nimport { inputFromTarget } from \"./trace-input.js\";\nimport { mergeSafetyExtensions } from \"./safety-extensions.js\";\n\nexport interface CheckCommandOptions {\n  dir?: string;\n  format?: string;\n  run?: string;\n  config?: string;\n  json?: boolean;\n  rule?: string[];\n  maxDurationMs?: string;\n  requiredTool?: string[];\n  /** Canonical CLI spelling: `--forbidden-tool`. */\n  forbiddenTool?: string[];\n  /** Compatibility alias: `--forbid-tool` (same semantics as `forbiddenTool`). */\n  forbidTool?: string[];\n  allowedModel?: string[];\n  maxTotalTokens?: string;\n  session?: string;\n  group?: string;\n  correlateGroup?: boolean;\n  guardrails?: string[];\n  circuit?: string[];\n  maxStepDuration?: string;\n  requireCompleted?: boolean;\n  detectStalls?: boolean;\n  failOnObservation?: string;\n  /** Additive check preset: trajectory | safety | comprehensive | behavioral-session. */\n  preset?: string;\n  /** Local Evidence v2 emit mode: fail | always | never. */\n  evidenceOn?: EvidenceOnMode;\n  evidenceDir?: string;\n  evidenceProfile?: string;\n  evidenceFormat?: string;\n}\n\nexport const CHECK_PRESET_NAMES = [\n  \"trajectory\",\n  \"safety\",\n  \"comprehensive\",\n  \"behavioral-session\",\n] as const;\nexport type CheckPresetName = (typeof CHECK_PRESET_NAMES)[number];\n\nexport interface ResolvePresetContext {\n  /** When true, trajectory/comprehensive select includes tool.usage. */\n  hasToolRules?: boolean;\n}\n\nexport interface ResolvedPreset {\n  requireCompleted: boolean;\n  enableSafetyRedaction: boolean;\n  /** Inject structure.requireParentBeforeChild when config lacks relationship options. */\n  enableStructureRelationshipDefaults: boolean;\n  select: string[];\n  /** Default `--fail-on-observation` for behavioral-session (does not override explicit flag). */\n  failOnObservation?: string;\n}\n\nconst DEFAULT_SELECT = [\"run.status\"];\n\n/**\n * Preserve first-seen order while dropping empty and duplicate rule ids.\n */\nexport function uniqueSelectIds(ids: readonly string[]): string[] {\n  const seen = new Set<string>();\n  const out: string[] = [];\n  for (const id of ids) {\n    const trimmed = id.trim();\n    if (trimmed === \"\" || seen.has(trimmed)) continue;\n    seen.add(trimmed);\n    out.push(trimmed);\n  }\n  return out;\n}\n\n/**\n * Rule ids implied by CLI shorthand flags on this invocation.\n * Does not include config-only constructed rules.\n */\nexport function resolveForbiddenToolOptions(options: CheckCommandOptions): string[] {\n  const merged = [...(options.forbiddenTool ?? []), ...(options.forbidTool ?? [])];\n  const seen = new Set<string>();\n  const out: string[] = [];\n  for (const name of merged) {\n    if (seen.has(name)) continue;\n    seen.add(name);\n    out.push(name);\n  }\n  return out;\n}\n\nexport function withResolvedForbiddenTools(\n  options: CheckCommandOptions,\n): CheckCommandOptions {\n  return {\n    ...options,\n    forbiddenTool: resolveForbiddenToolOptions(options),\n    forbidTool: undefined,\n  };\n}\n\nexport function cliShorthandSelectIds(options: CheckCommandOptions): string[] {\n  const ids: string[] = [];\n  if (options.failOnObservation !== undefined && options.failOnObservation.trim() !== \"\") {\n    ids.push(\"outcome.status\");\n  }\n  if (\n    (options.requiredTool?.length ?? 0) > 0 ||\n    (options.forbiddenTool?.length ?? 0) > 0 ||\n    (options.forbidTool?.length ?? 0) > 0\n  ) {\n    ids.push(\"tool.usage\");\n  }\n  if ((options.allowedModel?.length ?? 0) > 0 || options.maxTotalTokens !== undefined) {\n    ids.push(\"llm.usage\");\n  }\n  if (options.maxDurationMs !== undefined) {\n    ids.push(\"run.duration\");\n  }\n  if (options.maxStepDuration !== undefined) {\n    ids.push(\"run.maxStepDuration\");\n  }\n  if (options.detectStalls === true) {\n    ids.push(\"run.stall\");\n  }\n  return ids;\n}\n\n/**\n * Canonical check select union:\n * 1. Preset base ids\n * 2. Explicit `--rule`\n * 3. Config `checks.select` (no silent expansion of unrelated configured rules)\n * 4. CLI shorthand ids used on this invocation\n * Empty explicit select (no preset / `--rule` / config select) keeps auto-select\n * of constructed rules plus default `run.status`.\n */\nexport function unionCheckSelect(input: {\n  presetSelect?: readonly string[];\n  explicitRules?: readonly string[];\n  configSelect?: readonly string[];\n  shorthandIds?: readonly string[];\n  constructedRuleIds?: readonly string[];\n}): string[] {\n  const explicit = uniqueSelectIds([\n    ...(input.presetSelect ?? []),\n    ...(input.explicitRules ?? []),\n    ...(input.configSelect ?? []),\n  ]);\n  if (explicit.length === 0) {\n    return uniqueSelectIds([\n      ...DEFAULT_SELECT,\n      ...(input.constructedRuleIds ?? []).filter((id) => id !== \"run.status\"),\n    ]);\n  }\n  const constructed = new Set(input.constructedRuleIds ?? []);\n  const shorthand = (input.shorthandIds ?? []).filter(\n    (id) => constructed.size === 0 || constructed.has(id),\n  );\n  return uniqueSelectIds([...explicit, ...shorthand]);\n}\n\n/**\n * Resolve an additive check preset into option/select patches.\n * Omitting preset returns undefined and leaves default check behavior unchanged.\n */\nexport function resolvePreset(\n  preset: string | undefined,\n  context: ResolvePresetContext = {},\n): ResolvedPreset | undefined {\n  if (preset === undefined || preset.trim() === \"\") return undefined;\n  const name = preset.trim().toLowerCase();\n  if (\n    name !== \"trajectory\" &&\n    name !== \"safety\" &&\n    name !== \"comprehensive\" &&\n    name !== \"behavioral-session\"\n  ) {\n    throw new Error(\n      `Unknown --preset \"${preset}\". Use trajectory, safety, comprehensive, or behavioral-session.`,\n    );\n  }\n\n  const trajectorySelect = [\n    \"run.status\",\n    \"run.requireCompleted\",\n    \"structure.orphan\",\n    \"structure.cycle\",\n    \"structure.relationship\",\n  ];\n  if (context.hasToolRules === true) {\n    trajectorySelect.push(\"tool.usage\");\n  }\n\n  // Rule id for createSafetyRawContentRule is safety.rawPrompt.\n  const safetySelect = [\n    \"run.status\",\n    \"safety.rawPrompt\",\n    \"safety.secretPattern\",\n    \"safety.redaction\",\n  ];\n\n  if (name === \"trajectory\") {\n    return {\n      requireCompleted: true,\n      enableSafetyRedaction: false,\n      enableStructureRelationshipDefaults: true,\n      select: trajectorySelect,\n    };\n  }\n  if (name === \"safety\") {\n    return {\n      requireCompleted: false,\n      enableSafetyRedaction: true,\n      enableStructureRelationshipDefaults: false,\n      select: safetySelect,\n    };\n  }\n  if (name === \"behavioral-session\") {\n    // Dual-axis: require harness completion + outcome scoring; do not collapse on tool error.\n    return {\n      requireCompleted: true,\n      enableSafetyRedaction: false,\n      enableStructureRelationshipDefaults: false,\n      select: [\"run.requireCompleted\", \"outcome.status\", \"structure.orphan\"],\n      failOnObservation: \"failed\",\n    };\n  }\n\n  const select = [...new Set([...trajectorySelect, ...safetySelect])];\n  return {\n    requireCompleted: true,\n    enableSafetyRedaction: true,\n    enableStructureRelationshipDefaults: true,\n    select,\n  };\n}\n\ntype CheckConfig = {\n  checks?: {\n    select?: string[];\n    run?: RunStatusRuleOptions & {\n      maxDurationMs?: number;\n      maxDepth?: number;\n    };\n    tool?: ToolUsageRuleOptions;\n    llm?: LlmUsageRuleOptions;\n    structure?: StructureRelationshipRuleOptions & {\n      orphan?: boolean;\n      cycle?: boolean;\n      maxChildren?: number;\n      maxConcurrent?: number;\n    };\n    safety?: SafetyOversizedAttributeRuleOptions & {\n      redaction?: boolean;\n      rawContent?: boolean;\n      secretPattern?: boolean;\n    };\n  };\n  /**\n   * Strict JSON TraceContract body for `check --config`.\n   * Mutually exclusive with an effective top-level `checks` block.\n   */\n  contract?: TraceContractInput;\n};\n\ntype RuleBuildResult = {\n  rules: TraceCheckRule[];\n  select: string[];\n  diagnostics: TraceCheckDiagnostic[];\n};\n\nconst CONFIG_EXTENSIONS = new Set([\".json\", \".js\", \".mjs\", \".cjs\"]);\nconst TS_CONFIG_EXTENSIONS = new Set([\".ts\", \".mts\", \".cts\"]);\n\nfunction diagnostic(\n  code: TraceCheckDiagnosticCode,\n  message: string,\n  severity: TraceCheckDiagnostic[\"severity\"] = \"error\",\n): TraceCheckDiagnostic {\n  return { code, message, severity };\n}\n\nfunction errorResult(\n  code: TraceCheckDiagnosticCode,\n  message: string,\n  format = \"unknown\",\n): TraceCheckResult {\n  const diagnostics = [diagnostic(code, message)];\n  return {\n    ok: false,\n    status: \"error\",\n    format,\n    summary: {\n      passed: 0,\n      failed: 0,\n      warnings: 0,\n      errors: 1,\n      rulesEvaluated: 0,\n    },\n    findings: [],\n    diagnostics,\n    ruleExecutions: [],\n  };\n}\n\nfunction parseNumber(value: string | undefined, label: string): number | undefined {\n  if (value === undefined) return undefined;\n  const parsed = Number(value);\n  if (!Number.isFinite(parsed) || parsed < 0) {\n    throw new Error(`${label} must be a non-negative number.`);\n  }\n  return parsed;\n}\n\nfunction asStringArray(value: unknown): string[] | undefined {\n  if (value === undefined) return undefined;\n  if (!Array.isArray(value) || value.some((item) => typeof item !== \"string\")) {\n    throw new Error(\"Expected an array of strings.\");\n  }\n  return value;\n}\n\nconst CHECKS_KEYS = new Set([\"select\", \"run\", \"tool\", \"llm\", \"structure\", \"safety\"]);\nconst ROOT_CONFIG_KEYS = new Set([\"checks\", \"contract\"]);\n/** Top-level TraceContract keys (includes scope + alternatives). */\nconst CONTRACT_KEYS = new Set([\n  \"run\",\n  \"tools\",\n  \"llm\",\n  \"steps\",\n  \"observations\",\n  \"scope\",\n  \"alternatives\",\n  \"controls\",\n  \"retry\",\n]);\n/** Body keys only — no nested alternatives. */\nconst CONTRACT_BODY_KEYS = new Set([\n  \"run\",\n  \"tools\",\n  \"llm\",\n  \"steps\",\n  \"observations\",\n  \"controls\",\n  \"retry\",\n]);\nconst CONTRACT_SCOPE_KEYS = new Set([\n  \"runId\",\n  \"subAgentId\",\n  \"groupId\",\n  \"workflowStep\",\n  \"rootEventId\",\n]);\nconst CONTRACT_RUN_KEYS = new Set([\"requireCompleted\", \"allowedStatuses\", \"maxDurationMs\"]);\nconst CONTRACT_TOOLS_KEYS = new Set([\n  \"required\",\n  \"requiredTools\",\n  \"forbidden\",\n  \"forbiddenTools\",\n  \"allowed\",\n  \"maxCalls\",\n  \"requiredOrder\",\n  \"requiredOrderMode\",\n  \"arguments\",\n  \"orderRules\",\n  \"defaultOccurrenceMode\",\n]);\nconst CONTRACT_LLM_KEYS = new Set([\"maxCalls\", \"maxTotalTokens\", \"allowedModels\"]);\nconst CONTRACT_OBSERVATION_KEYS = new Set([\"required\", \"failOn\", \"requireProvenance\"]);\nconst CONTRACT_PROVENANCE_KEYS = new Set([\"method\", \"evidence\", \"sameRunEventReference\"]);\nconst CONTRACT_CONTROLS_KEYS = new Set([\n  \"declaredTools\",\n  \"enforcedTools\",\n  \"declaredToolsAttribute\",\n  \"enforcedToolsAttribute\",\n  \"requireDeclaredMatchesEnforced\",\n  \"requireObservedWithinEnforced\",\n  \"requireObservedWithinDeclared\",\n  \"requiredStages\",\n]);\nconst CONTRACT_CONTROL_STAGES = new Set([\n  \"declared\",\n  \"presented\",\n  \"validated\",\n  \"enforced\",\n  \"observed\",\n  \"accepted\",\n]);\nconst CONTRACT_CONTROL_STAGE_KEYS = new Set([\"stage\", \"observation\"]);\nconst CONTRACT_RETRY_KEYS = new Set([\n  \"maxAttempts\",\n  \"requireTerminalResult\",\n  \"fallbackOnlyAfterFailure\",\n  \"nonIdempotentTools\",\n  \"requireIdempotencyEvidenceForRetry\",\n  \"requireRecoveredFailureVisible\",\n  \"operations\",\n]);\nconst CONTRACT_OPERATION_KEYS = new Set([\n  \"tool\",\n  \"maxAttempts\",\n  \"retryableErrors\",\n  \"requireFailureBeforeRetry\",\n  \"requireSameArguments\",\n  \"requireTerminalSuccess\",\n  \"requireRecoveredFailureVisible\",\n  \"successfulResultDependency\",\n  \"sideEffectClass\",\n]);\nconst CONTRACT_RETRYABLE_ERRORS_KEYS = new Set([\"codes\"]);\nconst CONTRACT_RESULT_DEP_KEYS = new Set([\"consumerKind\", \"requireExplicitReference\"]);\nconst CONTRACT_ALT_KEYS = new Set([\"anyOf\"]);\nconst CONTRACT_ALT_BRANCH_KEYS = new Set([\"id\", \"description\", \"contract\"]);\nconst CONTRACT_ORDER_RULE_KEYS = new Set([\n  \"before\",\n  \"after\",\n  \"occurrenceMode\",\n  \"requireEndpoints\",\n]);\nconst CONTRACT_STEPS_KEYS = new Set([\"orderRelations\"]);\nconst CONTRACT_STEP_ORDER_RELATION_KEYS = new Set([\n  \"before\",\n  \"after\",\n  \"mode\",\n  \"requireEndpoints\",\n]);\nconst CONTRACT_STEP_REF_KEYS = new Set([\"kind\", \"name\"]);\nconst CONTRACT_STEP_KINDS = new Set([\"TOOL\", \"LLM\"]);\nconst CONTRACT_ARGUMENT_KEYS = new Set([\n  \"tool\",\n  \"path\",\n  \"operator\",\n  \"occurrence\",\n  \"expected\",\n  \"oneOf\",\n  \"type\",\n]);\nconst CONTRACT_ARGUMENT_OPERATORS = new Set([\"exists\", \"type\", \"equals\", \"oneOf\"]);\nconst CONTRACT_ARGUMENT_OCCURRENCES = new Set([\"first\", \"last\", \"any\", \"all\"]);\nconst CONTRACT_ARGUMENT_TYPES = new Set([\n  \"string\",\n  \"number\",\n  \"boolean\",\n  \"object\",\n  \"array\",\n  \"null\",\n]);\nconst CONTRACT_ORDER_MODES = new Set([\n  \"first-occurrence\",\n  \"happens-before\",\n  \"all-occurrences\",\n]);\nconst CONTRACT_FAIL_ON = new Set([\"failed\", \"unknown\", \"skipped\"]);\nconst CONTRACT_SIDE_EFFECT_CLASSES = new Set([\"read\", \"write\"]);\n/** Bounded list sizes for strict CLI contract JSON. */\nconst CONTRACT_MAX_STRING_LIST = 64;\nconst CONTRACT_MAX_ARGUMENTS = 32;\nconst CONTRACT_MAX_ORDER_RULES = 32;\nconst CONTRACT_MAX_ANY_OF = 16;\nconst CONTRACT_MAX_OPERATIONS = 32;\nconst CONTRACT_MAX_REQUIRED_STAGES = 16;\nconst CONTRACT_MAX_ONE_OF = 32;\nconst RUN_KEYS = new Set([\"expected\", \"allowIncomplete\", \"maxDurationMs\", \"maxDepth\"]);\nconst TOOL_KEYS = new Set([\"required\", \"forbidden\", \"allowed\", \"minCount\", \"maxCount\"]);\nconst LLM_KEYS = new Set([\n  \"allowedModels\",\n  \"allowedProviders\",\n  \"finishReasons\",\n  \"maxCalls\",\n  \"maxTotalTokens\",\n  \"maxInputTokens\",\n  \"maxOutputTokens\",\n  \"maxCachedTokens\",\n]);\nconst STRUCTURE_KEYS = new Set([\n  \"minConfidence\",\n  \"requireParentBeforeChild\",\n  \"requireTraceParentSpan\",\n  \"orphan\",\n  \"cycle\",\n  \"maxChildren\",\n  \"maxConcurrent\",\n]);\nconst SAFETY_KEYS = new Set([\n  \"redaction\",\n  \"rawContent\",\n  \"secretPattern\",\n  \"maxStringLength\",\n  \"maxArrayLength\",\n  \"maxObjectKeys\",\n  \"maxSerializedBytes\",\n  \"maxFindings\",\n]);\nconst RUN_EXPECTED = new Set([\"ok\", \"error\", \"running\"]);\nconst CONFIDENCE_LIST = ATTRIBUTION_CONFIDENCES.join(\", \");\n\nclass CheckConfigError extends Error {\n  readonly code: TraceCheckDiagnosticCode;\n  constructor(code: TraceCheckDiagnosticCode, message: string) {\n    super(message);\n    this.name = \"CheckConfigError\";\n    this.code = code;\n  }\n}\n\nfunction closestKey(unknown: string, known: readonly string[]): string | undefined {\n  const lower = unknown.toLowerCase();\n  let best: string | undefined;\n  let bestDistance = Number.POSITIVE_INFINITY;\n  for (const candidate of known) {\n    if (candidate.toLowerCase() === lower) return candidate;\n    // Simple edit-distance proxy for typo suggestions.\n    let distance = Math.abs(candidate.length - unknown.length);\n    const max = Math.max(candidate.length, unknown.length);\n    for (let i = 0; i < Math.min(candidate.length, unknown.length); i += 1) {\n      if (candidate[i]!.toLowerCase() !== unknown[i]!.toLowerCase()) distance += 1;\n    }\n    if (distance < bestDistance && distance <= Math.max(2, Math.floor(max / 3))) {\n      bestDistance = distance;\n      best = candidate;\n    }\n  }\n  return best;\n}\n\nfunction rejectUnknownKeys(\n  record: Record<string, unknown>,\n  allowed: ReadonlySet<string>,\n  pathPrefix: string,\n): void {\n  for (const key of Object.keys(record)) {\n    if (allowed.has(key)) continue;\n    const suggestion = closestKey(key, [...allowed]);\n    const hint = suggestion ? ` Did you mean \"${suggestion}\"?` : \"\";\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_UNKNOWN_KEY\",\n      `Unknown check config key \"${pathPrefix}.${key}\".${hint}`,\n    );\n  }\n}\n\nfunction requireObject(value: unknown, pathPrefix: string): Record<string, unknown> {\n  if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_INVALID_VALUE\",\n      `${pathPrefix} must be an object.`,\n    );\n  }\n  return value as Record<string, unknown>;\n}\n\nfunction requireStringArray(value: unknown, pathPrefix: string): string[] {\n  if (!Array.isArray(value) || value.some((item) => typeof item !== \"string\" || item.trim() === \"\")) {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_INVALID_VALUE\",\n      `${pathPrefix} must be an array of non-empty strings.`,\n    );\n  }\n  return value as string[];\n}\n\nfunction requireNonNegativeNumber(value: unknown, pathPrefix: string): number {\n  if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_INVALID_VALUE\",\n      `${pathPrefix} must be a finite non-negative number.`,\n    );\n  }\n  return value;\n}\n\nfunction requireBoolean(value: unknown, pathPrefix: string): boolean {\n  if (typeof value !== \"boolean\") {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_INVALID_VALUE\",\n      `${pathPrefix} must be a boolean.`,\n    );\n  }\n  return value;\n}\n\nfunction requireNonEmptyString(value: unknown, pathPrefix: string): string {\n  if (typeof value !== \"string\" || value.trim() === \"\") {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_INVALID_VALUE\",\n      `${pathPrefix} must be a non-empty string.`,\n    );\n  }\n  return value;\n}\n\nfunction requireBoundedArray(\n  value: unknown,\n  pathPrefix: string,\n  max: number,\n): unknown[] {\n  if (!Array.isArray(value)) {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_INVALID_VALUE\",\n      `${pathPrefix} must be an array.`,\n    );\n  }\n  if (value.length > max) {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_INVALID_VALUE\",\n      `${pathPrefix} exceeds bound of ${max} items.`,\n    );\n  }\n  return value;\n}\n\nfunction requireBoundedStringArray(\n  value: unknown,\n  pathPrefix: string,\n  max: number = CONTRACT_MAX_STRING_LIST,\n): string[] {\n  const items = requireBoundedArray(value, pathPrefix, max);\n  if (items.some((item) => typeof item !== \"string\" || item.trim() === \"\")) {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_INVALID_VALUE\",\n      `${pathPrefix} must be an array of non-empty strings.`,\n    );\n  }\n  return items as string[];\n}\n\nfunction requireOrderMode(\n  value: unknown,\n  pathPrefix: string,\n): \"first-occurrence\" | \"happens-before\" | \"all-occurrences\" {\n  if (typeof value !== \"string\" || !CONTRACT_ORDER_MODES.has(value)) {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_INVALID_VALUE\",\n      `${pathPrefix} must be one of: \"first-occurrence\", \"happens-before\", \"all-occurrences\".`,\n    );\n  }\n  return value as \"first-occurrence\" | \"happens-before\" | \"all-occurrences\";\n}\n\nfunction parseRunSection(value: unknown): NonNullable<CheckConfig[\"checks\"]>[\"run\"] {\n  const record = requireObject(value, \"checks.run\");\n  rejectUnknownKeys(record, RUN_KEYS, \"checks.run\");\n  const out: NonNullable<CheckConfig[\"checks\"]>[\"run\"] = {};\n  if (record.expected !== undefined) {\n    if (typeof record.expected !== \"string\" || !RUN_EXPECTED.has(record.expected)) {\n      throw new CheckConfigError(\n        \"AI_CHECK_CONFIG_INVALID_VALUE\",\n        `checks.run.expected must be one of: ok, error, running.`,\n      );\n    }\n    out.expected = record.expected as \"ok\" | \"error\" | \"running\";\n  }\n  if (record.allowIncomplete !== undefined) {\n    out.allowIncomplete = requireBoolean(record.allowIncomplete, \"checks.run.allowIncomplete\");\n  }\n  if (record.maxDurationMs !== undefined) {\n    out.maxDurationMs = requireNonNegativeNumber(record.maxDurationMs, \"checks.run.maxDurationMs\");\n  }\n  if (record.maxDepth !== undefined) {\n    out.maxDepth = requireNonNegativeNumber(record.maxDepth, \"checks.run.maxDepth\");\n  }\n  return out;\n}\n\nfunction parseToolSection(value: unknown): ToolUsageRuleOptions {\n  const record = requireObject(value, \"checks.tool\");\n  rejectUnknownKeys(record, TOOL_KEYS, \"checks.tool\");\n  const out: ToolUsageRuleOptions = {};\n  if (record.required !== undefined) out.required = requireStringArray(record.required, \"checks.tool.required\");\n  if (record.forbidden !== undefined) out.forbidden = requireStringArray(record.forbidden, \"checks.tool.forbidden\");\n  if (record.allowed !== undefined) out.allowed = requireStringArray(record.allowed, \"checks.tool.allowed\");\n  if (record.minCount !== undefined) out.minCount = requireNonNegativeNumber(record.minCount, \"checks.tool.minCount\");\n  if (record.maxCount !== undefined) out.maxCount = requireNonNegativeNumber(record.maxCount, \"checks.tool.maxCount\");\n  return out;\n}\n\nfunction parseLlmSection(value: unknown): LlmUsageRuleOptions {\n  const record = requireObject(value, \"checks.llm\");\n  rejectUnknownKeys(record, LLM_KEYS, \"checks.llm\");\n  const out: LlmUsageRuleOptions = {};\n  if (record.allowedModels !== undefined) {\n    out.allowedModels = requireStringArray(record.allowedModels, \"checks.llm.allowedModels\");\n  }\n  if (record.allowedProviders !== undefined) {\n    out.allowedProviders = requireStringArray(record.allowedProviders, \"checks.llm.allowedProviders\");\n  }\n  if (record.finishReasons !== undefined) {\n    out.finishReasons = requireStringArray(record.finishReasons, \"checks.llm.finishReasons\");\n  }\n  if (record.maxCalls !== undefined) out.maxCalls = requireNonNegativeNumber(record.maxCalls, \"checks.llm.maxCalls\");\n  if (record.maxTotalTokens !== undefined) {\n    out.maxTotalTokens = requireNonNegativeNumber(record.maxTotalTokens, \"checks.llm.maxTotalTokens\");\n  }\n  if (record.maxInputTokens !== undefined) {\n    out.maxInputTokens = requireNonNegativeNumber(record.maxInputTokens, \"checks.llm.maxInputTokens\");\n  }\n  if (record.maxOutputTokens !== undefined) {\n    out.maxOutputTokens = requireNonNegativeNumber(record.maxOutputTokens, \"checks.llm.maxOutputTokens\");\n  }\n  if (record.maxCachedTokens !== undefined) {\n    out.maxCachedTokens = requireNonNegativeNumber(record.maxCachedTokens, \"checks.llm.maxCachedTokens\");\n  }\n  return out;\n}\n\nfunction parseStructureSection(\n  value: unknown,\n): NonNullable<CheckConfig[\"checks\"]>[\"structure\"] {\n  const record = requireObject(value, \"checks.structure\");\n  rejectUnknownKeys(record, STRUCTURE_KEYS, \"checks.structure\");\n  const out: NonNullable<CheckConfig[\"checks\"]>[\"structure\"] = {};\n  if (record.minConfidence !== undefined) {\n    if (!isAttributionConfidence(record.minConfidence)) {\n      throw new CheckConfigError(\n        \"AI_CHECK_CONFIG_INVALID_VALUE\",\n        `checks.structure.minConfidence must be one of: ${CONFIDENCE_LIST}.`,\n      );\n    }\n    out.minConfidence = record.minConfidence;\n  }\n  if (record.requireParentBeforeChild !== undefined) {\n    out.requireParentBeforeChild = requireBoolean(\n      record.requireParentBeforeChild,\n      \"checks.structure.requireParentBeforeChild\",\n    );\n  }\n  if (record.requireTraceParentSpan !== undefined) {\n    out.requireTraceParentSpan = requireBoolean(\n      record.requireTraceParentSpan,\n      \"checks.structure.requireTraceParentSpan\",\n    );\n  }\n  if (record.orphan !== undefined) out.orphan = requireBoolean(record.orphan, \"checks.structure.orphan\");\n  if (record.cycle !== undefined) out.cycle = requireBoolean(record.cycle, \"checks.structure.cycle\");\n  if (record.maxChildren !== undefined) {\n    out.maxChildren = requireNonNegativeNumber(record.maxChildren, \"checks.structure.maxChildren\");\n  }\n  if (record.maxConcurrent !== undefined) {\n    out.maxConcurrent = requireNonNegativeNumber(record.maxConcurrent, \"checks.structure.maxConcurrent\");\n  }\n  return out;\n}\n\nfunction parseSafetySection(\n  value: unknown,\n): NonNullable<CheckConfig[\"checks\"]>[\"safety\"] {\n  const record = requireObject(value, \"checks.safety\");\n  rejectUnknownKeys(record, SAFETY_KEYS, \"checks.safety\");\n  const out: NonNullable<CheckConfig[\"checks\"]>[\"safety\"] = {};\n  if (record.redaction !== undefined) out.redaction = requireBoolean(record.redaction, \"checks.safety.redaction\");\n  if (record.rawContent !== undefined) out.rawContent = requireBoolean(record.rawContent, \"checks.safety.rawContent\");\n  if (record.secretPattern !== undefined) {\n    out.secretPattern = requireBoolean(record.secretPattern, \"checks.safety.secretPattern\");\n  }\n  if (record.maxStringLength !== undefined) {\n    out.maxStringLength = requireNonNegativeNumber(record.maxStringLength, \"checks.safety.maxStringLength\");\n  }\n  if (record.maxArrayLength !== undefined) {\n    out.maxArrayLength = requireNonNegativeNumber(record.maxArrayLength, \"checks.safety.maxArrayLength\");\n  }\n  if (record.maxObjectKeys !== undefined) {\n    out.maxObjectKeys = requireNonNegativeNumber(record.maxObjectKeys, \"checks.safety.maxObjectKeys\");\n  }\n  if (record.maxSerializedBytes !== undefined) {\n    out.maxSerializedBytes = requireNonNegativeNumber(\n      record.maxSerializedBytes,\n      \"checks.safety.maxSerializedBytes\",\n    );\n  }\n  if (record.maxFindings !== undefined) {\n    out.maxFindings = requireNonNegativeNumber(record.maxFindings, \"checks.safety.maxFindings\");\n  }\n  return out;\n}\n\nfunction sectionHasEffect(section: Record<string, unknown> | undefined): boolean {\n  if (section === undefined) return false;\n  return Object.keys(section).length > 0;\n}\n\n/** True when the parsed config itself configures rules, select, or disables defaults. */\nexport function checkConfigHasEffect(config: CheckConfig): boolean {\n  if (contractConfigHasEffect(config.contract)) return true;\n  const checks = config.checks;\n  if (checks === undefined) return false;\n  if ((checks.select?.length ?? 0) > 0) return true;\n  if (sectionHasEffect(checks.run as Record<string, unknown> | undefined)) return true;\n  if (sectionHasEffect(checks.tool as Record<string, unknown> | undefined)) return true;\n  if (sectionHasEffect(checks.llm as Record<string, unknown> | undefined)) return true;\n  if (sectionHasEffect(checks.structure as Record<string, unknown> | undefined)) return true;\n  if (sectionHasEffect(checks.safety as Record<string, unknown> | undefined)) return true;\n  return false;\n}\n\nfunction contractConfigHasEffect(contract: TraceContractInput | undefined): boolean {\n  if (contract === undefined) return false;\n  // scope alone is not enough — body rules (or alternatives) required\n  if (sectionHasEffect(contract.run as Record<string, unknown> | undefined)) return true;\n  if (sectionHasEffect(contract.tools as Record<string, unknown> | undefined)) return true;\n  if (sectionHasEffect(contract.llm as Record<string, unknown> | undefined)) return true;\n  if (sectionHasEffect(contract.steps as Record<string, unknown> | undefined)) return true;\n  if (sectionHasEffect(contract.observations as Record<string, unknown> | undefined)) {\n    return true;\n  }\n  if (sectionHasEffect(contract.controls as Record<string, unknown> | undefined)) return true;\n  if (sectionHasEffect(contract.retry as Record<string, unknown> | undefined)) return true;\n  if ((contract.alternatives?.anyOf?.length ?? 0) > 0) return true;\n  return false;\n}\n\nfunction parseContractRunSection(\n  value: unknown,\n  pathPrefix = \"contract.run\",\n): NonNullable<TraceContractBody[\"run\"]> {\n  const record = requireObject(value, pathPrefix);\n  rejectUnknownKeys(record, CONTRACT_RUN_KEYS, pathPrefix);\n  const out: NonNullable<TraceContractBody[\"run\"]> = {};\n  if (record.requireCompleted !== undefined) {\n    out.requireCompleted = requireBoolean(\n      record.requireCompleted,\n      `${pathPrefix}.requireCompleted`,\n    );\n  }\n  if (record.allowedStatuses !== undefined) {\n    const statuses = requireBoundedStringArray(\n      record.allowedStatuses,\n      `${pathPrefix}.allowedStatuses`,\n    );\n    const allowed = new Set([\"ok\", \"error\", \"running\", \"success\", \"failed\"]);\n    for (let i = 0; i < statuses.length; i++) {\n      const status = statuses[i]!;\n      if (!allowed.has(status)) {\n        throw new CheckConfigError(\n          \"AI_CHECK_CONFIG_INVALID_VALUE\",\n          `${pathPrefix}.allowedStatuses[${i}] must be one of: ok, error, running (aliases: success, failed); got ${JSON.stringify(status)}.`,\n        );\n      }\n    }\n    out.allowedStatuses = statuses;\n  }\n  if (record.maxDurationMs !== undefined) {\n    out.maxDurationMs = requireNonNegativeNumber(\n      record.maxDurationMs,\n      `${pathPrefix}.maxDurationMs`,\n    );\n  }\n  return out;\n}\n\nfunction parseToolArgumentCheck(value: unknown, pathPrefix: string): ToolArgumentCheck {\n  const record = requireObject(value, pathPrefix);\n  rejectUnknownKeys(record, CONTRACT_ARGUMENT_KEYS, pathPrefix);\n  const tool = requireNonEmptyString(record.tool, `${pathPrefix}.tool`);\n  if (typeof record.path !== \"string\") {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_INVALID_VALUE\",\n      `${pathPrefix}.path must be a string JSON Pointer (\\\"\\\" or start with \\\"/\\\").`,\n    );\n  }\n  const pathValue = record.path;\n  if (typeof record.operator !== \"string\" || !CONTRACT_ARGUMENT_OPERATORS.has(record.operator)) {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_INVALID_VALUE\",\n      `${pathPrefix}.operator must be one of: \"exists\", \"type\", \"equals\", \"oneOf\".`,\n    );\n  }\n  const operator = record.operator as ToolArgumentCheck[\"operator\"];\n  const out: ToolArgumentCheck = { tool, path: pathValue, operator };\n  if (record.occurrence !== undefined) {\n    if (\n      typeof record.occurrence !== \"string\" ||\n      !CONTRACT_ARGUMENT_OCCURRENCES.has(record.occurrence)\n    ) {\n      throw new CheckConfigError(\n        \"AI_CHECK_CONFIG_INVALID_VALUE\",\n        `${pathPrefix}.occurrence must be one of: \"first\", \"last\", \"any\", \"all\".`,\n      );\n    }\n    out.occurrence = record.occurrence as ToolArgumentCheck[\"occurrence\"];\n  }\n  if (record.expected !== undefined) {\n    out.expected = record.expected;\n  }\n  if (record.oneOf !== undefined) {\n    out.oneOf = requireBoundedArray(record.oneOf, `${pathPrefix}.oneOf`, CONTRACT_MAX_ONE_OF);\n  }\n  if (record.type !== undefined) {\n    if (typeof record.type !== \"string\" || !CONTRACT_ARGUMENT_TYPES.has(record.type)) {\n      throw new CheckConfigError(\n        \"AI_CHECK_CONFIG_INVALID_VALUE\",\n        `${pathPrefix}.type must be one of: \"string\", \"number\", \"boolean\", \"object\", \"array\", \"null\".`,\n      );\n    }\n    out.type = record.type as ToolArgumentCheck[\"type\"];\n  }\n  return out;\n}\n\nfunction parseOrderRule(\n  value: unknown,\n  pathPrefix: string,\n): NonNullable<NonNullable<TraceContractBody[\"tools\"]>[\"orderRules\"]>[number] {\n  const record = requireObject(value, pathPrefix);\n  rejectUnknownKeys(record, CONTRACT_ORDER_RULE_KEYS, pathPrefix);\n  const out: NonNullable<NonNullable<TraceContractBody[\"tools\"]>[\"orderRules\"]>[number] = {\n    before: requireNonEmptyString(record.before, `${pathPrefix}.before`),\n    after: requireNonEmptyString(record.after, `${pathPrefix}.after`),\n  };\n  if (record.occurrenceMode !== undefined) {\n    out.occurrenceMode = requireOrderMode(record.occurrenceMode, `${pathPrefix}.occurrenceMode`);\n  }\n  if (record.requireEndpoints !== undefined) {\n    out.requireEndpoints = requireBoolean(\n      record.requireEndpoints,\n      `${pathPrefix}.requireEndpoints`,\n    );\n  }\n  return out;\n}\n\nfunction parseContractToolsSection(\n  value: unknown,\n  pathPrefix = \"contract.tools\",\n): NonNullable<TraceContractBody[\"tools\"]> {\n  const record = requireObject(value, pathPrefix);\n  rejectUnknownKeys(record, CONTRACT_TOOLS_KEYS, pathPrefix);\n  const out: NonNullable<TraceContractBody[\"tools\"]> = {};\n  if (record.required !== undefined) {\n    out.required = requireBoundedStringArray(record.required, `${pathPrefix}.required`);\n  }\n  if (record.requiredTools !== undefined) {\n    out.requiredTools = requireBoundedStringArray(\n      record.requiredTools,\n      `${pathPrefix}.requiredTools`,\n    );\n  }\n  if (record.forbidden !== undefined) {\n    out.forbidden = requireBoundedStringArray(record.forbidden, `${pathPrefix}.forbidden`);\n  }\n  if (record.forbiddenTools !== undefined) {\n    out.forbiddenTools = requireBoundedStringArray(\n      record.forbiddenTools,\n      `${pathPrefix}.forbiddenTools`,\n    );\n  }\n  if (record.allowed !== undefined) {\n    out.allowed = requireBoundedStringArray(record.allowed, `${pathPrefix}.allowed`);\n  }\n  if (record.maxCalls !== undefined) {\n    out.maxCalls = requireNonNegativeNumber(record.maxCalls, `${pathPrefix}.maxCalls`);\n  }\n  if (record.requiredOrder !== undefined) {\n    out.requiredOrder = requireBoundedStringArray(\n      record.requiredOrder,\n      `${pathPrefix}.requiredOrder`,\n    );\n  }\n  if (record.requiredOrderMode !== undefined) {\n    out.requiredOrderMode = requireOrderMode(\n      record.requiredOrderMode,\n      `${pathPrefix}.requiredOrderMode`,\n    );\n  }\n  if (record.defaultOccurrenceMode !== undefined) {\n    out.defaultOccurrenceMode = requireOrderMode(\n      record.defaultOccurrenceMode,\n      `${pathPrefix}.defaultOccurrenceMode`,\n    );\n  }\n  if (record.arguments !== undefined) {\n    const items = requireBoundedArray(\n      record.arguments,\n      `${pathPrefix}.arguments`,\n      CONTRACT_MAX_ARGUMENTS,\n    );\n    out.arguments = items.map((item, index) =>\n      parseToolArgumentCheck(item, `${pathPrefix}.arguments[${index}]`),\n    );\n  }\n  if (record.orderRules !== undefined) {\n    const items = requireBoundedArray(\n      record.orderRules,\n      `${pathPrefix}.orderRules`,\n      CONTRACT_MAX_ORDER_RULES,\n    );\n    out.orderRules = items.map((item, index) =>\n      parseOrderRule(item, `${pathPrefix}.orderRules[${index}]`),\n    );\n  }\n  return out;\n}\n\nfunction parseContractLlmSection(\n  value: unknown,\n  pathPrefix = \"contract.llm\",\n): NonNullable<TraceContractBody[\"llm\"]> {\n  const record = requireObject(value, pathPrefix);\n  rejectUnknownKeys(record, CONTRACT_LLM_KEYS, pathPrefix);\n  const out: NonNullable<TraceContractBody[\"llm\"]> = {};\n  if (record.maxCalls !== undefined) {\n    out.maxCalls = requireNonNegativeNumber(record.maxCalls, `${pathPrefix}.maxCalls`);\n  }\n  if (record.maxTotalTokens !== undefined) {\n    out.maxTotalTokens = requireNonNegativeNumber(\n      record.maxTotalTokens,\n      `${pathPrefix}.maxTotalTokens`,\n    );\n  }\n  if (record.allowedModels !== undefined) {\n    out.allowedModels = requireBoundedStringArray(\n      record.allowedModels,\n      `${pathPrefix}.allowedModels`,\n    );\n  }\n  return out;\n}\n\nfunction parseStepRef(\n  value: unknown,\n  pathPrefix: string,\n): NonNullable<NonNullable<TraceContractBody[\"steps\"]>[\"orderRelations\"]>[number][\"before\"] {\n  const record = requireObject(value, pathPrefix);\n  rejectUnknownKeys(record, CONTRACT_STEP_REF_KEYS, pathPrefix);\n  if (typeof record.kind !== \"string\" || !CONTRACT_STEP_KINDS.has(record.kind)) {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_INVALID_VALUE\",\n      `${pathPrefix}.kind must be \"TOOL\" or \"LLM\".`,\n    );\n  }\n  return {\n    kind: record.kind as \"TOOL\" | \"LLM\",\n    name: requireNonEmptyString(record.name, `${pathPrefix}.name`),\n  };\n}\n\nfunction parseStepOrderRelation(\n  value: unknown,\n  pathPrefix: string,\n): NonNullable<NonNullable<TraceContractBody[\"steps\"]>[\"orderRelations\"]>[number] {\n  const record = requireObject(value, pathPrefix);\n  rejectUnknownKeys(record, CONTRACT_STEP_ORDER_RELATION_KEYS, pathPrefix);\n  if (record.before === undefined) {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_INVALID_VALUE\",\n      `${pathPrefix}.before is required.`,\n    );\n  }\n  if (record.after === undefined) {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_INVALID_VALUE\",\n      `${pathPrefix}.after is required.`,\n    );\n  }\n  const out: NonNullable<NonNullable<TraceContractBody[\"steps\"]>[\"orderRelations\"]>[number] = {\n    before: parseStepRef(record.before, `${pathPrefix}.before`),\n    after: parseStepRef(record.after, `${pathPrefix}.after`),\n  };\n  if (record.mode !== undefined) {\n    out.mode = requireOrderMode(record.mode, `${pathPrefix}.mode`);\n  }\n  if (record.requireEndpoints !== undefined) {\n    out.requireEndpoints = requireBoolean(\n      record.requireEndpoints,\n      `${pathPrefix}.requireEndpoints`,\n    );\n  }\n  return out;\n}\n\nfunction parseContractStepsSection(\n  value: unknown,\n  pathPrefix = \"contract.steps\",\n): NonNullable<TraceContractBody[\"steps\"]> {\n  const record = requireObject(value, pathPrefix);\n  rejectUnknownKeys(record, CONTRACT_STEPS_KEYS, pathPrefix);\n  const out: NonNullable<TraceContractBody[\"steps\"]> = {};\n  if (record.orderRelations !== undefined) {\n    const items = requireBoundedArray(\n      record.orderRelations,\n      `${pathPrefix}.orderRelations`,\n      CONTRACT_MAX_ORDER_RULES,\n    );\n    out.orderRelations = items.map((item, index) =>\n      parseStepOrderRelation(item, `${pathPrefix}.orderRelations[${index}]`),\n    );\n  }\n  return out;\n}\n\nfunction parseRequireProvenance(\n  value: unknown,\n  pathPrefix: string,\n): NonNullable<NonNullable<TraceContractBody[\"observations\"]>[\"requireProvenance\"]> {\n  const record = requireObject(value, pathPrefix);\n  rejectUnknownKeys(record, CONTRACT_PROVENANCE_KEYS, pathPrefix);\n  const out: NonNullable<NonNullable<TraceContractBody[\"observations\"]>[\"requireProvenance\"]> =\n    {};\n  if (record.method !== undefined) {\n    out.method = requireBoolean(record.method, `${pathPrefix}.method`);\n  }\n  if (record.evidence !== undefined) {\n    out.evidence = requireBoolean(record.evidence, `${pathPrefix}.evidence`);\n  }\n  if (record.sameRunEventReference !== undefined) {\n    out.sameRunEventReference = requireBoolean(\n      record.sameRunEventReference,\n      `${pathPrefix}.sameRunEventReference`,\n    );\n  }\n  return out;\n}\n\nfunction parseContractObservationsSection(\n  value: unknown,\n  pathPrefix = \"contract.observations\",\n): NonNullable<TraceContractBody[\"observations\"]> {\n  const record = requireObject(value, pathPrefix);\n  rejectUnknownKeys(record, CONTRACT_OBSERVATION_KEYS, pathPrefix);\n  const out: NonNullable<TraceContractBody[\"observations\"]> = {};\n  if (record.required !== undefined) {\n    out.required = requireBoundedStringArray(record.required, `${pathPrefix}.required`);\n  }\n  if (record.failOn !== undefined) {\n    const items = requireBoundedArray(record.failOn, `${pathPrefix}.failOn`, CONTRACT_MAX_STRING_LIST);\n    for (const item of items) {\n      if (typeof item !== \"string\" || !CONTRACT_FAIL_ON.has(item)) {\n        throw new CheckConfigError(\n          \"AI_CHECK_CONFIG_INVALID_VALUE\",\n          `${pathPrefix}.failOn values must be \"failed\", \"unknown\", or \"skipped\".`,\n        );\n      }\n    }\n    out.failOn = items as Array<\"failed\" | \"unknown\" | \"skipped\">;\n  }\n  if (record.requireProvenance !== undefined) {\n    out.requireProvenance = parseRequireProvenance(\n      record.requireProvenance,\n      `${pathPrefix}.requireProvenance`,\n    );\n  }\n  return out;\n}\n\nfunction parseControlRequiredStage(\n  value: unknown,\n  pathPrefix: string,\n): NonNullable<TraceContractControlRules[\"requiredStages\"]>[number] {\n  const record = requireObject(value, pathPrefix);\n  rejectUnknownKeys(record, CONTRACT_CONTROL_STAGE_KEYS, pathPrefix);\n  if (typeof record.stage !== \"string\" || !CONTRACT_CONTROL_STAGES.has(record.stage)) {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_INVALID_VALUE\",\n      `${pathPrefix}.stage must be one of: declared, presented, validated, enforced, observed, accepted.`,\n    );\n  }\n  const out: NonNullable<TraceContractControlRules[\"requiredStages\"]>[number] = {\n    stage: record.stage as ControlStage,\n  };\n  if (record.observation !== undefined) {\n    out.observation = requireNonEmptyString(record.observation, `${pathPrefix}.observation`);\n  }\n  return out;\n}\n\nfunction parseContractControlsSection(\n  value: unknown,\n  pathPrefix = \"contract.controls\",\n): TraceContractControlRules {\n  const record = requireObject(value, pathPrefix);\n  rejectUnknownKeys(record, CONTRACT_CONTROLS_KEYS, pathPrefix);\n  const out: TraceContractControlRules = {};\n  if (record.declaredTools !== undefined) {\n    out.declaredTools = requireBoundedStringArray(\n      record.declaredTools,\n      `${pathPrefix}.declaredTools`,\n    );\n  }\n  if (record.enforcedTools !== undefined) {\n    out.enforcedTools = requireBoundedStringArray(\n      record.enforcedTools,\n      `${pathPrefix}.enforcedTools`,\n    );\n  }\n  if (record.declaredToolsAttribute !== undefined) {\n    out.declaredToolsAttribute = requireNonEmptyString(\n      record.declaredToolsAttribute,\n      `${pathPrefix}.declaredToolsAttribute`,\n    );\n  }\n  if (record.enforcedToolsAttribute !== undefined) {\n    out.enforcedToolsAttribute = requireNonEmptyString(\n      record.enforcedToolsAttribute,\n      `${pathPrefix}.enforcedToolsAttribute`,\n    );\n  }\n  if (record.requireDeclaredMatchesEnforced !== undefined) {\n    out.requireDeclaredMatchesEnforced = requireBoolean(\n      record.requireDeclaredMatchesEnforced,\n      `${pathPrefix}.requireDeclaredMatchesEnforced`,\n    );\n  }\n  if (record.requireObservedWithinEnforced !== undefined) {\n    out.requireObservedWithinEnforced = requireBoolean(\n      record.requireObservedWithinEnforced,\n      `${pathPrefix}.requireObservedWithinEnforced`,\n    );\n  }\n  if (record.requireObservedWithinDeclared !== undefined) {\n    out.requireObservedWithinDeclared = requireBoolean(\n      record.requireObservedWithinDeclared,\n      `${pathPrefix}.requireObservedWithinDeclared`,\n    );\n  }\n  if (record.requiredStages !== undefined) {\n    const items = requireBoundedArray(\n      record.requiredStages,\n      `${pathPrefix}.requiredStages`,\n      CONTRACT_MAX_REQUIRED_STAGES,\n    );\n    out.requiredStages = items.map((item, index) =>\n      parseControlRequiredStage(item, `${pathPrefix}.requiredStages[${index}]`),\n    );\n  }\n  return out;\n}\n\nfunction parseRecoveryOperation(\n  value: unknown,\n  pathPrefix: string,\n): TraceContractRecoveryOperation {\n  const record = requireObject(value, pathPrefix);\n  rejectUnknownKeys(record, CONTRACT_OPERATION_KEYS, pathPrefix);\n  const out: TraceContractRecoveryOperation = {\n    tool: requireNonEmptyString(record.tool, `${pathPrefix}.tool`),\n  };\n  if (record.maxAttempts !== undefined) {\n    out.maxAttempts = requireNonNegativeNumber(record.maxAttempts, `${pathPrefix}.maxAttempts`);\n  }\n  if (record.retryableErrors !== undefined) {\n    const errors = requireObject(record.retryableErrors, `${pathPrefix}.retryableErrors`);\n    rejectUnknownKeys(errors, CONTRACT_RETRYABLE_ERRORS_KEYS, `${pathPrefix}.retryableErrors`);\n    const retryableErrors: NonNullable<TraceContractRecoveryOperation[\"retryableErrors\"]> = {};\n    if (errors.codes !== undefined) {\n      retryableErrors.codes = requireBoundedStringArray(\n        errors.codes,\n        `${pathPrefix}.retryableErrors.codes`,\n      );\n    }\n    out.retryableErrors = retryableErrors;\n  }\n  if (record.requireFailureBeforeRetry !== undefined) {\n    out.requireFailureBeforeRetry = requireBoolean(\n      record.requireFailureBeforeRetry,\n      `${pathPrefix}.requireFailureBeforeRetry`,\n    );\n  }\n  if (record.requireSameArguments !== undefined) {\n    if (record.requireSameArguments === true || record.requireSameArguments === false) {\n      out.requireSameArguments = record.requireSameArguments;\n    } else if (record.requireSameArguments === \"structured-or-digest\") {\n      out.requireSameArguments = \"structured-or-digest\";\n    } else {\n      throw new CheckConfigError(\n        \"AI_CHECK_CONFIG_INVALID_VALUE\",\n        `${pathPrefix}.requireSameArguments must be a boolean or \"structured-or-digest\".`,\n      );\n    }\n  }\n  if (record.requireTerminalSuccess !== undefined) {\n    out.requireTerminalSuccess = requireBoolean(\n      record.requireTerminalSuccess,\n      `${pathPrefix}.requireTerminalSuccess`,\n    );\n  }\n  if (record.requireRecoveredFailureVisible !== undefined) {\n    out.requireRecoveredFailureVisible = requireBoolean(\n      record.requireRecoveredFailureVisible,\n      `${pathPrefix}.requireRecoveredFailureVisible`,\n    );\n  }\n  if (record.successfulResultDependency !== undefined) {\n    const dep = requireObject(\n      record.successfulResultDependency,\n      `${pathPrefix}.successfulResultDependency`,\n    );\n    rejectUnknownKeys(dep, CONTRACT_RESULT_DEP_KEYS, `${pathPrefix}.successfulResultDependency`);\n    if (dep.consumerKind !== \"LLM\") {\n      throw new CheckConfigError(\n        \"AI_CHECK_CONFIG_INVALID_VALUE\",\n        `${pathPrefix}.successfulResultDependency.consumerKind must be \"LLM\".`,\n      );\n    }\n    const dependency: NonNullable<\n      TraceContractRecoveryOperation[\"successfulResultDependency\"]\n    > = { consumerKind: \"LLM\" };\n    if (dep.requireExplicitReference !== undefined) {\n      dependency.requireExplicitReference = requireBoolean(\n        dep.requireExplicitReference,\n        `${pathPrefix}.successfulResultDependency.requireExplicitReference`,\n      );\n    }\n    out.successfulResultDependency = dependency;\n  }\n  if (record.sideEffectClass !== undefined) {\n    if (\n      typeof record.sideEffectClass !== \"string\" ||\n      !CONTRACT_SIDE_EFFECT_CLASSES.has(record.sideEffectClass)\n    ) {\n      throw new CheckConfigError(\n        \"AI_CHECK_CONFIG_INVALID_VALUE\",\n        `${pathPrefix}.sideEffectClass must be \"read\" or \"write\".`,\n      );\n    }\n    out.sideEffectClass = record.sideEffectClass as \"read\" | \"write\";\n  }\n  return out;\n}\n\nfunction parseContractRetrySection(\n  value: unknown,\n  pathPrefix = \"contract.retry\",\n): TraceContractRetryRules {\n  const record = requireObject(value, pathPrefix);\n  rejectUnknownKeys(record, CONTRACT_RETRY_KEYS, pathPrefix);\n  const out: TraceContractRetryRules = {};\n  if (record.maxAttempts !== undefined) {\n    out.maxAttempts = requireNonNegativeNumber(record.maxAttempts, `${pathPrefix}.maxAttempts`);\n  }\n  if (record.requireTerminalResult !== undefined) {\n    out.requireTerminalResult = requireBoolean(\n      record.requireTerminalResult,\n      `${pathPrefix}.requireTerminalResult`,\n    );\n  }\n  if (record.fallbackOnlyAfterFailure !== undefined) {\n    out.fallbackOnlyAfterFailure = requireBoolean(\n      record.fallbackOnlyAfterFailure,\n      `${pathPrefix}.fallbackOnlyAfterFailure`,\n    );\n  }\n  if (record.nonIdempotentTools !== undefined) {\n    out.nonIdempotentTools = requireBoundedStringArray(\n      record.nonIdempotentTools,\n      `${pathPrefix}.nonIdempotentTools`,\n    );\n  }\n  if (record.requireIdempotencyEvidenceForRetry !== undefined) {\n    out.requireIdempotencyEvidenceForRetry = requireBoolean(\n      record.requireIdempotencyEvidenceForRetry,\n      `${pathPrefix}.requireIdempotencyEvidenceForRetry`,\n    );\n  }\n  if (record.requireRecoveredFailureVisible !== undefined) {\n    out.requireRecoveredFailureVisible = requireBoolean(\n      record.requireRecoveredFailureVisible,\n      `${pathPrefix}.requireRecoveredFailureVisible`,\n    );\n  }\n  if (record.operations !== undefined) {\n    const items = requireBoundedArray(\n      record.operations,\n      `${pathPrefix}.operations`,\n      CONTRACT_MAX_OPERATIONS,\n    );\n    out.operations = items.map((item, index) =>\n      parseRecoveryOperation(item, `${pathPrefix}.operations[${index}]`),\n    );\n  }\n  return out;\n}\n\nfunction parseContractScopeSection(value: unknown): TraceContractScope {\n  const record = requireObject(value, \"contract.scope\");\n  rejectUnknownKeys(record, CONTRACT_SCOPE_KEYS, \"contract.scope\");\n  const out: TraceContractScope = {};\n  if (record.runId !== undefined) {\n    out.runId = requireNonEmptyString(record.runId, \"contract.scope.runId\");\n  }\n  if (record.subAgentId !== undefined) {\n    out.subAgentId = requireNonEmptyString(record.subAgentId, \"contract.scope.subAgentId\");\n  }\n  if (record.groupId !== undefined) {\n    out.groupId = requireNonEmptyString(record.groupId, \"contract.scope.groupId\");\n  }\n  if (record.workflowStep !== undefined) {\n    out.workflowStep = requireNonEmptyString(\n      record.workflowStep,\n      \"contract.scope.workflowStep\",\n    );\n  }\n  if (record.rootEventId !== undefined) {\n    out.rootEventId = requireNonEmptyString(record.rootEventId, \"contract.scope.rootEventId\");\n  }\n  return out;\n}\n\n/**\n * Parse a contract body (run/tools/llm/observations/controls/retry).\n * Rejects nested `alternatives` as an unknown key.\n */\nfunction parseContractBodySection(value: unknown, pathPrefix: string): TraceContractBody {\n  const record = requireObject(value, pathPrefix);\n  rejectUnknownKeys(record, CONTRACT_BODY_KEYS, pathPrefix);\n  const out: TraceContractBody = {};\n  if (record.run !== undefined) out.run = parseContractRunSection(record.run, `${pathPrefix}.run`);\n  if (record.tools !== undefined) {\n    out.tools = parseContractToolsSection(record.tools, `${pathPrefix}.tools`);\n  }\n  if (record.llm !== undefined) out.llm = parseContractLlmSection(record.llm, `${pathPrefix}.llm`);\n  if (record.steps !== undefined) {\n    out.steps = parseContractStepsSection(record.steps, `${pathPrefix}.steps`);\n  }\n  if (record.observations !== undefined) {\n    out.observations = parseContractObservationsSection(\n      record.observations,\n      `${pathPrefix}.observations`,\n    );\n  }\n  if (record.controls !== undefined) {\n    out.controls = parseContractControlsSection(record.controls, `${pathPrefix}.controls`);\n  }\n  if (record.retry !== undefined) {\n    out.retry = parseContractRetrySection(record.retry, `${pathPrefix}.retry`);\n  }\n  return out;\n}\n\nfunction parseContractAlternativesSection(value: unknown): TraceContractAlternatives {\n  const record = requireObject(value, \"contract.alternatives\");\n  rejectUnknownKeys(record, CONTRACT_ALT_KEYS, \"contract.alternatives\");\n  if (record.anyOf === undefined) {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_INVALID_VALUE\",\n      \"contract.alternatives.anyOf is required.\",\n    );\n  }\n  const items = requireBoundedArray(\n    record.anyOf,\n    \"contract.alternatives.anyOf\",\n    CONTRACT_MAX_ANY_OF,\n  );\n  const anyOf = items.map((item, index) => {\n    const pathPrefix = `contract.alternatives.anyOf[${index}]`;\n    const branch = requireObject(item, pathPrefix);\n    rejectUnknownKeys(branch, CONTRACT_ALT_BRANCH_KEYS, pathPrefix);\n    const id = requireNonEmptyString(branch.id, `${pathPrefix}.id`);\n    if (branch.contract === undefined) {\n      throw new CheckConfigError(\n        \"AI_CHECK_CONFIG_INVALID_VALUE\",\n        `${pathPrefix}.contract is required.`,\n      );\n    }\n    const out: TraceContractAlternatives[\"anyOf\"][number] = {\n      id,\n      contract: parseContractBodySection(branch.contract, `${pathPrefix}.contract`),\n    };\n    if (branch.description !== undefined) {\n      out.description = requireNonEmptyString(branch.description, `${pathPrefix}.description`);\n    }\n    return out;\n  });\n  return { anyOf };\n}\n\n/**\n * Strict parser for top-level TraceContract JSON (slice B: deferred keys).\n * Rejects unknown nested keys; bounds list sizes; no nested alternatives.\n */\nfunction parseContractSection(value: unknown): TraceContractInput {\n  const record = requireObject(value, \"contract\");\n  rejectUnknownKeys(record, CONTRACT_KEYS, \"contract\");\n  const bodyOnly: Record<string, unknown> = {};\n  for (const key of Object.keys(record)) {\n    if (CONTRACT_BODY_KEYS.has(key)) bodyOnly[key] = record[key];\n  }\n  const out: TraceContractInput = { ...parseContractBodySection(bodyOnly, \"contract\") };\n  if (record.scope !== undefined) out.scope = parseContractScopeSection(record.scope);\n  if (record.alternatives !== undefined) {\n    out.alternatives = parseContractAlternativesSection(record.alternatives);\n  }\n  return out;\n}\n\n/**\n * Strict runtime parser for CLI `--config` JSON/JS objects.\n * Rejects unknown keys and invalid value types; never silently ignores typos.\n */\nexport function parseCheckConfig(value: unknown): CheckConfig {\n  if (value === undefined || value === null) return {};\n  if (typeof value !== \"object\" || Array.isArray(value)) {\n    throw new CheckConfigError(\"AI_CHECK_CONFIG_INVALID_VALUE\", \"Config must export an object.\");\n  }\n  const root = value as Record<string, unknown>;\n  const rootKeys = Object.keys(root);\n  for (const key of rootKeys) {\n    if (ROOT_CONFIG_KEYS.has(key)) continue;\n    const suggestion = closestKey(key, [...ROOT_CONFIG_KEYS]);\n    const hint = suggestion ? ` Did you mean \"${suggestion}\"?` : \"\";\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_UNKNOWN_KEY\",\n      `Unknown top-level check config key \"${key}\". Allowed: checks, contract.${hint}`,\n    );\n  }\n\n  const out: CheckConfig = {};\n  if (\"checks\" in root) {\n    const checksRecord = requireObject(root.checks, \"checks\");\n    rejectUnknownKeys(checksRecord, CHECKS_KEYS, \"checks\");\n    const checks: NonNullable<CheckConfig[\"checks\"]> = {};\n    if (checksRecord.select !== undefined) {\n      checks.select = requireStringArray(checksRecord.select, \"checks.select\");\n    }\n    if (checksRecord.run !== undefined) checks.run = parseRunSection(checksRecord.run);\n    if (checksRecord.tool !== undefined) checks.tool = parseToolSection(checksRecord.tool);\n    if (checksRecord.llm !== undefined) checks.llm = parseLlmSection(checksRecord.llm);\n    if (checksRecord.structure !== undefined) {\n      checks.structure = parseStructureSection(checksRecord.structure);\n    }\n    if (checksRecord.safety !== undefined) checks.safety = parseSafetySection(checksRecord.safety);\n    out.checks = checks;\n  }\n  if (\"contract\" in root) {\n    out.contract = parseContractSection(root.contract);\n  }\n  if (\n    out.contract !== undefined &&\n    contractConfigHasEffect(out.contract) &&\n    checkConfigHasEffect({ checks: out.checks })\n  ) {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_INVALID_VALUE\",\n      'Config cannot combine top-level \"checks\" and \"contract\". Use one vocabulary per config file.',\n    );\n  }\n  return out;\n}\n\nasync function loadConfig(configPath: string | undefined): Promise<CheckConfig> {\n  if (configPath === undefined) return {};\n  const extension = path.extname(configPath);\n  if (TS_CONFIG_EXTENSIONS.has(extension)) {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_LOAD_FAILED\",\n      \"TypeScript check configs require an explicit precompiled JavaScript config or future --config-loader support.\",\n    );\n  }\n  if (!CONFIG_EXTENSIONS.has(extension)) {\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_LOAD_FAILED\",\n      \"Unsupported check config extension. Use .json, .js, .mjs, or .cjs.\",\n    );\n  }\n\n  const absolute = path.resolve(configPath);\n  try {\n    if (extension === \".json\") {\n      const raw = await readFile(absolute, \"utf-8\");\n      return parseCheckConfig(JSON.parse(raw));\n    }\n\n    return parseCheckConfig(await importJsCheckConfig(absolute));\n  } catch (error) {\n    if (error instanceof CheckConfigError) throw error;\n    const message = error instanceof Error ? error.message : String(error);\n    throw new CheckConfigError(\n      \"AI_CHECK_CONFIG_LOAD_FAILED\",\n      `Failed to load check config: ${message}`,\n    );\n  }\n}\n\n/**\n * Load a JS/MJS/CJS check config export.\n *\n * Under Vitest/Vite, absolute dynamic imports outside the workspace fail even\n * when the file exists. Fall back to a clean Node subprocess so CLI tests and\n * temp configs keep working without depending on Vite's module graph.\n */\nasync function importJsCheckConfig(absolute: string): Promise<unknown> {\n  const href = pathToFileURL(absolute).href;\n  if (!process.env.VITEST) {\n    const mod = await import(/* @vite-ignore */ href);\n    return \"default\" in mod ? mod.default : mod;\n  }\n\n  const script = `\nconst mod = await import(${JSON.stringify(href)});\nconst value = \"default\" in mod ? mod.default : mod;\nprocess.stdout.write(JSON.stringify({ ok: true, value }));\n`;\n  const env = { ...process.env };\n  delete env.NODE_OPTIONS;\n  delete env.VITEST;\n  delete env.VITEST_WORKER_ID;\n  const { stdout, stderr } = await execFileAsync(\n    process.execPath,\n    [\"--input-type=module\", \"--eval\", script],\n    {\n      encoding: \"utf8\",\n      maxBuffer: 4 * 1024 * 1024,\n      env,\n    },\n  );\n  try {\n    const parsed = JSON.parse(stdout) as { ok?: boolean; value?: unknown };\n    if (parsed.ok !== true) {\n      throw new Error(stderr.trim() || \"Check config module did not return a value\");\n    }\n    return parsed.value;\n  } catch (error) {\n    if (stderr.trim()) {\n      throw new Error(stderr.trim());\n    }\n    throw error instanceof Error ? error : new Error(String(error));\n  }\n}\n\nfunction normalizeConfig(config: CheckConfig): NonNullable<CheckConfig[\"checks\"]> {\n  if (config.checks === undefined) return {};\n  if (typeof config.checks !== \"object\" || Array.isArray(config.checks)) {\n    throw new CheckConfigError(\"AI_CHECK_CONFIG_INVALID_VALUE\", \"checks config must be an object.\");\n  }\n  return config.checks;\n}\n\nfunction hasToolRulesConfigured(\n  config: CheckConfig,\n  options: CheckCommandOptions,\n): boolean {\n  const tool = normalizeConfig(config).tool ?? {};\n  return Boolean(\n    (tool.required?.length ?? 0) > 0 ||\n      (tool.forbidden?.length ?? 0) > 0 ||\n      (tool.allowed?.length ?? 0) > 0 ||\n      tool.minCount !== undefined ||\n      tool.maxCount !== undefined ||\n      (options.requiredTool?.length ?? 0) > 0 ||\n      (options.forbiddenTool?.length ?? 0) > 0,\n  );\n}\n\nfunction applyResolvedPreset(\n  config: CheckConfig,\n  options: CheckCommandOptions,\n  resolved: ResolvedPreset,\n): { config: CheckConfig; options: CheckCommandOptions } {\n  const checks = { ...normalizeConfig(config) };\n\n  if (resolved.enableSafetyRedaction) {\n    checks.safety = { ...checks.safety, redaction: true };\n  }\n\n  if (resolved.enableStructureRelationshipDefaults) {\n    const structure = checks.structure ?? {};\n    const needed =\n      structure.minConfidence === undefined &&\n      structure.requireParentBeforeChild === undefined &&\n      structure.requireTraceParentSpan === undefined;\n    if (needed) {\n      checks.structure = { ...structure, requireParentBeforeChild: true };\n    }\n  }\n\n  return {\n    config: { checks },\n    options: {\n      ...options,\n      ...(resolved.requireCompleted ? { requireCompleted: true } : {}),\n      ...(resolved.failOnObservation !== undefined &&\n      (options.failOnObservation === undefined || options.failOnObservation.trim() === \"\")\n        ? { failOnObservation: resolved.failOnObservation }\n        : {}),\n    },\n  };\n}\n\nfunction buildRules(\n  config: CheckConfig,\n  options: CheckCommandOptions,\n  presetSelect: readonly string[] = [],\n): RuleBuildResult {\n  const diagnostics: TraceCheckDiagnostic[] = [];\n  const checks = normalizeConfig(config);\n  const run = checks.run ?? {};\n  const tool = checks.tool ?? {};\n  const llm = checks.llm ?? {};\n  const structure = checks.structure ?? {};\n  const safety = checks.safety ?? {};\n  const maxDurationMs =\n    parseNumber(options.maxDurationMs, \"--max-duration-ms\") ?? run.maxDurationMs;\n  const maxTotalTokens =\n    parseNumber(options.maxTotalTokens, \"--max-total-tokens\") ?? llm.maxTotalTokens;\n  let maxStepDurationMs: number | undefined;\n  if (options.maxStepDuration !== undefined) {\n    try {\n      maxStepDurationMs = parseDuration(options.maxStepDuration.trim());\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      diagnostics.push(\n        diagnostic(\"AI_CHECK_INVALID_ARGUMENTS\", `--max-step-duration: ${message}`),\n      );\n    }\n  }\n  const rules: TraceCheckRule[] = [\n    createRunStatusRule(run),\n    createStructureOrphanRule(),\n    createStructureCycleRule(),\n    createSafetyRawContentRule(),\n    createSafetySecretPatternRule(),\n  ];\n\n  if (maxDurationMs !== undefined) {\n    rules.push(createRunDurationRule({ maxDurationMs }));\n  }\n  if (maxStepDurationMs !== undefined) {\n    rules.push(createMaxStepDurationRule({ maxDurationMs: maxStepDurationMs }));\n  }\n  if (options.requireCompleted) {\n    rules.push(createRequireCompletedRule());\n  }\n  if (options.detectStalls) {\n    rules.push(createStallDetectionRule({ requireEndedAt: true }));\n  }\n  if (options.failOnObservation !== undefined && options.failOnObservation.trim() !== \"\") {\n    try {\n      const statuses = options.failOnObservation\n        .split(\",\")\n        .map((value) => value.trim())\n        .filter((value) => value !== \"\")\n        .map((value) => {\n          if (\n            value === \"passed\" ||\n            value === \"failed\" ||\n            value === \"unknown\" ||\n            value === \"skipped\"\n          ) {\n            return value as \"passed\" | \"failed\" | \"unknown\" | \"skipped\";\n          }\n          throw new Error(`unsupported status \"${value}\"`);\n        });\n      rules.push(createObservedOutcomeRule({ failOn: statuses, requireAny: true }));\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      diagnostics.push(\n        diagnostic(\"AI_CHECK_INVALID_ARGUMENTS\", `--fail-on-observation: ${message}`),\n      );\n    }\n  }\n  if (run.maxDepth !== undefined) {\n    rules.push(createRunDepthRule({ maxDepth: run.maxDepth }));\n  }\n\n  const toolOptions: ToolUsageRuleOptions = {\n    ...tool,\n    required: [...(tool.required ?? []), ...(options.requiredTool ?? [])],\n    forbidden: [...(tool.forbidden ?? []), ...(options.forbiddenTool ?? [])],\n  };\n  if (\n    toolOptions.required?.length ||\n    toolOptions.forbidden?.length ||\n    toolOptions.allowed?.length ||\n    toolOptions.minCount !== undefined ||\n    toolOptions.maxCount !== undefined\n  ) {\n    rules.push(createToolUsageRule(toolOptions));\n  }\n\n  const llmOptions: LlmUsageRuleOptions = {\n    ...llm,\n    allowedModels: [...(llm.allowedModels ?? []), ...(options.allowedModel ?? [])],\n    ...(maxTotalTokens !== undefined ? { maxTotalTokens } : {}),\n  };\n  if (\n    llmOptions.allowedModels?.length ||\n    llmOptions.allowedProviders?.length ||\n    llmOptions.finishReasons?.length ||\n    llmOptions.maxCalls !== undefined ||\n    llmOptions.maxInputTokens !== undefined ||\n    llmOptions.maxOutputTokens !== undefined ||\n    llmOptions.maxTotalTokens !== undefined ||\n    llmOptions.maxCachedTokens !== undefined\n  ) {\n    rules.push(createLlmUsageRule(llmOptions));\n  }\n\n  if (\n    structure.minConfidence !== undefined ||\n    structure.requireParentBeforeChild !== undefined ||\n    structure.requireTraceParentSpan !== undefined\n  ) {\n    rules.push(createStructureRelationshipRule(structure));\n  }\n  if (structure.maxChildren !== undefined || structure.maxConcurrent !== undefined) {\n    rules.push(\n      createStructureParallelWidthRule({\n        maxChildren: structure.maxChildren,\n        maxConcurrent: structure.maxConcurrent,\n      }),\n    );\n  }\n  if (safety.redaction) rules.push(createSafetyRedactionRule());\n  if (safety.maxStringLength !== undefined || safety.maxArrayLength !== undefined || safety.maxObjectKeys !== undefined || safety.maxSerializedBytes !== undefined) {\n    rules.push(createSafetyOversizedAttributeRule(safety));\n  }\n\n  const constructedRuleIds = rules.map((rule) => rule.id);\n  const shorthandIds = cliShorthandSelectIds(options);\n  const select = unionCheckSelect({\n    presetSelect,\n    explicitRules: options.rule ?? [],\n    configSelect: asStringArray(checks.select) ?? [],\n    shorthandIds,\n    constructedRuleIds,\n  });\n\n  return {\n    rules,\n    select,\n    diagnostics,\n  };\n}\n\nfunction exitCodeFor(result: TraceCheckResult): number {\n  if (result.status === \"pass\") return 0;\n  if (result.status === \"fail\") return 1;\n  const codes = result.diagnostics.map((item) => item.code);\n  if (\n    codes.some((code) =>\n      code === \"AI_CHECK_UNSUPPORTED_FORMAT\" ||\n      code === \"AI_CHECK_AMBIGUOUS_FORMAT\"\n    )\n  ) {\n    return 4;\n  }\n  if (\n    codes.some((code) =>\n      code === \"AI_CHECK_TRACE_UNREADABLE\" ||\n      code === \"AI_CHECK_BASELINE_UNREADABLE\"\n    )\n  ) {\n    return 3;\n  }\n  if (\n    codes.some((code) =>\n      code === \"AI_CHECK_INVALID_ARGUMENTS\" ||\n      code === \"AI_CHECK_INVALID_CONFIG\" ||\n      code === \"AI_CHECK_CONFIG_LOAD_FAILED\" ||\n      code === \"AI_CHECK_CONFIG_UNKNOWN_KEY\" ||\n      code === \"AI_CHECK_CONFIG_INVALID_VALUE\" ||\n      code === \"AI_CHECK_CONFIG_NO_EFFECTIVE_RULES\" ||\n      code === \"AI_CHECK_NO_RULES_EVALUATED\" ||\n      code === \"AI_CHECK_RUN_SELECTION_REQUIRED\"\n    )\n  ) {\n    return 2;\n  }\n  return 1;\n}\n\nfunction stable(value: unknown): unknown {\n  if (Array.isArray(value)) return value.map(stable);\n  if (value === null || typeof value !== \"object\") return value;\n  const record = value as Record<string, unknown>;\n  return Object.fromEntries(\n    Object.keys(record)\n      .sort((a, b) => a.localeCompare(b))\n      .map((key) => [key, stable(record[key])]),\n  );\n}\n\nfunction printJson(result: TraceCheckResult): void {\n  console.log(JSON.stringify(stable(result), null, 2));\n}\n\nfunction isSafetyFinding(ruleId: string): boolean {\n  return (\n    ruleId.startsWith(\"safety.\") ||\n    ruleId.startsWith(\"guardrail.\") ||\n    ruleId.includes(\"pii\") ||\n    ruleId.includes(\"secret\")\n  );\n}\n\nfunction printPresetClassSummary(\n  result: TraceCheckResult,\n  preset: string | undefined,\n): void {\n  const name = preset?.trim().toLowerCase();\n  if (\n    name !== \"trajectory\" &&\n    name !== \"safety\" &&\n    name !== \"comprehensive\" &&\n    name !== \"behavioral-session\"\n  ) {\n    return;\n  }\n  if (name === \"behavioral-session\") {\n    console.log(\n      `Behavioral session: ${result.status === \"pass\" ? \"PASS\" : \"FAIL\"} (outcomes scored; tool errors may be expected)`,\n    );\n    return;\n  }\n  const hasSafetyFindings = result.findings.some((finding) =>\n    isSafetyFinding(finding.ruleId),\n  );\n  const hasTrajectoryFindings = result.findings.some(\n    (finding) => !isSafetyFinding(finding.ruleId),\n  );\n\n  if (name === \"trajectory\") {\n    console.log(\n      `Trajectory: ${result.status === \"pass\" && !hasTrajectoryFindings ? \"PASS\" : result.status === \"pass\" ? \"PASS\" : \"FAIL\"}`,\n    );\n    console.log(\"Share safety: not evaluated\");\n    console.log(\"Run verify-safe before sharing.\");\n    return;\n  }\n  if (name === \"safety\") {\n    console.log(\n      `Share safety: ${result.status === \"pass\" && !hasSafetyFindings ? \"PASS\" : result.status === \"pass\" ? \"PASS\" : \"FAIL\"}`,\n    );\n    return;\n  }\n  console.log(\n    `Trajectory: ${hasTrajectoryFindings || result.status === \"error\" ? \"FAIL\" : \"PASS\"}`,\n  );\n  console.log(\n    `Share safety: ${hasSafetyFindings || result.status === \"fail\" ? \"FAIL\" : result.status === \"pass\" ? \"PASS\" : \"FAIL\"}`,\n  );\n}\n\nfunction printHuman(\n  result: TraceCheckResult,\n  options: CheckCommandOptions = {},\n): void {\n  const scoped = result as {\n    scopeKind?: string;\n    scopeLabel?: string;\n    runIds?: string[];\n    runResults?: Array<{ runId: string; status: string }>;\n  };\n  if (scoped.scopeLabel) {\n    console.log(`Scope: ${scoped.scopeKind} ${scoped.scopeLabel}`);\n    if (scoped.runIds?.length) {\n      console.log(`Runs: ${scoped.runIds.join(\", \")}`);\n    }\n  }\n  console.log(`Check status: ${result.status}`);\n  printPresetClassSummary(result, options.preset);\n  console.log(`Format: ${result.format}`);\n  if (result.runId !== undefined) console.log(`Run: ${result.runId}`);\n  console.log(\n    `Summary: ${result.summary.failed} failed, ${result.summary.warnings} warning(s), ${result.summary.errors} error(s)`,\n  );\n  console.log(`Rules evaluated: ${result.summary.rulesEvaluated ?? result.ruleExecutions?.length ?? 0}`);\n  for (const diagnostic of result.diagnostics) {\n    console.log(`- ${diagnostic.code}: ${diagnostic.message}`);\n  }\n  for (const finding of result.findings) {\n    const path = finding.evidence[0]?.path;\n    const run = finding.evidence[0]?.runId;\n    const runPrefix = run ? `[${run}] ` : \"\";\n    console.log(`- ${runPrefix}${finding.ruleId}: ${finding.message}${path ? ` (${path})` : \"\"}`);\n  }\n}\n\nfunction readErrorResult(error: unknown): TraceCheckResult {\n  if (error instanceof TraceReadError) {\n    const code =\n      error.code === \"unsupported_format\"\n        ? \"AI_CHECK_UNSUPPORTED_FORMAT\"\n        : error.code === \"ambiguous_format\"\n          ? \"AI_CHECK_AMBIGUOUS_FORMAT\"\n          : \"AI_CHECK_TRACE_UNREADABLE\";\n    return errorResult(code, error.message);\n  }\n  return errorResult(\n    \"AI_CHECK_TRACE_UNREADABLE\",\n    error instanceof Error ? error.message : String(error),\n  );\n}\n\nexport async function checkCommand(\n  target: string,\n  options: CheckCommandOptions = {},\n  stdin: NodeJS.ReadableStream = process.stdin,\n): Promise<void> {\n  options = withResolvedForbiddenTools(options);\n  let result: TraceCheckResult;\n  let phase: \"config\" | \"read\" = \"config\";\n  let evidenceRead: TraceReadResult | undefined;\n  let evidenceRunIds: string[] = [];\n  let evidenceSourceContents: Map<string, string> | undefined;\n  let evidenceContract: TraceContract | undefined;\n\n  const sessionId = options.session?.trim();\n  const groupId = options.group?.trim();\n  const useSessionScope = Boolean(sessionId || groupId);\n\n  try {\n    let config = await loadConfig(options.config);\n    if (options.config !== undefined && !checkConfigHasEffect(config)) {\n      result = errorResult(\n        \"AI_CHECK_CONFIG_NO_EFFECTIVE_RULES\",\n        \"Explicit --config has no effective check rules. Configure checks.select, checks.run, checks.tool, checks.llm, checks.structure, checks.safety, or contract.\",\n      );\n      if (options.json) printJson(result);\n      else printHuman(result, options);\n      process.exitCode = exitCodeFor(result);\n      return;\n    }\n    let effectiveOptions = options;\n    const useContract =\n      config.contract !== undefined && contractConfigHasEffect(config.contract);\n    if (useContract) {\n      evidenceContract = defineTraceContract(config.contract!);\n    }\n    const resolved = useContract\n      ? undefined\n      : resolvePreset(options.preset, {\n          hasToolRules: hasToolRulesConfigured(config, options),\n        });\n    if (resolved !== undefined) {\n      const applied = applyResolvedPreset(config, options, resolved);\n      config = applied.config;\n      effectiveOptions = applied.options;\n    }\n    const built = useContract\n      ? { rules: [] as TraceCheckRule[], select: [] as string[], diagnostics: [] as TraceCheckDiagnostic[] }\n      : buildRules(config, effectiveOptions, resolved?.select ?? []);\n    if (built.diagnostics.some((item) => item.severity === \"error\")) {\n      result = errorResult(\"AI_CHECK_INVALID_CONFIG\", \"Invalid check configuration.\");\n      result.diagnostics = [...built.diagnostics];\n    } else if (useSessionScope) {\n      phase = \"read\";\n      const traceDir = resolveTraceDir({ dir: options.dir });\n      const td = new TraceDirectory({ dir: traceDir });\n      const files = await td.list();\n      const metas = await loadTraceMetadataList(traceDir, files, (fileName) =>\n        td.getPath(fileName),\n      );\n      const records = await loadSessionRunRecords(metas);\n      const scoped = filterMetasBySessionScope(metas, records, {\n        ...(sessionId ? { sessionId } : {}),\n        ...(groupId ? { groupId } : {}),\n        correlateByGroupId: options.correlateGroup === true,\n      });\n      const perRun: TraceCheckResult[] = [];\n      const sourceContents = new Map<string, string>();\n      const definedContract = evidenceContract;\n      for (const meta of scoped.metas) {\n        const read = await openTrace(\n          { type: \"file\", path: meta.filePath },\n          {\n            ...(options.format !== undefined ? { format: options.format } : {}),\n          },\n        );\n        try {\n          sourceContents.set(meta.runId, await readFile(meta.filePath, \"utf-8\"));\n        } catch {\n          sourceContents.set(\n            meta.runId,\n            `${read.events.map((event) => JSON.stringify(event)).join(\"\\n\")}\\n`,\n          );\n        }\n        const base = definedContract\n          ? evaluateTraceContract({ read }, definedContract, { runId: meta.runId })\n          : runTraceChecks(\n              { read },\n              {\n                rules: built.rules,\n                select: built.select,\n                runId: meta.runId,\n              },\n            );\n        perRun.push(\n          mergeSafetyExtensions(base, read, {\n            ...(options.guardrails ? { guardrails: options.guardrails } : {}),\n            ...(options.circuit ? { circuits: options.circuit } : {}),\n            runId: meta.runId,\n          }),\n        );\n      }\n      evidenceRunIds = scoped.runIds;\n      evidenceSourceContents = sourceContents;\n      result = aggregateSessionCheckResults(perRun, {\n        scopeKind: scoped.scopeKind,\n        scopeLabel: scoped.scopeLabel,\n        runIds: scoped.runIds,\n        sessionWarnings: scoped.warnings,\n        notFound: scoped.notFound,\n        empty: scoped.metas.length === 0,\n      });\n    } else {\n      phase = \"read\";\n      const input = await inputFromTarget(target, options, stdin);\n      const read = await openTrace(input, {\n        ...(options.format !== undefined ? { format: options.format } : {}),\n      });\n      evidenceRead = read;\n      evidenceRunIds =\n        options.run !== undefined\n          ? [options.run]\n          : read.runs.length === 1\n            ? [read.runs[0]!.runId]\n            : read.runs.map((run) => run.runId);\n      if (input.type === \"file\") {\n        try {\n          const raw = await readFile(input.path, \"utf-8\");\n          evidenceSourceContents = new Map(\n            evidenceRunIds.map((runId) => [runId, raw]),\n          );\n        } catch {\n          evidenceSourceContents = undefined;\n        }\n      } else {\n        evidenceSourceContents = new Map(\n          evidenceRunIds.map((runId) => [\n            runId,\n            `${read.events\n              .filter((event) => event.runId === runId)\n              .map((event) => JSON.stringify(event))\n              .join(\"\\n\")}\\n`,\n          ]),\n        );\n      }\n      const base = useContract && evidenceContract !== undefined\n        ? evaluateTraceContract(\n            { read },\n            evidenceContract,\n            {\n              ...(options.run !== undefined ? { runId: options.run } : {}),\n            },\n          )\n        : runTraceChecks(\n            { read },\n            {\n              rules: built.rules,\n              select: built.select,\n              ...(options.run !== undefined ? { runId: options.run } : {}),\n            },\n          );\n      result = mergeSafetyExtensions(base, read, {\n        ...(options.guardrails ? { guardrails: options.guardrails } : {}),\n        ...(options.circuit ? { circuits: options.circuit } : {}),\n        ...(options.run !== undefined ? { runId: options.run } : {}),\n      });\n    }\n  } catch (error) {\n    if (phase === \"config\") {\n      if (error instanceof CheckConfigError) {\n        result = errorResult(error.code, error.message);\n      } else {\n        const message = error instanceof Error ? error.message : String(error);\n        const code: TraceCheckDiagnosticCode =\n          message.startsWith(\"--\") || message.includes(\"Unknown --preset\")\n            ? \"AI_CHECK_INVALID_ARGUMENTS\"\n            : error instanceof SyntaxError ||\n                message.includes(\"Unsupported check config extension\") ||\n                message.includes(\"TypeScript check configs\") ||\n                message.includes(\"Config must\") ||\n                message.includes(\"checks config\") ||\n                message.includes(\"Expected an array\")\n              ? \"AI_CHECK_INVALID_CONFIG\"\n              : \"AI_CHECK_CONFIG_LOAD_FAILED\";\n        result = errorResult(code, message);\n      }\n    } else {\n      result = readErrorResult(error);\n    }\n  }\n\n  process.exitCode = exitCodeFor(result);\n\n  const failed = result.status !== \"pass\";\n  if (shouldEmitEvidence(options.evidenceOn, failed)) {\n    try {\n      const runIds =\n        evidenceRunIds.length > 0\n          ? evidenceRunIds\n          : result.runId !== undefined\n            ? [result.runId]\n            : [\"check\"];\n      if (\n        evidenceSourceContents === undefined &&\n        evidenceRead !== undefined\n      ) {\n        evidenceSourceContents = new Map(\n          runIds.map((runId) => [\n            runId,\n            `${evidenceRead!.events\n              .filter((event) => event.runId === runId)\n              .map((event) => JSON.stringify(event))\n              .join(\"\\n\")}\\n`,\n          ]),\n        );\n      }\n      let redactionProfile = parseEvidenceProfile(options.evidenceProfile);\n      let evidenceFormat = parseEvidenceFormat(options.evidenceFormat);\n      const outputDir = resolveEvidenceOutputDir(\n        options.evidenceDir,\n        runIds[0] ?? \"check\",\n      );\n      const written = await writeLocalEvidence({\n        outputDir,\n        runIds,\n        ...(evidenceSourceContents !== undefined\n          ? { sourceContents: evidenceSourceContents }\n          : {}),\n        ...(options.dir !== undefined ? { dir: options.dir } : {}),\n        failed,\n        checkResultsJson: checkResultToEvidenceJson(result, runIds),\n        summaryText: `Check status: ${result.status}`,\n        redactionProfile,\n        format: evidenceFormat,\n        ...(evidenceContract !== undefined\n          ? {\n              contractPackage: {\n                engineVersion: \"\",\n                source: \"file\" as const,\n                contract: evidenceContract,\n                ...(options.config !== undefined ? { path: options.config } : {}),\n              },\n            }\n          : {}),\n      });\n      if (!options.json) {\n        console.log(`Evidence: ${written}`);\n      }\n    } catch (error) {\n      console.error(\n        `[AgentInspect] evidence package skipped: ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  }\n\n  if (options.json) printJson(result);\n  else printHuman(result, options);\n}\n","import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport {\n  buildEvidenceCiPackage,\n  buildZipArchive,\n  getTraceFilePath,\n  resolveTraceDir,\n  type EvidenceSafeStatus,\n  type BuildEvidenceContractPackageInput,\n} from \"@agent-inspect/core/advanced\";\nimport { createEvidenceCiArtifacts } from \"@agent-inspect/core/reporters\";\nimport type { TraceCheckResult } from \"@agent-inspect/core/checks\";\nimport type { RedactionProfile } from \"@agent-inspect/redact\";\n\nimport { version as packageVersion } from \"../../../package.json\";\nimport { redactTraceContent } from \"./redact.js\";\n\nexport type EvidenceOnMode = \"fail\" | \"always\" | \"never\";\nexport type EvidenceEmitFormat = \"directory\" | \"html\" | \"zip\";\n\nexport function shouldEmitEvidence(\n  mode: EvidenceOnMode | undefined,\n  failed: boolean,\n): boolean {\n  if (mode === undefined || mode === \"never\") return false;\n  if (mode === \"always\") return true;\n  return failed;\n}\n\nexport function parseEvidenceProfile(\n  value: string | undefined,\n): RedactionProfile {\n  const profile = (value ?? \"share\").trim().toLowerCase();\n  if (profile === \"local\" || profile === \"share\" || profile === \"strict\") {\n    return profile;\n  }\n  throw new Error(\n    `Unsupported --evidence-profile \"${value}\". Use local, share, or strict.`,\n  );\n}\n\nexport function parseEvidenceFormat(\n  value: string | undefined,\n): EvidenceEmitFormat {\n  const format = (value ?? \"directory\").trim().toLowerCase();\n  if (format === \"directory\" || format === \"html\" || format === \"zip\") {\n    return format;\n  }\n  throw new Error(\n    `Unsupported --evidence-format \"${value}\". Use directory, html, or zip.`,\n  );\n}\n\nfunction toAssessmentStatus(failed: boolean): EvidenceSafeStatus {\n  return failed ? \"UNSAFE\" : \"SAFE\";\n}\n\nfunction stableJson(value: unknown): string {\n  return `${JSON.stringify(value, null, 2)}\\n`;\n}\n\nexport interface WriteLocalEvidenceInput {\n  /** Destination directory (or base path) for Evidence v2 files. */\n  outputDir: string;\n  runIds: readonly string[];\n  /** Optional preloaded source bytes keyed by run id. */\n  sourceContents?: ReadonlyMap<string, string> | Record<string, string>;\n  /** Trace directory used when sourceContents omit a run. */\n  dir?: string;\n  failed: boolean;\n  checkResultsJson: string;\n  summaryText?: string;\n  redactionProfile?: RedactionProfile;\n  format?: EvidenceEmitFormat;\n  /**\n   * When set, bind the evaluated TraceContract into Evidence\n   * (`contract.resolved.json` + check-results digests).\n   */\n  contractPackage?: BuildEvidenceContractPackageInput;\n}\n\n/**\n * Write a minimal local Evidence v2 package (no upload).\n * Reuses the same CI package builder as `artifacts`.\n */\nexport async function writeLocalEvidence(\n  input: WriteLocalEvidenceInput,\n): Promise<string> {\n  const profile = input.redactionProfile ?? \"share\";\n  const format = input.format ?? \"directory\";\n  const baseDir = path.resolve(input.outputDir);\n  await mkdir(\n    format === \"zip\" && baseDir.toLowerCase().endsWith(\".zip\")\n      ? path.dirname(baseDir)\n      : baseDir,\n    { recursive: true },\n  );\n\n  const sourceContents = new Map<string, string>();\n  if (input.sourceContents instanceof Map) {\n    for (const [runId, content] of input.sourceContents) {\n      sourceContents.set(runId, content);\n    }\n  } else if (input.sourceContents !== undefined) {\n    for (const [runId, content] of Object.entries(input.sourceContents)) {\n      sourceContents.set(runId, content);\n    }\n  }\n\n  const traceDir = resolveTraceDir({ dir: input.dir });\n  let combined = \"\";\n  for (const runId of input.runIds) {\n    let raw = sourceContents.get(runId) ?? \"\";\n    if (raw === \"\") {\n      try {\n        raw = await readFile(getTraceFilePath(runId, traceDir), \"utf-8\");\n      } catch {\n        raw = \"\";\n      }\n      sourceContents.set(runId, raw);\n    }\n    const redacted = redactTraceContent(raw, profile);\n    combined += redacted.content.endsWith(\"\\n\")\n      ? redacted.content\n      : `${redacted.content}\\n`;\n  }\n\n  const assessmentStatus = toAssessmentStatus(input.failed);\n  const evidencePackage = buildEvidenceCiPackage({\n    generatorVersion: packageVersion,\n    runIds: input.runIds,\n    sourceContents,\n    redactedTraceJsonl: combined,\n    redactionProfile: profile,\n    assessmentStatus,\n    checkResultsJson: input.checkResultsJson,\n    ...(input.summaryText !== undefined ? { summaryText: input.summaryText } : {}),\n    ...(input.contractPackage !== undefined\n      ? { contractPackage: input.contractPackage }\n      : {}),\n  });\n\n  const files: Array<[string, string]> = [\n    [\"evidence.html\", evidencePackage[\"evidence.html\"]],\n    [\"evidence.json\", evidencePackage[\"evidence.json\"]],\n    [\"check-results.json\", evidencePackage[\"check-results.json\"]],\n    [\"trace.jsonl\", evidencePackage[\"trace.jsonl\"]],\n  ];\n  const resolvedContract = evidencePackage[\"contract.resolved.json\"];\n  if (resolvedContract !== undefined) {\n    files.push([\"contract.resolved.json\", resolvedContract]);\n  }\n\n  const expected = createEvidenceCiArtifacts({\n    redactionProfile: profile,\n  }).map((a) => a.path);\n  for (const name of expected) {\n    if (!files.some(([fileName]) => fileName === name)) {\n      throw new Error(`Evidence CI package missing expected file: ${name}`);\n    }\n  }\n\n  if (format === \"zip\") {\n    const zipPath = baseDir.toLowerCase().endsWith(\".zip\")\n      ? baseDir\n      : `${baseDir}.zip`;\n    await mkdir(path.dirname(zipPath), { recursive: true });\n    const archive = buildZipArchive(\n      files.map(([relativePath, content]) => ({\n        path: relativePath,\n        content,\n      })),\n    );\n    await writeFile(zipPath, archive);\n    return zipPath;\n  }\n\n  if (format === \"html\") {\n    let htmlPath = baseDir;\n    let sidecarDir = baseDir;\n    if (baseDir.toLowerCase().endsWith(\".html\")) {\n      htmlPath = baseDir;\n      sidecarDir = path.dirname(baseDir);\n    } else {\n      await mkdir(baseDir, { recursive: true });\n      htmlPath = path.join(baseDir, \"evidence.html\");\n      sidecarDir = baseDir;\n    }\n    await mkdir(sidecarDir, { recursive: true });\n    await writeFile(htmlPath, evidencePackage[\"evidence.html\"], \"utf-8\");\n    await writeFile(\n      path.join(sidecarDir, \"evidence.json\"),\n      evidencePackage[\"evidence.json\"],\n      \"utf-8\",\n    );\n    return htmlPath;\n  }\n\n  await mkdir(baseDir, { recursive: true });\n  for (const [name, content] of files) {\n    await writeFile(path.join(baseDir, name), content, \"utf-8\");\n  }\n  return baseDir;\n}\n\nexport function checkResultToEvidenceJson(\n  result: TraceCheckResult,\n  runIds: readonly string[],\n): string {\n  const status: EvidenceSafeStatus =\n    result.status === \"pass\"\n      ? \"SAFE\"\n      : result.status === \"fail\"\n        ? \"UNSAFE\"\n        : \"UNKNOWN\";\n  return stableJson({\n    aggregateStatus: status,\n    runs: runIds.map((runId) => ({\n      runId,\n      status,\n      errors: result.summary.errors,\n      warnings: result.summary.warnings,\n      findings: result.findings.length,\n      rulesEvaluated: result.summary.rulesEvaluated ?? 0,\n    })),\n    rulesEvaluated: result.summary.rulesEvaluated ?? 0,\n    evaluatedRuleIds: (result.ruleExecutions ?? []).map((item) => item.ruleId),\n    findings: result.findings,\n    diagnostics: result.diagnostics,\n  });\n}\n\nexport function defaultEvidenceDir(label: string): string {\n  const safe = label.replace(/[^a-zA-Z0-9._-]+/g, \"_\").slice(0, 80) || \"evidence\";\n  return path.join(\".agent-inspect\", \"evidence\", safe);\n}\n\nexport function resolveEvidenceOutputDir(\n  evidenceDir: string | undefined,\n  label: string,\n): string {\n  if (evidenceDir !== undefined && evidenceDir.trim() !== \"\") {\n    return path.resolve(evidenceDir.trim());\n  }\n  return defaultEvidenceDir(label);\n}\n","import path from \"node:path\";\n\nexport const TRACE_ARTIFACT_MANIFEST_SCHEMA_VERSION = \"0.1\" as const;\n\n/** Experimental reporter framework identifier for local CI artifacts. */\nexport type TraceReporterFramework = \"vitest\" | \"jest\" | \"manual\";\n\n/** Experimental reporter test status normalized across supported test runners. */\nexport type TraceTestStatus = \"passed\" | \"failed\" | \"skipped\" | \"todo\";\n\n/** Experimental reporter artifact kind used in artifact manifests. */\nexport type TraceArtifactKind = \"trace\" | \"report\" | \"eval\" | \"redaction\" | \"summary\" | \"evidence\";\n\n/** Experimental reporter artifact file format used in artifact manifests. */\nexport type TraceArtifactFormat = \"json\" | \"jsonl\" | \"md\" | \"html\";\n\n/** Experimental redaction profile marker recorded with reporter artifacts. */\nexport type TraceArtifactRedactionProfile = \"local\" | \"share\" | \"strict\";\n\n/** Experimental reporter diagnostic severity. */\nexport type TraceReporterDiagnosticSeverity = \"info\" | \"warning\" | \"error\";\n\n/** Experimental reporter diagnostic code for safe, non-throwing reporter helpers. */\nexport type TraceReporterDiagnosticCode =\n  | \"invalid_artifact_path\"\n  | \"artifact_path_escape\"\n  | \"artifact_path_empty\"\n  | \"artifact_path_absolute\"\n  | \"reporter_failure\";\n\n/** Experimental diagnostic emitted by reporter helpers instead of throwing. */\nexport interface TraceReporterDiagnostic {\n  code: TraceReporterDiagnosticCode;\n  severity: TraceReporterDiagnosticSeverity;\n  message: string;\n  target?: string;\n}\n\n/** Experimental manifest artifact entry shared by framework reporters. */\nexport interface TraceArtifact {\n  kind: TraceArtifactKind;\n  path: string;\n  format: TraceArtifactFormat;\n  redactionProfile: TraceArtifactRedactionProfile;\n  title?: string;\n  sizeBytes?: number;\n  diagnostics?: TraceReporterDiagnostic[];\n}\n\n/** Experimental normalized test result entry shared by framework reporters. */\nexport interface TraceTestResult {\n  testId: string;\n  name: string;\n  file?: string;\n  status: TraceTestStatus;\n  durationMs?: number;\n  tracePath?: string;\n  artifacts?: TraceArtifact[];\n  diagnostics?: TraceReporterDiagnostic[];\n}\n\n/** Experimental reporter artifact manifest shared by framework reporters. */\nexport interface TraceArtifactManifest {\n  schemaVersion: typeof TRACE_ARTIFACT_MANIFEST_SCHEMA_VERSION;\n  generatedAt: string;\n  framework: TraceReporterFramework;\n  results: TraceTestResult[];\n  artifacts: TraceArtifact[];\n  diagnostics: TraceReporterDiagnostic[];\n}\n\n/** Experimental options for deterministic reporter artifact manifest creation. */\nexport interface CreateTraceArtifactManifestOptions {\n  framework: TraceReporterFramework;\n  generatedAt: string;\n  results: TraceTestResult[];\n  artifacts?: TraceArtifact[];\n  diagnostics?: TraceReporterDiagnostic[];\n}\n\n/** Experimental options for deriving a safe reporter artifact path. */\nexport interface CreateReporterArtifactPathOptions {\n  outputDir: string;\n  testId: string;\n  name: string;\n  kind: TraceArtifactKind;\n  format: TraceArtifactFormat;\n  file?: string;\n}\n\n/** Experimental result from reporter artifact path validation/resolution. */\nexport interface ReporterArtifactPathResult {\n  ok: boolean;\n  outputDir: string;\n  relativePath?: string;\n  absolutePath?: string;\n  diagnostics: TraceReporterDiagnostic[];\n}\n\nexport interface ValidateReporterArtifactPathOptions {\n  outputDir: string;\n  relativePath: string;\n}\n\nconst FORMAT_EXTENSIONS: Record<TraceArtifactFormat, string> = {\n  json: \"json\",\n  jsonl: \"jsonl\",\n  md: \"md\",\n  html: \"html\",\n};\n\nfunction sortDiagnostics(a: TraceReporterDiagnostic, b: TraceReporterDiagnostic): number {\n  return compareStrings(a.target ?? \"\", b.target ?? \"\") ||\n    compareStrings(a.code, b.code) ||\n    compareStrings(a.severity, b.severity) ||\n    compareStrings(a.message, b.message);\n}\n\nfunction sortArtifacts(a: TraceArtifact, b: TraceArtifact): number {\n  return compareStrings(a.path, b.path) ||\n    compareStrings(a.kind, b.kind) ||\n    compareStrings(a.format, b.format) ||\n    compareStrings(a.redactionProfile, b.redactionProfile) ||\n    compareStrings(a.title ?? \"\", b.title ?? \"\");\n}\n\nfunction sortResults(a: TraceTestResult, b: TraceTestResult): number {\n  return compareStrings(a.file ?? \"\", b.file ?? \"\") ||\n    compareStrings(a.name, b.name) ||\n    compareStrings(a.testId, b.testId);\n}\n\nfunction compareStrings(a: string, b: string): number {\n  return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction cloneDiagnostic(diagnostic: TraceReporterDiagnostic): TraceReporterDiagnostic {\n  return {\n    code: diagnostic.code,\n    severity: diagnostic.severity,\n    message: diagnostic.message,\n    ...(diagnostic.target === undefined ? {} : { target: diagnostic.target }),\n  };\n}\n\nfunction cloneArtifact(artifact: TraceArtifact): TraceArtifact {\n  return {\n    kind: artifact.kind,\n    path: artifact.path,\n    format: artifact.format,\n    redactionProfile: artifact.redactionProfile,\n    ...(artifact.title === undefined ? {} : { title: artifact.title }),\n    ...(artifact.sizeBytes === undefined ? {} : { sizeBytes: artifact.sizeBytes }),\n    diagnostics: (artifact.diagnostics ?? []).map(cloneDiagnostic).sort(sortDiagnostics),\n  };\n}\n\nfunction cloneResult(result: TraceTestResult): TraceTestResult {\n  return {\n    testId: result.testId,\n    name: result.name,\n    ...(result.file === undefined ? {} : { file: result.file }),\n    status: result.status,\n    ...(result.durationMs === undefined ? {} : { durationMs: result.durationMs }),\n    ...(result.tracePath === undefined ? {} : { tracePath: result.tracePath }),\n    artifacts: (result.artifacts ?? []).map(cloneArtifact).sort(sortArtifacts),\n    diagnostics: (result.diagnostics ?? []).map(cloneDiagnostic).sort(sortDiagnostics),\n  };\n}\n\nfunction artifactIdentity(artifact: TraceArtifact): string {\n  return `${artifact.path}\\0${artifact.kind}\\0${artifact.format}\\0${artifact.redactionProfile}`;\n}\n\nfunction dedupeArtifacts(artifacts: TraceArtifact[]): TraceArtifact[] {\n  const seen = new Set<string>();\n  const out: TraceArtifact[] = [];\n  for (const artifact of artifacts.sort(sortArtifacts)) {\n    const key = artifactIdentity(artifact);\n    if (seen.has(key)) continue;\n    seen.add(key);\n    out.push(artifact);\n  }\n  return out;\n}\n\n/** Experimental helper that creates a deterministic reporter artifact manifest. */\nexport function createTraceArtifactManifest(\n  options: CreateTraceArtifactManifestOptions,\n): TraceArtifactManifest {\n  const results = options.results.map(cloneResult).sort(sortResults);\n  const resultArtifacts = results.flatMap((result) => result.artifacts ?? []);\n  const artifacts = dedupeArtifacts([\n    ...resultArtifacts,\n    ...(options.artifacts ?? []).map(cloneArtifact),\n  ]);\n\n  return {\n    schemaVersion: TRACE_ARTIFACT_MANIFEST_SCHEMA_VERSION,\n    generatedAt: options.generatedAt,\n    framework: options.framework,\n    results,\n    artifacts,\n    diagnostics: (options.diagnostics ?? []).map(cloneDiagnostic).sort(sortDiagnostics),\n  };\n}\n\n/** Experimental helper that creates a safe, deterministic artifact path for a test. */\nexport function createReporterArtifactPath(\n  options: CreateReporterArtifactPathOptions,\n): ReporterArtifactPathResult {\n  const fileSlug = slugForPathLabel(options.file ?? \"manual\");\n  const testSlug = slugForPathLabel(`${options.name}-${options.testId}`);\n  const relativePath = path.posix.join(\n    \"tests\",\n    fileSlug,\n    testSlug,\n    `${options.kind}.${FORMAT_EXTENSIONS[options.format]}`,\n  );\n\n  return validateReporterArtifactPath({\n    outputDir: options.outputDir,\n    relativePath,\n  });\n}\n\n/** Experimental helper that validates an artifact path stays inside outputDir. */\nexport function validateReporterArtifactPath(\n  options: ValidateReporterArtifactPathOptions,\n): ReporterArtifactPathResult {\n  const outputDir = path.resolve(options.outputDir);\n  const diagnostics: TraceReporterDiagnostic[] = [];\n  const rawPath = options.relativePath;\n\n  if (rawPath.length === 0) {\n    diagnostics.push({\n      code: \"artifact_path_empty\",\n      severity: \"error\",\n      message: \"Reporter artifact path must not be empty.\",\n    });\n    return { ok: false, outputDir, diagnostics };\n  }\n\n  if (rawPath.includes(\"\\0\")) {\n    diagnostics.push({\n      code: \"invalid_artifact_path\",\n      severity: \"error\",\n      message: \"Reporter artifact path must not contain null bytes.\",\n      target: rawPath,\n    });\n    return { ok: false, outputDir, diagnostics };\n  }\n\n  if (path.isAbsolute(rawPath) || path.win32.isAbsolute(rawPath)) {\n    diagnostics.push({\n      code: \"artifact_path_absolute\",\n      severity: \"error\",\n      message: \"Reporter artifact path must be relative.\",\n      target: rawPath,\n    });\n    return { ok: false, outputDir, diagnostics };\n  }\n\n  const normalized = path.posix.normalize(rawPath.replace(/\\\\/g, \"/\"));\n  const segments = normalized.split(\"/\");\n  if (\n    normalized === \".\" ||\n    normalized.startsWith(\"../\") ||\n    segments.some((segment) => segment === \"..\")\n  ) {\n    diagnostics.push({\n      code: \"artifact_path_escape\",\n      severity: \"error\",\n      message: \"Reporter artifact path must stay under the output directory.\",\n      target: rawPath,\n    });\n    return { ok: false, outputDir, diagnostics };\n  }\n\n  const absolutePath = path.resolve(outputDir, normalized);\n  const relFromOutput = path.relative(outputDir, absolutePath);\n  if (\n    relFromOutput.length === 0 ||\n    relFromOutput.startsWith(\"..\") ||\n    path.isAbsolute(relFromOutput)\n  ) {\n    diagnostics.push({\n      code: \"artifact_path_escape\",\n      severity: \"error\",\n      message: \"Reporter artifact path resolved outside the output directory.\",\n      target: rawPath,\n    });\n    return { ok: false, outputDir, diagnostics };\n  }\n\n  return {\n    ok: true,\n    outputDir,\n    relativePath: normalized,\n    absolutePath,\n    diagnostics,\n  };\n}\n\n/** Experimental helper that converts an unknown reporter failure into a diagnostic. */\nexport function createReporterFailureDiagnostic(\n  error: unknown,\n  target?: string,\n): TraceReporterDiagnostic {\n  const message = error instanceof Error\n    ? error.message\n    : typeof error === \"string\"\n      ? error\n      : \"Unknown reporter failure.\";\n\n  return {\n    code: \"reporter_failure\",\n    severity: \"error\",\n    message,\n    ...(target === undefined ? {} : { target }),\n  };\n}\n\nfunction slugForPathLabel(value: string): string {\n  const base = path.basename(value)\n    .replace(/\\.(test|spec)\\.[^.]+$/, \"\")\n    .replace(/\\.[^.]+$/, \"\");\n  const slug = base\n    .toLowerCase()\n    .replace(/[^a-z0-9._-]+/g, \"-\")\n    .replace(/^[._-]+|[._-]+$/g, \"\")\n    .slice(0, 80);\n  return slug.length > 0 ? slug : \"artifact\";\n}\n\n/**\n * Standard Evidence v2 filenames for CI failure packages (same shape as `bundle`).\n * Success remains quiet by default — callers should emit these only on failure.\n */\nexport const EVIDENCE_CI_ARTIFACT_FILES = [\n  \"evidence.html\",\n  \"evidence.json\",\n  \"check-results.json\",\n  \"trace.jsonl\",\n] as const;\n\nexport type EvidenceCiArtifactFile = (typeof EVIDENCE_CI_ARTIFACT_FILES)[number];\n\n/**\n * Experimental helper: TraceArtifact entries for a standard Evidence v2 CI package.\n */\nexport function createEvidenceCiArtifacts(options: {\n  redactionProfile?: TraceArtifactRedactionProfile;\n  /** Optional subdirectory under the test artifact folder (POSIX). */\n  relativeDir?: string;\n}): TraceArtifact[] {\n  const profile = options.redactionProfile ?? \"share\";\n  const prefix =\n    options.relativeDir !== undefined && options.relativeDir.trim() !== \"\"\n      ? options.relativeDir.replace(/\\\\/g, \"/\").replace(/^\\/+|\\/+$/g, \"\")\n      : \"\";\n  const join = (name: string): string => (prefix === \"\" ? name : path.posix.join(prefix, name));\n\n  const formatFor = (name: EvidenceCiArtifactFile): TraceArtifactFormat => {\n    if (name.endsWith(\".html\")) return \"html\";\n    if (name.endsWith(\".jsonl\")) return \"jsonl\";\n    return \"json\";\n  };\n\n  return EVIDENCE_CI_ARTIFACT_FILES.map((name) => ({\n    kind: \"evidence\" as const,\n    path: join(name),\n    format: formatFor(name),\n    redactionProfile: profile,\n    title: `Evidence v2 ${name}`,\n  }));\n}\n","import { createHash } from \"node:crypto\";\n\nimport type {\n  CircuitEvidence,\n  CircuitResult,\n  CircuitRuleId,\n  CircuitRunResult,\n  CircuitTraceEvent,\n  RunCircuitsOptions,\n} from \"./types.js\";\n\nconst ALL_RULES: CircuitRuleId[] = [\n  \"circuit.same-tool-repetition\",\n  \"circuit.same-args-repetition\",\n  \"circuit.max-loop-iterations\",\n  \"circuit.max-retries\",\n  \"circuit.tool-timeout\",\n  \"circuit.runaway-llm-loop\",\n  \"circuit.excessive-branch-width\",\n];\n\nfunction closed(ruleId: string, message: string): CircuitResult {\n  return { ruleId, status: \"closed\", severity: \"info\", message, evidence: [] };\n}\n\nfunction open(\n  ruleId: string,\n  message: string,\n  evidence: CircuitEvidence[],\n  severity: \"error\" | \"warning\" = \"error\",\n): CircuitResult {\n  return {\n    ruleId,\n    status: severity === \"warning\" ? \"warn\" : \"open\",\n    severity,\n    message,\n    evidence,\n  };\n}\n\nfunction isToolEvent(event: CircuitTraceEvent): boolean {\n  const kind = typeof event.kind === \"string\" ? event.kind.toLowerCase() : \"\";\n  if (kind === \"tool\") return true;\n  if (\n    kind === \"llm\" ||\n    kind === \"run\" ||\n    kind === \"agent\" ||\n    kind === \"logic\" ||\n    kind === \"log\" ||\n    kind === \"outcome\" ||\n    kind === \"chain\" ||\n    kind === \"retriever\" ||\n    kind === \"decision\" ||\n    kind === \"result\" ||\n    kind === \"error\"\n  ) {\n    return false;\n  }\n  const name = event.name.toLowerCase();\n  return (\n    name.startsWith(\"tool:\") ||\n    name.startsWith(\"function:\") ||\n    name.includes(\".tool.\") ||\n    name.startsWith(\"mcp:\")\n  );\n}\n\nfunction isLlmEvent(event: CircuitTraceEvent): boolean {\n  const kind = typeof event.kind === \"string\" ? event.kind.toLowerCase() : \"\";\n  if (kind === \"llm\") return true;\n  if (\n    kind === \"tool\" ||\n    kind === \"run\" ||\n    kind === \"agent\" ||\n    kind === \"logic\" ||\n    kind === \"log\" ||\n    kind === \"outcome\" ||\n    kind === \"chain\" ||\n    kind === \"retriever\" ||\n    kind === \"decision\" ||\n    kind === \"result\" ||\n    kind === \"error\"\n  ) {\n    return false;\n  }\n  const name = event.name.toLowerCase();\n  return name.startsWith(\"llm:\") || name.includes(\".llm.\") || name.includes(\"generation\");\n}\n\nfunction toolLabel(event: CircuitTraceEvent): string {\n  const attrs = event.attributes ?? {};\n  const fromAttr = attrs.toolName ?? attrs.tool ?? attrs.function;\n  if (typeof fromAttr === \"string\" && fromAttr.length > 0) return fromAttr;\n  return event.name.replace(/^(tool:|function:|mcp:)/i, \"\");\n}\n\nfunction argsHash(toolName: string, args: unknown): string {\n  return createHash(\"sha256\").update(`${toolName}:${JSON.stringify(args ?? null)}`).digest(\"hex\").slice(0, 16);\n}\n\nfunction toolArgs(event: CircuitTraceEvent): unknown {\n  const attrs = event.attributes ?? {};\n  return attrs.arguments ?? attrs.args ?? attrs.input ?? attrs.parameters;\n}\n\nfunction durationMs(event: CircuitTraceEvent): number | undefined {\n  if (typeof event.durationMs === \"number\") return event.durationMs;\n  const attrs = event.attributes ?? {};\n  const fromAttr = attrs.durationMs ?? attrs.duration;\n  return typeof fromAttr === \"number\" ? fromAttr : undefined;\n}\n\nfunction attemptNumber(event: CircuitTraceEvent): number | undefined {\n  const attrs = event.attributes ?? {};\n  const value = attrs.attempt ?? attrs.retryAttempt ?? attrs.retryCount;\n  return typeof value === \"number\" ? value : undefined;\n}\n\nexport function evaluateSameToolRepetition(\n  events: readonly CircuitTraceEvent[],\n  maxRepeats: number,\n): CircuitResult {\n  const ruleId = \"circuit.same-tool-repetition\";\n  const counts = new Map<string, number>();\n  for (const event of events.filter(isToolEvent)) {\n    const label = toolLabel(event);\n    counts.set(label, (counts.get(label) ?? 0) + 1);\n  }\n  const evidence: CircuitEvidence[] = [];\n  for (const [toolName, count] of counts) {\n    if (count > maxRepeats) {\n      evidence.push({ ruleId, toolName, count, threshold: maxRepeats });\n    }\n  }\n  if (evidence.length === 0) {\n    return closed(ruleId, \"Tool repetition within threshold.\");\n  }\n  return open(ruleId, \"Same tool repeated beyond threshold.\", evidence);\n}\n\nexport function evaluateSameArgsRepetition(\n  events: readonly CircuitTraceEvent[],\n  maxRepeats: number,\n): CircuitResult {\n  const ruleId = \"circuit.same-args-repetition\";\n  const counts = new Map<string, { toolName: string; count: number }>();\n  for (const event of events.filter(isToolEvent)) {\n    const label = toolLabel(event);\n    const hash = argsHash(label, toolArgs(event));\n    const key = `${label}:${hash}`;\n    const current = counts.get(key) ?? { toolName: label, count: 0 };\n    current.count += 1;\n    counts.set(key, current);\n  }\n  const evidence: CircuitEvidence[] = [];\n  for (const entry of counts.values()) {\n    if (entry.count > maxRepeats) {\n      evidence.push({ ruleId, toolName: entry.toolName, count: entry.count, threshold: maxRepeats });\n    }\n  }\n  if (evidence.length === 0) {\n    return closed(ruleId, \"Tool argument repetition within threshold.\");\n  }\n  return open(ruleId, \"Same tool arguments repeated beyond threshold.\", evidence);\n}\n\nexport function evaluateMaxLoopIterations(\n  events: readonly CircuitTraceEvent[],\n  maxIterations: number,\n): CircuitResult {\n  const ruleId = \"circuit.max-loop-iterations\";\n  const iterationEvents = events.filter((event) => {\n    const attrs = event.attributes ?? {};\n    return typeof attrs.iteration === \"number\" || event.name.toLowerCase().includes(\"loop\");\n  });\n  const maxSeen = iterationEvents.reduce((max, event) => {\n    const attrs = event.attributes ?? {};\n    const iteration = typeof attrs.iteration === \"number\" ? attrs.iteration : max;\n    return Math.max(max, iteration);\n  }, iterationEvents.length);\n  if (maxSeen <= maxIterations) {\n    return closed(ruleId, \"Loop iterations within threshold.\");\n  }\n  return open(ruleId, \"Loop iterations exceeded threshold.\", [\n    { ruleId, count: maxSeen, threshold: maxIterations },\n  ]);\n}\n\nexport function evaluateMaxRetries(\n  events: readonly CircuitTraceEvent[],\n  maxRetries: number,\n): CircuitResult {\n  const ruleId = \"circuit.max-retries\";\n  const attempts = events.map(attemptNumber).filter((value): value is number => value !== undefined);\n  const maxAttempt = attempts.length > 0 ? Math.max(...attempts) : 0;\n  if (maxAttempt <= maxRetries) {\n    return closed(ruleId, \"Retry count within threshold.\");\n  }\n  return open(ruleId, \"Retry count exceeded threshold.\", [\n    { ruleId, count: maxAttempt, threshold: maxRetries },\n  ]);\n}\n\nexport function evaluateToolTimeout(\n  events: readonly CircuitTraceEvent[],\n  maxDurationMs: number,\n): CircuitResult {\n  const ruleId = \"circuit.tool-timeout\";\n  const evidence: CircuitEvidence[] = [];\n  for (const event of events.filter(isToolEvent)) {\n    const duration = durationMs(event);\n    if (duration !== undefined && duration > maxDurationMs) {\n      evidence.push({\n        ruleId,\n        toolName: toolLabel(event),\n        count: duration,\n        threshold: maxDurationMs,\n        eventId: event.eventId,\n      });\n    }\n  }\n  if (evidence.length === 0) {\n    return closed(ruleId, \"Tool durations within timeout.\");\n  }\n  return open(ruleId, \"Tool call exceeded configured timeout.\", evidence, \"warning\");\n}\n\nexport function evaluateRunawayLlmLoop(\n  events: readonly CircuitTraceEvent[],\n  maxLlmCalls: number,\n): CircuitResult {\n  const ruleId = \"circuit.runaway-llm-loop\";\n  const llmCount = events.filter(isLlmEvent).length;\n  const hasTerminal = events.some((event) => {\n    const status = (event.status ?? event.attributes?.status ?? \"\").toString().toLowerCase();\n    return status === \"ok\" || status === \"success\" || status === \"completed\";\n  });\n  if (llmCount <= maxLlmCalls || hasTerminal) {\n    return closed(ruleId, \"LLM call count within threshold or run completed.\");\n  }\n  return open(ruleId, \"Runaway LLM loop detected.\", [\n    { ruleId, count: llmCount, threshold: maxLlmCalls },\n  ]);\n}\n\nexport function evaluateExcessiveBranchWidth(\n  events: readonly CircuitTraceEvent[],\n  maxWidth: number,\n): CircuitResult {\n  const ruleId = \"circuit.excessive-branch-width\";\n  const children = new Map<string, number>();\n  for (const event of events) {\n    const parentId = event.parentId;\n    if (!parentId) continue;\n    children.set(parentId, (children.get(parentId) ?? 0) + 1);\n  }\n  const evidence: CircuitEvidence[] = [];\n  for (const [parentId, count] of children) {\n    if (count > maxWidth) {\n      evidence.push({ ruleId, path: parentId, count, threshold: maxWidth });\n    }\n  }\n  if (evidence.length === 0) {\n    return closed(ruleId, \"Branch width within threshold.\");\n  }\n  return open(ruleId, \"Excessive parallel branch width detected.\", evidence, \"warning\");\n}\n\nfunction runRule(\n  ruleId: CircuitRuleId,\n  events: readonly CircuitTraceEvent[],\n  options: RunCircuitsOptions,\n): CircuitResult | undefined {\n  switch (ruleId) {\n    case \"circuit.same-tool-repetition\":\n      if (options.sameToolRepetition === undefined) return undefined;\n      return evaluateSameToolRepetition(events, options.sameToolRepetition.maxRepeats);\n    case \"circuit.same-args-repetition\":\n      if (options.sameArgsRepetition === undefined) return undefined;\n      return evaluateSameArgsRepetition(events, options.sameArgsRepetition.maxRepeats);\n    case \"circuit.max-loop-iterations\":\n      if (options.maxLoopIterations === undefined) return undefined;\n      return evaluateMaxLoopIterations(events, options.maxLoopIterations.maxIterations);\n    case \"circuit.max-retries\":\n      if (options.maxRetries === undefined) return undefined;\n      return evaluateMaxRetries(events, options.maxRetries.maxRetries);\n    case \"circuit.tool-timeout\":\n      if (options.toolTimeout === undefined) return undefined;\n      return evaluateToolTimeout(events, options.toolTimeout.maxDurationMs);\n    case \"circuit.runaway-llm-loop\":\n      if (options.runawayLlmLoop === undefined) return undefined;\n      return evaluateRunawayLlmLoop(events, options.runawayLlmLoop.maxLlmCalls);\n    case \"circuit.excessive-branch-width\":\n      if (options.excessiveBranchWidth === undefined) return undefined;\n      return evaluateExcessiveBranchWidth(events, options.excessiveBranchWidth.maxWidth);\n    default:\n      return undefined;\n  }\n}\n\nexport function runCircuits(\n  events: readonly CircuitTraceEvent[],\n  options: RunCircuitsOptions = {},\n): CircuitRunResult {\n  const selected = options.rules ?? ALL_RULES;\n  const results: CircuitResult[] = [];\n  for (const ruleId of selected) {\n    const result = runRule(ruleId, events, options);\n    if (result) results.push(result);\n  }\n  const ok = !results.some((result) => result.status === \"open\" && result.severity === \"error\");\n  return { ok, results };\n}\n\nexport { ALL_RULES as DEFAULT_CIRCUIT_RULES };\n","import { redact, type RedactionFinding } from \"@agent-inspect/redact\";\n\nimport type {\n  BannedPhraseOptions,\n  GuardrailEvidence,\n  GuardrailResult,\n  OversizeOutputOptions,\n  PiiLeakOptions,\n  PromptInjectionOptions,\n  RequiredJsonShapeOptions,\n  StructuredOutputOptions,\n  UnsafeToolArgsOptions,\n} from \"./types.js\";\n\nconst DEFAULT_INJECTION_PATTERNS = [\n  \"ignore previous instructions\",\n  \"ignore all prior\",\n  \"disregard your instructions\",\n  \"system prompt\",\n  \"you are now\",\n  \"jailbreak\",\n] as const;\n\nfunction pass(ruleId: string, message: string): GuardrailResult {\n  return { ruleId, status: \"pass\", severity: \"info\", message, evidence: [] };\n}\n\nfunction fail(\n  ruleId: string,\n  message: string,\n  evidence: GuardrailEvidence[],\n  severity: \"error\" | \"warning\" = \"error\",\n): GuardrailResult {\n  return { ruleId, status: severity === \"warning\" ? \"warn\" : \"fail\", severity, message, evidence };\n}\n\nfunction boundedPreview(value: string, max = 80): string {\n  if (value.length <= max) return value;\n  return `${value.slice(0, max - 3)}...`;\n}\n\nexport function evaluateBannedPhrase(\n  text: string,\n  options: BannedPhraseOptions,\n): GuardrailResult {\n  const ruleId = \"guardrail.banned-phrase\";\n  const haystack = options.caseInsensitive !== false ? text.toLowerCase() : text;\n  const evidence: GuardrailEvidence[] = [];\n  for (const phrase of options.phrases) {\n    const needle = options.caseInsensitive !== false ? phrase.toLowerCase() : phrase;\n    if (needle.length > 0 && haystack.includes(needle)) {\n      evidence.push({ ruleId, match: phrase, preview: boundedPreview(text) });\n    }\n  }\n  if (evidence.length === 0) {\n    return pass(ruleId, \"No banned phrases matched.\");\n  }\n  return fail(ruleId, `Matched ${evidence.length} banned phrase(s).`, evidence);\n}\n\nconst SEVERITY_RANK = { info: 0, warning: 1, error: 2 } as const;\n\nexport function evaluatePiiLeak(value: unknown, options: PiiLeakOptions = {}): GuardrailResult {\n  const ruleId = \"guardrail.pii-leak\";\n  const minSeverity = options.minSeverity ?? \"warning\";\n  const result = redact(value, { profile: options.profile ?? \"share\", collectFindings: true });\n  const findings = result.findings.filter(\n    (finding: RedactionFinding) => SEVERITY_RANK[finding.severity] >= SEVERITY_RANK[minSeverity],\n  );\n  if (findings.length === 0) {\n    return pass(ruleId, \"No PII-style redaction findings.\");\n  }\n  const evidence: GuardrailEvidence[] = findings.map((finding) => ({\n    ruleId,\n    path: finding.path,\n    detector: finding.detector,\n    preview: finding.preview,\n  }));\n  return fail(ruleId, `Detected ${findings.length} PII-style finding(s).`, evidence);\n}\n\nfunction measureDepth(value: unknown): number {\n  if (value === null || typeof value !== \"object\") return 0;\n  if (Array.isArray(value)) {\n    return 1 + Math.max(0, ...value.map((item) => measureDepth(item)));\n  }\n  const depths = Object.values(value as Record<string, unknown>).map((item) => measureDepth(item));\n  return 1 + (depths.length === 0 ? 0 : Math.max(...depths));\n}\n\nfunction maxStringLength(value: unknown): number {\n  if (typeof value === \"string\") return value.length;\n  if (value === null || typeof value !== \"object\") return 0;\n  if (Array.isArray(value)) {\n    return Math.max(0, ...value.map((item) => maxStringLength(item)));\n  }\n  return Math.max(0, ...Object.values(value as Record<string, unknown>).map((item) => maxStringLength(item)));\n}\n\nexport function evaluateUnsafeToolArgs(\n  toolName: string,\n  toolArgs: unknown,\n  options: UnsafeToolArgsOptions = {},\n): GuardrailResult {\n  const ruleId = \"guardrail.unsafe-tool-args\";\n  const blocked = new Set((options.blockedTools ?? []).map((name) => name.toLowerCase()));\n  const evidence: GuardrailEvidence[] = [];\n  if (blocked.has(toolName.toLowerCase())) {\n    evidence.push({ ruleId, preview: toolName, match: toolName });\n  }\n  const maxDepth = options.maxDepth ?? 12;\n  const depth = measureDepth(toolArgs);\n  if (depth > maxDepth) {\n    evidence.push({ ruleId, path: \"args\", preview: `depth=${depth}` });\n  }\n  const maxLen = options.maxStringLength ?? 16_384;\n  const longest = maxStringLength(toolArgs);\n  if (longest > maxLen) {\n    evidence.push({ ruleId, path: \"args\", preview: `maxStringLength=${longest}` });\n  }\n  if (evidence.length === 0) {\n    return pass(ruleId, \"Tool arguments within configured bounds.\");\n  }\n  return fail(ruleId, \"Unsafe or oversized tool arguments detected.\", evidence);\n}\n\nexport function evaluatePromptInjection(\n  text: string,\n  options: PromptInjectionOptions = {},\n): GuardrailResult {\n  const ruleId = \"guardrail.prompt-injection\";\n  const patterns = options.patterns ?? DEFAULT_INJECTION_PATTERNS;\n  const haystack = text.toLowerCase();\n  const evidence: GuardrailEvidence[] = [];\n  for (const pattern of patterns) {\n    const needle = pattern.toLowerCase();\n    if (needle.length > 0 && haystack.includes(needle)) {\n      evidence.push({ ruleId, match: pattern, preview: boundedPreview(text) });\n    }\n  }\n  if (evidence.length === 0) {\n    return pass(ruleId, \"No prompt-injection patterns matched.\");\n  }\n  return fail(ruleId, `Matched ${evidence.length} injection pattern(s).`, evidence, \"warning\");\n}\n\nfunction validateSchemaField(\n  value: unknown,\n  field: StructuredOutputOptions[\"schema\"][string],\n  path: string,\n  evidence: GuardrailEvidence[],\n): void {\n  const ruleId = \"guardrail.structured-output\";\n  if (field.type) {\n    const actual =\n      value === null\n        ? \"null\"\n        : Array.isArray(value)\n          ? \"array\"\n          : typeof value;\n    if (actual !== field.type) {\n      evidence.push({ ruleId, path, preview: `expected ${field.type}, got ${actual}` });\n      return;\n    }\n  }\n  if (field.enum && !field.enum.some((item) => Object.is(item, value))) {\n    evidence.push({ ruleId, path, preview: \"value not in enum\" });\n  }\n  if (field.type === \"object\" && field.required && value && typeof value === \"object\" && !Array.isArray(value)) {\n    const record = value as Record<string, unknown>;\n    for (const key of field.required) {\n      if (!(key in record)) {\n        evidence.push({ ruleId, path: `${path}.${key}`, preview: \"missing required key\" });\n      }\n    }\n  }\n}\n\nexport function evaluateStructuredOutput(\n  value: unknown,\n  options: StructuredOutputOptions,\n): GuardrailResult {\n  const ruleId = \"guardrail.structured-output\";\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return fail(ruleId, \"Structured output must be an object.\", [\n      { ruleId, preview: typeof value },\n    ]);\n  }\n  const record = value as Record<string, unknown>;\n  const evidence: GuardrailEvidence[] = [];\n  for (const [key, field] of Object.entries(options.schema)) {\n    validateSchemaField(record[key], field, key, evidence);\n  }\n  if (evidence.length === 0) {\n    return pass(ruleId, \"Structured output matches schema subset.\");\n  }\n  return fail(ruleId, \"Structured output schema violation.\", evidence);\n}\n\nexport function evaluateOversizeOutput(\n  value: unknown,\n  options: OversizeOutputOptions = {},\n): GuardrailResult {\n  const ruleId = \"guardrail.oversize-output\";\n  const text = typeof value === \"string\" ? value : JSON.stringify(value);\n  const maxLength = options.maxLength ?? options.maxSerializedLength ?? 32_768;\n  if (text.length <= maxLength) {\n    return pass(ruleId, \"Output within size limits.\");\n  }\n  return fail(ruleId, `Output exceeds max length (${text.length} > ${maxLength}).`, [\n    { ruleId, preview: `length=${text.length}` },\n  ]);\n}\n\nexport function evaluateRequiredJsonShape(\n  value: unknown,\n  options: RequiredJsonShapeOptions,\n): GuardrailResult {\n  const ruleId = \"guardrail.required-json-shape\";\n  let parsed: unknown = value;\n  if (typeof value === \"string\") {\n    try {\n      parsed = JSON.parse(value);\n    } catch {\n      return fail(ruleId, \"Value is not valid JSON.\", [{ ruleId, preview: boundedPreview(value) }]);\n    }\n  }\n  if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n    return fail(ruleId, \"JSON value must be an object.\", [{ ruleId, preview: typeof parsed }]);\n  }\n  const record = parsed as Record<string, unknown>;\n  const evidence: GuardrailEvidence[] = [];\n  for (const key of options.requiredKeys) {\n    if (!(key in record)) {\n      evidence.push({ ruleId, path: key, preview: \"missing required key\" });\n    }\n  }\n  if (evidence.length === 0) {\n    return pass(ruleId, \"Required JSON keys present.\");\n  }\n  return fail(ruleId, \"Missing required JSON keys.\", evidence);\n}\n","import {\n  evaluateBannedPhrase,\n  evaluateOversizeOutput,\n  evaluatePiiLeak,\n  evaluatePromptInjection,\n  evaluateRequiredJsonShape,\n  evaluateStructuredOutput,\n  evaluateUnsafeToolArgs,\n} from \"./rules.js\";\nimport type {\n  GuardrailInput,\n  GuardrailResult,\n  GuardrailRuleId,\n  GuardrailRunResult,\n  RunGuardrailsOptions,\n} from \"./types.js\";\n\nconst ALL_RULES: GuardrailRuleId[] = [\n  \"guardrail.banned-phrase\",\n  \"guardrail.pii-leak\",\n  \"guardrail.unsafe-tool-args\",\n  \"guardrail.prompt-injection\",\n  \"guardrail.structured-output\",\n  \"guardrail.oversize-output\",\n  \"guardrail.required-json-shape\",\n];\n\nfunction isErrorFailure(result: GuardrailResult): boolean {\n  return result.status === \"fail\" && result.severity === \"error\";\n}\n\nfunction runRule(ruleId: GuardrailRuleId, input: GuardrailInput, options: RunGuardrailsOptions): GuardrailResult | undefined {\n  switch (ruleId) {\n    case \"guardrail.banned-phrase\": {\n      if (!options.bannedPhrase || input.text === undefined) return undefined;\n      return evaluateBannedPhrase(input.text, options.bannedPhrase);\n    }\n    case \"guardrail.pii-leak\": {\n      if (input.value === undefined && input.text === undefined) return undefined;\n      return evaluatePiiLeak(input.value ?? input.text, options.piiLeak);\n    }\n    case \"guardrail.unsafe-tool-args\": {\n      if (!input.toolName) return undefined;\n      return evaluateUnsafeToolArgs(input.toolName, input.toolArgs ?? {}, options.unsafeToolArgs);\n    }\n    case \"guardrail.prompt-injection\": {\n      if (input.text === undefined) return undefined;\n      return evaluatePromptInjection(input.text, options.promptInjection);\n    }\n    case \"guardrail.structured-output\": {\n      if (!options.structuredOutput || input.value === undefined) return undefined;\n      return evaluateStructuredOutput(input.value, options.structuredOutput);\n    }\n    case \"guardrail.oversize-output\": {\n      if (input.value === undefined && input.text === undefined) return undefined;\n      return evaluateOversizeOutput(input.value ?? input.text, options.oversizeOutput);\n    }\n    case \"guardrail.required-json-shape\": {\n      if (!options.requiredJsonShape || (input.value === undefined && input.text === undefined)) return undefined;\n      return evaluateRequiredJsonShape(input.value ?? input.text!, options.requiredJsonShape);\n    }\n    default:\n      return undefined;\n  }\n}\n\nexport function runGuardrails(input: GuardrailInput, options: RunGuardrailsOptions = {}): GuardrailRunResult {\n  const selected = options.rules ?? ALL_RULES;\n  const results: GuardrailResult[] = [];\n  for (const ruleId of selected) {\n    const result = runRule(ruleId, input, options);\n    if (result) results.push(result);\n  }\n  const ok = !results.some(isErrorFailure);\n  return { ok, results };\n}\n\nexport { ALL_RULES as DEFAULT_GUARDRAIL_RULES };\n","import {\n  DEFAULT_CIRCUIT_RULES,\n  runCircuits,\n  type CircuitResult,\n  type CircuitRuleId,\n  type CircuitTraceEvent,\n  type RunCircuitsOptions,\n} from \"@agent-inspect/circuit\";\nimport {\n  DEFAULT_GUARDRAIL_RULES,\n  runGuardrails,\n  type GuardrailResult,\n  type GuardrailRuleId,\n  type RunGuardrailsOptions,\n} from \"@agent-inspect/guardrails\";\nimport {\n  projectLogicalEvents,\n  type TraceCheckEvidence,\n  type TraceCheckFinding,\n  type TraceCheckResult,\n  type TraceCheckRuleExecution,\n  type TraceCheckRuleExecutionStatus,\n  type TraceCheckSeverity,\n} from \"@agent-inspect/core/checks\";\nimport type { TraceReadResult } from \"@agent-inspect/core/readers\";\n\ntype PersistedEvent = TraceReadResult[\"events\"][number];\n\nconst GUARDRAIL_ALIASES: Record<string, GuardrailRuleId> = {\n  \"banned-phrase\": \"guardrail.banned-phrase\",\n  \"pii-leak\": \"guardrail.pii-leak\",\n  \"unsafe-tool-args\": \"guardrail.unsafe-tool-args\",\n  \"prompt-injection\": \"guardrail.prompt-injection\",\n  \"structured-output\": \"guardrail.structured-output\",\n  \"oversize-output\": \"guardrail.oversize-output\",\n  \"required-json-shape\": \"guardrail.required-json-shape\",\n};\n\nconst CIRCUIT_ALIASES: Record<string, CircuitRuleId> = {\n  \"same-tool-repetition\": \"circuit.same-tool-repetition\",\n  \"same-args-repetition\": \"circuit.same-args-repetition\",\n  \"max-loop-iterations\": \"circuit.max-loop-iterations\",\n  \"max-retries\": \"circuit.max-retries\",\n  \"tool-timeout\": \"circuit.tool-timeout\",\n  \"runaway-llm-loop\": \"circuit.runaway-llm-loop\",\n  \"excessive-branch-width\": \"circuit.excessive-branch-width\",\n};\n\nconst KNOWN_CIRCUIT_RULES = new Set<string>([\n  ...Object.values(CIRCUIT_ALIASES),\n  ...DEFAULT_CIRCUIT_RULES,\n]);\n\nconst KNOWN_GUARDRAIL_RULES = new Set<string>([\n  ...Object.values(GUARDRAIL_ALIASES),\n  ...DEFAULT_GUARDRAIL_RULES,\n]);\n\nexport function parseGuardrailRules(values: readonly string[] | undefined): GuardrailRuleId[] | undefined {\n  if (!values?.length) return undefined;\n  return values.map((value) => {\n    const rule = GUARDRAIL_ALIASES[value] ?? (value as GuardrailRuleId);\n    return rule;\n  });\n}\n\nexport function parseCircuitRules(values: readonly string[] | undefined): CircuitRuleId[] | undefined {\n  if (!values?.length) return undefined;\n  return values.map((value) => {\n    const rule = CIRCUIT_ALIASES[value] ?? (value as CircuitRuleId);\n    return rule;\n  });\n}\n\nfunction toSeverity(severity: \"error\" | \"warning\" | \"info\"): TraceCheckSeverity {\n  return severity;\n}\n\nfunction guardrailFinding(result: GuardrailResult): TraceCheckFinding {\n  return {\n    ruleId: result.ruleId,\n    severity: toSeverity(result.severity),\n    status: result.status === \"pass\" ? \"pass\" : result.status === \"warn\" ? \"warning\" : \"fail\",\n    message: result.message,\n    evidence: result.evidence.map(\n      (item): TraceCheckEvidence => ({\n        path: item.preview ? `${item.path ?? \"value\"} (${item.preview})` : item.path,\n      }),\n    ),\n  };\n}\n\nfunction circuitFinding(result: CircuitResult): TraceCheckFinding {\n  return {\n    ruleId: result.ruleId,\n    severity: toSeverity(result.severity),\n    status: result.status === \"closed\" ? \"pass\" : result.status === \"warn\" ? \"warning\" : \"fail\",\n    message: result.message,\n    evidence: result.evidence.map(\n      (item): TraceCheckEvidence => ({\n        runId: item.runId,\n        eventId: item.eventId,\n        path: item.path,\n        name: item.toolName,\n      }),\n    ),\n    actual: result.evidence[0]?.count,\n    expected: result.evidence[0]?.threshold,\n  };\n}\n\nfunction eventToCircuit(event: PersistedEvent): CircuitTraceEvent {\n  return {\n    eventId: event.eventId,\n    runId: event.runId,\n    name: event.name,\n    kind: event.kind,\n    parentId: event.parentId,\n    startedAt: event.startedAt,\n    endedAt: event.endedAt,\n    durationMs: event.durationMs,\n    attributes: event.attributes,\n    status: event.status,\n  };\n}\n\nfunction scopedEvents(\n  read: TraceReadResult,\n  runId: string | undefined,\n): PersistedEvent[] {\n  if (runId === undefined) return [...read.events];\n  return read.events.filter((event) => event.runId === runId);\n}\n\nfunction collectGuardrailInputs(events: readonly PersistedEvent[]): Array<{\n  text?: string;\n  value?: unknown;\n  toolName?: string;\n  toolArgs?: unknown;\n}> {\n  const inputs: Array<{\n    text?: string;\n    value?: unknown;\n    toolName?: string;\n    toolArgs?: unknown;\n  }> = [];\n  for (const event of events) {\n    const attrs = event.attributes ?? {};\n    for (const key of [\"output\", \"answer\", \"text\", \"content\", \"message\"]) {\n      const value = attrs[key];\n      if (typeof value === \"string\") inputs.push({ text: value });\n      else if (value !== undefined) inputs.push({ value });\n    }\n    const kind = typeof event.kind === \"string\" ? event.kind.toLowerCase() : \"\";\n    if (kind === \"tool\" || event.name.startsWith(\"tool:\")) {\n      inputs.push({\n        toolName: String(attrs.toolName ?? attrs.tool ?? event.name),\n        toolArgs: attrs.arguments ?? attrs.args ?? attrs.input,\n      });\n    }\n  }\n  return inputs;\n}\n\nfunction classifyExtensionExecution(\n  findings: readonly TraceCheckFinding[],\n  errored: boolean,\n): TraceCheckRuleExecutionStatus {\n  if (errored) return \"error\";\n  if (findings.some((finding) => finding.status === \"fail\")) return \"fail\";\n  if (findings.some((finding) => finding.status === \"warning\")) return \"warning\";\n  return \"pass\";\n}\n\n/**\n * One selected guardrail/circuit rule → one `ruleExecutions` entry.\n * Finding counts may exceed 1 when a guardrail rule runs over multiple inputs;\n * `rulesEvaluated` still counts the selected rule once.\n */\nfunction extensionExecution(\n  ruleId: string,\n  findings: readonly TraceCheckFinding[],\n  options: { runId?: string; errored?: boolean },\n): TraceCheckRuleExecution {\n  return {\n    ruleId,\n    category: \"safety\",\n    status: classifyExtensionExecution(findings, options.errored === true),\n    findingCount: findings.length,\n    ...(options.runId !== undefined ? { runId: options.runId } : {}),\n  };\n}\n\nconst DEFAULT_GUARDRAIL_OPTIONS: RunGuardrailsOptions = {\n  bannedPhrase: { phrases: [\"delete all data\", \"ignore all instructions\"] },\n  promptInjection: {},\n  piiLeak: { profile: \"share\" },\n};\n\nconst DEFAULT_CIRCUIT_OPTIONS: RunCircuitsOptions = {\n  sameToolRepetition: { maxRepeats: 3 },\n  sameArgsRepetition: { maxRepeats: 2 },\n  maxLoopIterations: { maxIterations: 20 },\n  maxRetries: { maxRetries: 3 },\n  toolTimeout: { maxDurationMs: 60_000 },\n  runawayLlmLoop: { maxLlmCalls: 12 },\n  excessiveBranchWidth: { maxWidth: 8 },\n};\n\nexport function mergeSafetyExtensions(\n  result: TraceCheckResult,\n  read: TraceReadResult,\n  options: {\n    guardrails?: readonly string[];\n    circuits?: readonly string[];\n    /** When set, only this run's events feed extensions (matches --run / session per-run). */\n    runId?: string;\n  },\n): TraceCheckResult {\n  const findings = [...result.findings];\n  const ruleExecutions = [...(result.ruleExecutions ?? [])];\n  let failed = result.summary.failed;\n  let warnings = result.summary.warnings;\n  let passed = result.summary.passed;\n  let errors = result.summary.errors;\n\n  const events = scopedEvents(read, options.runId);\n  const runId = options.runId;\n\n  const guardrailRules = parseGuardrailRules(options.guardrails);\n  if (guardrailRules) {\n    const inputs = collectGuardrailInputs(events);\n    for (const ruleId of guardrailRules) {\n      if (!KNOWN_GUARDRAIL_RULES.has(ruleId)) {\n        const finding: TraceCheckFinding = {\n          ruleId,\n          severity: \"error\",\n          status: \"fail\",\n          message: `Unknown guardrail rule: ${ruleId}.`,\n          evidence: [],\n        };\n        findings.push(finding);\n        failed += 1;\n        ruleExecutions.push(extensionExecution(ruleId, [finding], { runId, errored: true }));\n        errors += 1;\n        continue;\n      }\n\n      const ruleFindings: TraceCheckFinding[] = [];\n      // No applicable input: still record that the selected rule was evaluated.\n      if (inputs.length === 0) {\n        ruleExecutions.push(extensionExecution(ruleId, [], { runId }));\n        continue;\n      }\n\n      for (const input of inputs) {\n        const run = runGuardrails(input, {\n          ...DEFAULT_GUARDRAIL_OPTIONS,\n          rules: [ruleId],\n        });\n        for (const item of run.results) {\n          const finding = guardrailFinding(item);\n          ruleFindings.push(finding);\n          findings.push(finding);\n          if (finding.status === \"fail\") failed += 1;\n          else if (finding.status === \"warning\") warnings += 1;\n          else passed += 1;\n        }\n      }\n      ruleExecutions.push(extensionExecution(ruleId, ruleFindings, { runId }));\n    }\n  }\n\n  const circuitRules = parseCircuitRules(options.circuits);\n  if (circuitRules) {\n    const projected = projectLogicalEvents(events);\n    const circuitEvents = projected.logicalEvents.map(eventToCircuit);\n\n    for (const ruleId of circuitRules) {\n      if (!KNOWN_CIRCUIT_RULES.has(ruleId)) {\n        const finding: TraceCheckFinding = {\n          ruleId,\n          severity: \"error\",\n          status: \"fail\",\n          message: `Unknown circuit rule: ${ruleId}.`,\n          evidence: [],\n        };\n        findings.push(finding);\n        failed += 1;\n        errors += 1;\n        ruleExecutions.push(extensionExecution(ruleId, [finding], { runId, errored: true }));\n        continue;\n      }\n\n      const circuitRun = runCircuits(circuitEvents, {\n        ...DEFAULT_CIRCUIT_OPTIONS,\n        rules: [ruleId],\n      });\n\n      if (circuitRun.results.length === 0) {\n        // Known id but evaluator returned nothing — treat as evaluation error, not green.\n        const finding: TraceCheckFinding = {\n          ruleId,\n          severity: \"error\",\n          status: \"fail\",\n          message: `Circuit rule ${ruleId} produced no evaluation result.`,\n          evidence: [],\n        };\n        findings.push(finding);\n        failed += 1;\n        errors += 1;\n        ruleExecutions.push(extensionExecution(ruleId, [finding], { runId, errored: true }));\n        continue;\n      }\n\n      const ruleFindings: TraceCheckFinding[] = [];\n      for (const item of circuitRun.results) {\n        const finding = circuitFinding(item);\n        ruleFindings.push(finding);\n        findings.push(finding);\n        if (finding.status === \"fail\") failed += 1;\n        else if (finding.status === \"warning\") warnings += 1;\n        else passed += 1;\n      }\n      ruleExecutions.push(extensionExecution(ruleId, ruleFindings, { runId }));\n    }\n  }\n\n  const status =\n    result.status === \"error\" || errors > 0\n      ? \"error\"\n      : failed > 0\n        ? \"fail\"\n        : result.status;\n  return {\n    ...result,\n    ok: status === \"pass\",\n    status,\n    summary: {\n      passed,\n      failed,\n      warnings,\n      errors,\n      rulesEvaluated: ruleExecutions.length,\n    },\n    findings,\n    ruleExecutions,\n  };\n}\n","import { createServer, type Server, type ServerResponse } from \"node:http\";\nimport path from \"node:path\";\n\nimport {\n  TraceDirectory,\n  buildRunTimeline,\n  buildSessionIndex,\n  loadSessionRunRecords,\n  loadTraceMetadataList,\n  resolveTraceDir,\n} from \"agent-inspect/advanced\";\nimport { createRunStatusRule, runTraceChecks } from \"agent-inspect/checks\";\nimport { persistedInspectEventsToTraceEvents } from \"agent-inspect/persisted\";\nimport { openTrace } from \"agent-inspect/readers\";\n\nimport { viewerIndexHtml } from \"./html.js\";\nimport { loadSuiteViewerData } from \"./suite-data.js\";\nimport type { ViewerServerInfo, ViewerServerOptions } from \"./types.js\";\nimport { loadWorkspaceViewerData } from \"./workspace-data.js\";\n\nconst DEFAULT_HOST = \"127.0.0.1\";\nconst DEFAULT_PORT = 7337;\nconst DEFAULT_MAX_EVENTS = 500;\n\nfunction sendJson(res: ServerResponse, status: number, body: unknown): void {\n  const payload = JSON.stringify(body);\n  res.writeHead(status, {\n    \"content-type\": \"application/json; charset=utf-8\",\n    \"cache-control\": \"no-store\",\n  });\n  res.end(payload);\n}\n\nfunction notFound(res: ServerResponse, message: string): void {\n  sendJson(res, 404, { error: message });\n}\n\nfunction badRequest(res: ServerResponse, message: string): void {\n  sendJson(res, 400, { error: message });\n}\n\nfunction decodeId(segment: string | undefined): string {\n  if (!segment) return \"\";\n  try {\n    return decodeURIComponent(segment);\n  } catch {\n    return segment;\n  }\n}\n\nfunction boundedEvents<T>(events: readonly T[], maxEvents: number): T[] {\n  if (events.length <= maxEvents) return [...events];\n  return events.slice(0, maxEvents);\n}\n\nexport function createViewerServer(options: ViewerServerOptions = {}): Server {\n  const traceDir = resolveTraceDir({ dir: options.traceDir });\n  const host = options.host ?? DEFAULT_HOST;\n  const port = options.port ?? DEFAULT_PORT;\n  const maxEvents = options.maxEvents ?? DEFAULT_MAX_EVENTS;\n  const mode = options.mode ?? \"traces\";\n\n  if (host === \"0.0.0.0\") {\n    console.warn(\n      \"[AgentInspect viewer] Binding to 0.0.0.0 exposes traces on the network. Use 127.0.0.1 unless you accept that risk.\",\n    );\n  }\n\n  const server = createServer(async (req, res) => {\n    try {\n      if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n        return badRequest(res, \"Only GET is supported.\");\n      }\n\n      const url = new URL(req.url ?? \"/\", `http://${host}:${port}`);\n      const pathname = url.pathname;\n\n      if (pathname === \"/\" || pathname === \"/index.html\") {\n        res.writeHead(200, { \"content-type\": \"text/html; charset=utf-8\" });\n        res.end(viewerIndexHtml);\n        return;\n      }\n\n      if (pathname === \"/api/health\") {\n        return sendJson(res, 200, {\n          ok: true,\n          readOnly: true,\n          mode,\n          traceDir: path.resolve(traceDir),\n        });\n      }\n\n      if (pathname === \"/api/suite\" && mode === \"suite\") {\n        const data = await loadSuiteViewerData({\n          suiteConfigPath: options.suiteConfigPath,\n          cwd: options.cwd,\n        });\n        return sendJson(res, 200, data);\n      }\n\n      if (pathname === \"/api/workspace\" && mode === \"workspace\") {\n        const data = await loadWorkspaceViewerData({ cwd: options.cwd });\n        return sendJson(res, 200, data);\n      }\n\n      const td = new TraceDirectory({ dir: traceDir });\n\n      if (pathname === \"/api/traces\") {\n        const files = await td.list();\n        const metas = await loadTraceMetadataList(traceDir, files, (fileName) =>\n          td.getPath(fileName),\n        );\n        return sendJson(\n          res,\n          200,\n          metas.map((meta) => ({\n            runId: meta.runId,\n            name: meta.name,\n            status: meta.status,\n            file: path.basename(meta.filePath),\n            startedAt: meta.startedAt,\n            durationMs: meta.durationMs,\n          })),\n        );\n      }\n\n      if (pathname === \"/api/sessions\") {\n        const files = await td.list();\n        const metas = await loadTraceMetadataList(traceDir, files, (fileName) =>\n          td.getPath(fileName),\n        );\n        const runs = await loadSessionRunRecords(metas);\n        const index = buildSessionIndex(runs, {\n          correlateByGroupId: url.searchParams.get(\"correlateGroup\") === \"true\",\n        });\n        return sendJson(res, 200, index);\n      }\n\n      const sessionMatch = pathname.match(/^\\/api\\/session\\/([^/]+)$/);\n      if (sessionMatch) {\n        const sessionId = decodeId(sessionMatch[1]);\n        const files = await td.list();\n        const metas = await loadTraceMetadataList(traceDir, files, (fileName) =>\n          td.getPath(fileName),\n        );\n        const runs = await loadSessionRunRecords(metas);\n        const index = buildSessionIndex(runs, {\n          correlateByGroupId: url.searchParams.get(\"correlateGroup\") === \"true\",\n        });\n        const session = index.sessions.find((item) => item.sessionId === sessionId);\n        if (!session) return notFound(res, `Session not found: ${sessionId}`);\n        return sendJson(res, 200, session);\n      }\n\n      const traceMatch = pathname.match(/^\\/api\\/trace\\/([^/]+)$/);\n      if (traceMatch) {\n        const runId = decodeId(traceMatch[1]);\n        const files = await td.list();\n        const metas = await loadTraceMetadataList(traceDir, files, (fileName) =>\n          td.getPath(fileName),\n        );\n        const meta = metas.find((item) => item.runId === runId);\n        if (!meta) return notFound(res, `Run not found: ${runId}`);\n        const read = await openTrace({ type: \"file\", path: meta.filePath });\n        const run = read.runs.find((item) => item.runId === runId) ?? read.runs[0];\n        return sendJson(res, 200, {\n          runId,\n          format: read.format,\n          run,\n          events: boundedEvents(read.events, maxEvents),\n          warnings: read.warnings,\n          truncated: read.events.length > maxEvents,\n        });\n      }\n\n      const timelineMatch = pathname.match(/^\\/api\\/trace\\/([^/]+)\\/timeline$/);\n      if (timelineMatch) {\n        const runId = decodeId(timelineMatch[1]);\n        const files = await td.list();\n        const metas = await loadTraceMetadataList(traceDir, files, (fileName) =>\n          td.getPath(fileName),\n        );\n        const meta = metas.find((item) => item.runId === runId);\n        if (!meta) return notFound(res, `Run not found: ${runId}`);\n        const read = await openTrace({ type: \"file\", path: meta.filePath });\n        const legacyEvents = persistedInspectEventsToTraceEvents(\n          boundedEvents(read.events, maxEvents),\n        );\n        const timeline = buildRunTimeline(legacyEvents, { focus: \"all\" });\n        return sendJson(res, 200, { runId, timeline });\n      }\n\n      const checkMatch = pathname.match(/^\\/api\\/trace\\/([^/]+)\\/check$/);\n      if (checkMatch) {\n        const runId = decodeId(checkMatch[1]);\n        const files = await td.list();\n        const metas = await loadTraceMetadataList(traceDir, files, (fileName) =>\n          td.getPath(fileName),\n        );\n        const meta = metas.find((item) => item.runId === runId);\n        if (!meta) return notFound(res, `Run not found: ${runId}`);\n        const read = await openTrace({ type: \"file\", path: meta.filePath });\n        const result = runTraceChecks(\n          { read },\n          { rules: [createRunStatusRule()], select: [\"run.status\"], runId },\n        );\n        return sendJson(res, 200, result);\n      }\n\n      return notFound(res, `Unknown route: ${pathname}`);\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      sendJson(res, 500, { error: message });\n    }\n  });\n\n  return server;\n}\n\nexport function startViewerServer(\n  options: ViewerServerOptions = {},\n): Promise<ViewerServerInfo> {\n  const host = options.host ?? DEFAULT_HOST;\n  const port = options.port ?? DEFAULT_PORT;\n  const traceDir = resolveTraceDir({ dir: options.traceDir });\n  const mode = options.mode ?? \"traces\";\n  const server = createViewerServer(options);\n\n  return new Promise((resolve, reject) => {\n    server.once(\"error\", reject);\n    server.listen(port, host, () => {\n      const address = server.address();\n      const resolvedPort =\n        typeof address === \"object\" && address ? address.port : port;\n      const modeQuery =\n        mode === \"traces\" ? \"\" : `?mode=${encodeURIComponent(mode)}`;\n      resolve({\n        host,\n        port: resolvedPort,\n        traceDir: path.resolve(traceDir),\n        url: `http://${host}:${resolvedPort}/${modeQuery}`,\n        mode,\n      });\n    });\n  });\n}\n","export const viewerIndexHtml = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\" />\n  <title>AgentInspect Viewer</title>\n  <style>\n    body { font-family: system-ui, sans-serif; margin: 1.5rem; line-height: 1.4; }\n    h1 { font-size: 1.25rem; }\n    pre { background: #f4f4f5; padding: 1rem; overflow: auto; max-height: 50vh; }\n    a { color: #0b57d0; }\n    .muted { color: #666; }\n    table { border-collapse: collapse; width: 100%; margin: 1rem 0; }\n    th, td { border: 1px solid #ddd; padding: 0.5rem; text-align: left; vertical-align: top; }\n    th { background: #f6f6f6; }\n    .fail { color: #b42318; font-weight: 600; }\n    .pass { color: #027a48; font-weight: 600; }\n    section { margin: 1.5rem 0; }\n  </style>\n</head>\n<body>\n  <h1>AgentInspect local viewer</h1>\n  <p class=\"muted\">Read-only. JSONL on disk remains canonical.</p>\n  <p id=\"nav\"></p>\n  <div id=\"content\"><pre id=\"out\">Loading…</pre></div>\n  <script>\n    const params = new URLSearchParams(location.search);\n    const mode = params.get(\"mode\") || \"traces\";\n\n    function escapeHtml(value) {\n      return String(value ?? \"\")\n        .replaceAll(\"&\", \"&amp;\")\n        .replaceAll(\"<\", \"&lt;\")\n        .replaceAll(\">\", \"&gt;\")\n        .replaceAll('\"', \"&quot;\")\n        .replaceAll(\"'\", \"&#39;\");\n    }\n\n    function renderSuite(data) {\n      const rows = data.cases.map((c) =>\n        '<tr><td>' + escapeHtml(c.id) + '</td><td class=\"' + escapeHtml(c.status) + '\">' + escapeHtml(c.status) +\n        '</td><td>' + escapeHtml(c.message || '') + '</td><td>' + escapeHtml(c.toolPath.join(' → ')) +\n        '</td><td>' + escapeHtml(c.observations.map((o) => o.name + ':' + o.status).join(', ')) + '</td></tr>'\n      ).join('');\n      const failed = data.cases.filter((c) => c.status !== 'pass');\n      const detail = failed.map((c) => {\n        let html = '<h3>Case ' + escapeHtml(c.id) + '</h3><ul>';\n        if (c.failureDiff) html += '<li>Diff errors: ' + escapeHtml(c.failureDiff.summary.errors) + '</li>';\n        if (c.timeline) html += '<li>Timeline steps: ' + escapeHtml(c.timeline.entries.length) + '</li>';\n        html += '<li>Diagnostics: ' + escapeHtml(c.diagnostics.map((d) => d.message).join('; ')) + '</li></ul>';\n        return html;\n      }).join('');\n      return '<section><h2>Suite: ' + escapeHtml(data.suiteName) + ' (' + escapeHtml(data.status) + ')</h2>' +\n        '<p>Passed ' + escapeHtml(data.summary.passed) + ', failed ' + escapeHtml(data.summary.failed) + '</p>' +\n        '<table><thead><tr><th>Case</th><th>Status</th><th>Message</th><th>Tool path</th><th>Observations</th></tr></thead><tbody>' +\n        rows + '</tbody></table>' +\n        '<section><h2>Failure detail</h2>' + (detail || '<p class=\"pass\">No failures</p>') + '</section>' +\n        '<section><h2>CI artifacts</h2><p>' + escapeHtml(data.ciArtifactsDir || 'n/a') + '</p></section>' +\n        '<section><h2>Bundle export</h2><p>' + escapeHtml(data.bundleExportHint) + '</p></section>';\n    }\n\n    async function load() {\n      const nav = document.getElementById(\"nav\");\n      const out = document.getElementById(\"out\");\n      const content = document.getElementById(\"content\");\n      if (mode === \"suite\") {\n        nav.innerHTML = '<a href=\"/api/suite\">/api/suite</a>';\n        const data = await fetch(\"/api/suite\").then((r) => r.json());\n        content.innerHTML = renderSuite(data);\n        return;\n      }\n      if (mode === \"workspace\") {\n        nav.innerHTML = '<a href=\"/api/workspace\">/api/workspace</a>';\n        const data = await fetch(\"/api/workspace\").then((r) => r.json());\n        content.innerHTML = '<section><h2>Workspace: ' + escapeHtml(data.project || 'workspace') + '</h2>' +\n          '<p>Runs: ' + escapeHtml(data.runs.length) + '</p><pre>' + escapeHtml(JSON.stringify(data, null, 2)) + '</pre></section>';\n        return;\n      }\n      nav.innerHTML = '<a href=\"/api/traces\">/api/traces</a> · <a href=\"/api/sessions\">/api/sessions</a>';\n      const data = await fetch(\"/api/traces\").then((r) => r.json());\n      out.textContent = JSON.stringify(data, null, 2);\n    }\n    load().catch((err) => {\n      document.getElementById(\"out\").textContent = String(err);\n    });\n  </script>\n</body>\n</html>\n`;\n","import path from \"node:path\";\n\nimport {\n  buildRunTimeline,\n  extractOutcomesFromTraceEvents,\n  runSuite,\n  type SuiteCaseResult,\n  type SuiteRunResult,\n} from \"agent-inspect/advanced\";\nimport { diffRuns, manualTraceEventsToComparableRun } from \"agent-inspect/diff\";\nimport { persistedInspectEventsToTraceEvents } from \"agent-inspect/persisted\";\nimport { openTrace } from \"agent-inspect/readers\";\n\nexport interface SuiteCaseViewerDetail {\n  id: string;\n  status: SuiteCaseResult[\"status\"];\n  tracePath?: string;\n  runId?: string;\n  message?: string;\n  diagnostics: SuiteCaseResult[\"diagnostics\"];\n  timeline?: ReturnType<typeof buildRunTimeline>;\n  toolPath: string[];\n  observations: ReturnType<typeof extractOutcomesFromTraceEvents>;\n  failureDiff?: {\n    summary: ReturnType<typeof diffRuns>[\"summary\"];\n    differences: Array<{ kind: string; message: string }>;\n  };\n}\n\nexport interface SuiteViewerData {\n  suiteName: string;\n  configPath: string;\n  tracesDir: string;\n  ok: boolean;\n  status: SuiteRunResult[\"status\"];\n  summary: SuiteRunResult[\"summary\"];\n  cases: SuiteCaseViewerDetail[];\n  ciArtifactsDir?: string;\n  bundleExportHint: string;\n}\n\nasync function enrichCase(\n  suiteCase: SuiteCaseResult,\n  baselineTracePath?: string,\n): Promise<SuiteCaseViewerDetail> {\n  const base: SuiteCaseViewerDetail = {\n    id: suiteCase.id,\n    status: suiteCase.status,\n    ...(suiteCase.tracePath !== undefined ? { tracePath: suiteCase.tracePath } : {}),\n    ...(suiteCase.runId !== undefined ? { runId: suiteCase.runId } : {}),\n    ...(suiteCase.message !== undefined ? { message: suiteCase.message } : {}),\n    diagnostics: suiteCase.diagnostics,\n    toolPath: [],\n    observations: [],\n  };\n\n  if (suiteCase.tracePath === undefined) return base;\n\n  try {\n    const read = await openTrace({ type: \"file\", path: suiteCase.tracePath });\n    const legacy = persistedInspectEventsToTraceEvents(read.events);\n    const timeline = buildRunTimeline(legacy, { focus: \"all\" });\n    const observations = extractOutcomesFromTraceEvents(legacy);\n    const toolPath = timeline.entries\n      .filter((entry) => entry.type === \"tool\")\n      .map((entry) => entry.name);\n\n    const detail: SuiteCaseViewerDetail = {\n      ...base,\n      timeline,\n      toolPath,\n      observations,\n    };\n\n    if (baselineTracePath !== undefined && suiteCase.status !== \"pass\") {\n      try {\n        const baselineRead = await openTrace({ type: \"file\", path: baselineTracePath });\n        const diff = diffRuns(\n          manualTraceEventsToComparableRun(\n            persistedInspectEventsToTraceEvents(baselineRead.events),\n          ),\n          manualTraceEventsToComparableRun(legacy),\n        );\n        detail.failureDiff = {\n          summary: diff.summary,\n          differences: diff.differences.slice(0, 20).map((item) => ({\n            kind: item.kind,\n            message: item.message,\n          })),\n        };\n      } catch {\n        // Baseline diff is best-effort.\n      }\n    }\n\n    return detail;\n  } catch {\n    return base;\n  }\n}\n\nexport async function loadSuiteViewerData(options: {\n  suiteConfigPath?: string;\n  cwd?: string;\n}): Promise<SuiteViewerData> {\n  const result = await runSuite({\n    configPath: options.suiteConfigPath,\n    cwd: options.cwd,\n  });\n\n  const baselineCase = result.cases.find((item) => item.status === \"pass\");\n  const baselinePath = baselineCase?.tracePath;\n\n  const cases: SuiteCaseViewerDetail[] = [];\n  for (const suiteCase of result.cases) {\n    cases.push(await enrichCase(suiteCase, baselinePath));\n  }\n\n  const artifactsDir = path.join(path.dirname(result.configPath), \".agent-inspect/suite-runs\");\n\n  return {\n    suiteName: result.suiteName,\n    configPath: result.configPath,\n    tracesDir: result.tracesDir,\n    ok: result.ok,\n    status: result.status,\n    summary: result.summary,\n    cases,\n    ciArtifactsDir: artifactsDir,\n    bundleExportHint:\n      \"Export a share-safe bundle with: npx agent-inspect bundle <runId> --profile share\",\n  };\n}\n","import path from \"node:path\";\n\nimport {\n  TraceDirectory,\n  loadTraceMetadataList,\n  resolveTraceDir,\n} from \"agent-inspect/advanced\";\nimport {\n  doctorWorkspace,\n  getWorkspaceStatus,\n  readWorkspaceManifestFile,\n  resolveWorkspaceLocation,\n} from \"agent-inspect/workspace\";\n\nexport interface WorkspaceViewerData {\n  workspaceDir: string;\n  project?: string;\n  status: Awaited<ReturnType<typeof getWorkspaceStatus>>;\n  doctor: Awaited<ReturnType<typeof doctorWorkspace>>;\n  runs: Array<{\n    runId: string;\n    name?: string;\n    status: string;\n    file: string;\n  }>;\n  bundleDirs: string[];\n}\n\nexport async function loadWorkspaceViewerData(options: {\n  cwd?: string;\n}): Promise<WorkspaceViewerData> {\n  const cwd = path.resolve(options.cwd ?? process.cwd());\n  const location = resolveWorkspaceLocation(cwd);\n  const manifestRead = await readWorkspaceManifestFile(location);\n  if (!manifestRead.ok || manifestRead.manifest === undefined) {\n    throw new Error(\n      manifestRead.errors.join(\"; \") || \"workspace.json not found (run workspace init)\",\n    );\n  }\n\n  const status = await getWorkspaceStatus(location, manifestRead.manifest);\n  const doctor = await doctorWorkspace(location);\n\n  const runs: WorkspaceViewerData[\"runs\"] = [];\n  for (const rel of manifestRead.manifest.traceDirs) {\n    const traceDir = resolveTraceDir({\n      dir: path.join(location.workspaceDir, rel),\n    });\n    const td = new TraceDirectory({ dir: traceDir });\n    const files = await td.list();\n    const metas = await loadTraceMetadataList(traceDir, files, (fileName) =>\n      td.getPath(fileName),\n    );\n    for (const meta of metas) {\n      runs.push({\n        runId: meta.runId,\n        ...(meta.name !== undefined ? { name: meta.name } : {}),\n        status: meta.status,\n        file: path.basename(meta.filePath),\n      });\n    }\n  }\n\n  return {\n    workspaceDir: location.workspaceDir,\n    ...(status.project !== undefined ? { project: status.project } : {}),\n    status,\n    doctor,\n    runs,\n    bundleDirs: [\n      path.join(location.workspaceDir, manifestRead.manifest.bundlesDir),\n      path.join(location.workspaceDir, manifestRead.manifest.artifactsDir),\n    ],\n  };\n}\n","/**\n * Internal workspace manifest types (v4.0).\n *\n * @remarks\n * Experimental and internal to `@agent-inspect/core`. This module is not part\n * of any published entry point. Adding a public `agent-inspect/workspace`\n * export is a separate, maintainer-gated step (see\n * `docs/proposals/LOCAL-TRACE-WORKSPACE.md`).\n */\n\n/** Fixed manifest schema version for the v4.0 workspace model. */\nexport const WORKSPACE_SCHEMA_VERSION = \"1.0\" as const;\n\n/** Standard workspace directory name at a project root. */\nexport const WORKSPACE_DIR_NAME = \".agent-inspect\" as const;\n\n/** Standard manifest filename inside {@link WORKSPACE_DIR_NAME}. */\nexport const WORKSPACE_MANIFEST_FILENAME = \"workspace.json\" as const;\n\n/** Default share-safety posture applied to a workspace. */\nexport type WorkspaceRedactionProfile = \"local\" | \"share\" | \"strict\";\n\n/** Optional local index kind (SQLite index arrives as an opt-in package in v4.1). */\nexport type WorkspaceIndexType = \"none\" | \"sqlite\" | \"custom\";\n\n/** Optional local index descriptor. */\nexport interface WorkspaceIndexConfig {\n  enabled: boolean;\n  type: WorkspaceIndexType;\n  path?: string;\n}\n\n/**\n * The `.agent-inspect/workspace.json` manifest.\n *\n * @remarks\n * All directory fields are paths relative to the workspace root and must\n * resolve inside it (no absolute paths, no `..` traversal).\n */\nexport interface AgentInspectWorkspaceManifest {\n  schemaVersion: typeof WORKSPACE_SCHEMA_VERSION;\n  project: string;\n  createdAt: string;\n  traceDirs: string[];\n  reportsDir: string;\n  artifactsDir: string;\n  bundlesDir: string;\n  notesDir: string;\n  redactionProfile: WorkspaceRedactionProfile;\n  index: WorkspaceIndexConfig;\n}\n\n/** Result of validating unknown input against the manifest contract. */\nexport interface WorkspaceManifestValidationResult {\n  ok: boolean;\n  manifest?: AgentInspectWorkspaceManifest;\n  errors: string[];\n  warnings: string[];\n}\n","import {\n  WORKSPACE_SCHEMA_VERSION,\n  type AgentInspectWorkspaceManifest,\n  type WorkspaceIndexConfig,\n  type WorkspaceIndexType,\n  type WorkspaceManifestValidationResult,\n  type WorkspaceRedactionProfile,\n} from \"./types.js\";\n\n/**\n * Internal workspace manifest validation + default generation (v4.0).\n *\n * @remarks\n * Pure, non-throwing helpers. Validation is conservative: unknown or malformed\n * input is rejected with clear messages rather than coerced. No filesystem or\n * network access happens here (filesystem helpers arrive in a later chunk).\n */\n\n/** Default relative layout used when generating a fresh manifest. */\nexport const DEFAULT_WORKSPACE_LAYOUT = {\n  traceDirs: [\"runs\"],\n  reportsDir: \"reports\",\n  artifactsDir: \"artifacts\",\n  bundlesDir: \"bundles\",\n  notesDir: \"notes\",\n} as const;\n\nconst DEFAULT_REDACTION_PROFILE: WorkspaceRedactionProfile = \"share\";\n\nconst REDACTION_PROFILES: readonly WorkspaceRedactionProfile[] = [\n  \"local\",\n  \"share\",\n  \"strict\",\n];\n\nconst INDEX_TYPES: readonly WorkspaceIndexType[] = [\"none\", \"sqlite\", \"custom\"];\n\n/** Upper bound on serialized manifest input accepted by {@link parseWorkspaceManifest}. */\nexport const MAX_WORKSPACE_MANIFEST_BYTES = 64 * 1024;\n\n/** Options for {@link createDefaultWorkspaceManifest}. */\nexport interface CreateWorkspaceManifestOptions {\n  project: string;\n  createdAt?: string;\n  traceDirs?: string[];\n  reportsDir?: string;\n  artifactsDir?: string;\n  bundlesDir?: string;\n  notesDir?: string;\n  redactionProfile?: WorkspaceRedactionProfile;\n  index?: Partial<WorkspaceIndexConfig>;\n}\n\n/**\n * Generates a default workspace manifest for a project using the standard\n * layout. The returned object is always shape-valid.\n */\nexport function createDefaultWorkspaceManifest(\n  options: CreateWorkspaceManifestOptions,\n): AgentInspectWorkspaceManifest {\n  const project = typeof options.project === \"string\" ? options.project.trim() : \"\";\n  const index: WorkspaceIndexConfig = {\n    enabled: options.index?.enabled ?? false,\n    type: options.index?.type ?? \"none\",\n    ...(options.index?.path !== undefined ? { path: options.index.path } : {}),\n  };\n\n  return {\n    schemaVersion: WORKSPACE_SCHEMA_VERSION,\n    project,\n    createdAt: options.createdAt ?? new Date().toISOString(),\n    traceDirs: options.traceDirs\n      ? [...options.traceDirs]\n      : [...DEFAULT_WORKSPACE_LAYOUT.traceDirs],\n    reportsDir: options.reportsDir ?? DEFAULT_WORKSPACE_LAYOUT.reportsDir,\n    artifactsDir: options.artifactsDir ?? DEFAULT_WORKSPACE_LAYOUT.artifactsDir,\n    bundlesDir: options.bundlesDir ?? DEFAULT_WORKSPACE_LAYOUT.bundlesDir,\n    notesDir: options.notesDir ?? DEFAULT_WORKSPACE_LAYOUT.notesDir,\n    redactionProfile: options.redactionProfile ?? DEFAULT_REDACTION_PROFILE,\n    index,\n  };\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Returns true when `p` is a non-empty relative path that stays within the\n * workspace root: no absolute paths, no `..` traversal, no Windows drive roots.\n */\nexport function isSafeRelativeWorkspacePath(p: unknown): p is string {\n  if (typeof p !== \"string\") return false;\n  const trimmed = p.trim();\n  if (trimmed === \"\") return false;\n  if (trimmed.startsWith(\"/\") || trimmed.startsWith(\"\\\\\")) return false;\n  if (/^[a-zA-Z]:/.test(trimmed)) return false;\n  const segments = trimmed.split(/[/\\\\]+/);\n  return !segments.some((seg) => seg === \"..\");\n}\n\nfunction validateDirField(\n  value: unknown,\n  field: string,\n  errors: string[],\n): void {\n  if (typeof value !== \"string\" || value.trim() === \"\") {\n    errors.push(`${field} must be a non-empty string`);\n    return;\n  }\n  if (!isSafeRelativeWorkspacePath(value)) {\n    errors.push(\n      `${field} must be a relative path inside the workspace (no absolute paths or \"..\" traversal)`,\n    );\n  }\n}\n\nfunction validateIndex(value: unknown, errors: string[]): WorkspaceIndexConfig | undefined {\n  if (!isPlainObject(value)) {\n    errors.push(\"index must be an object\");\n    return undefined;\n  }\n  if (typeof value.enabled !== \"boolean\") {\n    errors.push(\"index.enabled must be a boolean\");\n  }\n  if (!INDEX_TYPES.includes(value.type as WorkspaceIndexType)) {\n    errors.push(`index.type must be one of: ${INDEX_TYPES.join(\", \")}`);\n  }\n  if (value.path !== undefined && !isSafeRelativeWorkspacePath(value.path)) {\n    errors.push(\n      'index.path must be a relative path inside the workspace (no absolute paths or \"..\" traversal)',\n    );\n  }\n  if (errors.length > 0) return undefined;\n  return {\n    enabled: value.enabled as boolean,\n    type: value.type as WorkspaceIndexType,\n    ...(value.path !== undefined ? { path: value.path as string } : {}),\n  };\n}\n\n/**\n * Conservatively validates unknown input against the workspace manifest\n * contract. Never throws; returns a result with `ok`, the normalized\n * `manifest` (when valid), `errors`, and non-fatal `warnings`.\n */\nexport function validateWorkspaceManifest(\n  input: unknown,\n): WorkspaceManifestValidationResult {\n  const errors: string[] = [];\n  const warnings: string[] = [];\n\n  if (!isPlainObject(input)) {\n    return { ok: false, errors: [\"manifest must be an object\"], warnings };\n  }\n\n  if (input.schemaVersion !== WORKSPACE_SCHEMA_VERSION) {\n    errors.push(\n      `schemaVersion must be \"${WORKSPACE_SCHEMA_VERSION}\" (received ${JSON.stringify(\n        input.schemaVersion,\n      )})`,\n    );\n  }\n\n  if (typeof input.project !== \"string\" || input.project.trim() === \"\") {\n    errors.push(\"project must be a non-empty string\");\n  }\n\n  if (typeof input.createdAt !== \"string\" || input.createdAt.trim() === \"\") {\n    errors.push(\"createdAt must be a non-empty ISO-8601 string\");\n  } else if (Number.isNaN(Date.parse(input.createdAt))) {\n    errors.push(\"createdAt must be a valid ISO-8601 date string\");\n  }\n\n  if (!Array.isArray(input.traceDirs) || input.traceDirs.length === 0) {\n    errors.push(\"traceDirs must be a non-empty array\");\n  } else {\n    input.traceDirs.forEach((dir, i) => {\n      if (typeof dir !== \"string\" || dir.trim() === \"\") {\n        errors.push(`traceDirs[${i}] must be a non-empty string`);\n      } else if (!isSafeRelativeWorkspacePath(dir)) {\n        errors.push(\n          `traceDirs[${i}] must be a relative path inside the workspace (no absolute paths or \"..\" traversal)`,\n        );\n      }\n    });\n  }\n\n  validateDirField(input.reportsDir, \"reportsDir\", errors);\n  validateDirField(input.artifactsDir, \"artifactsDir\", errors);\n  validateDirField(input.bundlesDir, \"bundlesDir\", errors);\n  validateDirField(input.notesDir, \"notesDir\", errors);\n\n  if (!REDACTION_PROFILES.includes(input.redactionProfile as WorkspaceRedactionProfile)) {\n    errors.push(`redactionProfile must be one of: ${REDACTION_PROFILES.join(\", \")}`);\n  }\n\n  const indexErrors: string[] = [];\n  const index = validateIndex(input.index, indexErrors);\n  errors.push(...indexErrors);\n\n  if (index && index.type !== \"none\" && !index.enabled) {\n    warnings.push(`index.type is \"${index.type}\" but index.enabled is false`);\n  }\n\n  if (errors.length > 0 || index === undefined) {\n    return { ok: false, errors, warnings };\n  }\n\n  const manifest: AgentInspectWorkspaceManifest = {\n    schemaVersion: WORKSPACE_SCHEMA_VERSION,\n    project: (input.project as string).trim(),\n    createdAt: input.createdAt as string,\n    traceDirs: (input.traceDirs as string[]).map((d) => d.trim()),\n    reportsDir: (input.reportsDir as string).trim(),\n    artifactsDir: (input.artifactsDir as string).trim(),\n    bundlesDir: (input.bundlesDir as string).trim(),\n    notesDir: (input.notesDir as string).trim(),\n    redactionProfile: input.redactionProfile as WorkspaceRedactionProfile,\n    index,\n  };\n\n  return { ok: true, manifest, errors, warnings };\n}\n\n/**\n * Safely parses a serialized manifest string and validates it. Bounds input\n * size and rejects invalid JSON without throwing.\n */\nexport function parseWorkspaceManifest(\n  json: string,\n): WorkspaceManifestValidationResult {\n  const warnings: string[] = [];\n\n  if (typeof json !== \"string\") {\n    return { ok: false, errors: [\"manifest input must be a string\"], warnings };\n  }\n  if (json.length > MAX_WORKSPACE_MANIFEST_BYTES) {\n    return {\n      ok: false,\n      errors: [\n        `manifest exceeds maximum size of ${MAX_WORKSPACE_MANIFEST_BYTES} bytes`,\n      ],\n      warnings,\n    };\n  }\n\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(json) as unknown;\n  } catch {\n    return { ok: false, errors: [\"manifest is not valid JSON\"], warnings };\n  }\n\n  return validateWorkspaceManifest(parsed);\n}\n\n/** Serializes a manifest to deterministic, pretty-printed JSON with a trailing newline. */\nexport function serializeWorkspaceManifest(\n  manifest: AgentInspectWorkspaceManifest,\n): string {\n  return `${JSON.stringify(manifest, null, 2)}\\n`;\n}\n","import { constants } from \"node:fs\";\nimport { access, mkdir, readdir, readFile, rm, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport {\n  createDefaultWorkspaceManifest,\n  parseWorkspaceManifest,\n  serializeWorkspaceManifest,\n} from \"./manifest.js\";\nimport {\n  WORKSPACE_DIR_NAME,\n  WORKSPACE_MANIFEST_FILENAME,\n  type AgentInspectWorkspaceManifest,\n  type WorkspaceRedactionProfile,\n} from \"./types.js\";\n\n/**\n * Internal workspace filesystem helpers (v4.0).\n *\n * @remarks\n * Local-only. Never deletes trace files. All manifest-derived paths are\n * resolved and confirmed to stay within the workspace directory\n * (path-traversal guarded). No network access.\n */\n\n/** Resolved on-disk location of a workspace. */\nexport interface WorkspaceLocation {\n  /** Project directory that contains the `.agent-inspect` folder. */\n  projectRoot: string;\n  /** The `.agent-inspect` workspace directory (root for relative manifest paths). */\n  workspaceDir: string;\n  /** Absolute path to `workspace.json`. */\n  manifestPath: string;\n}\n\nconst INDEX_DIR_NAME = \"index\";\n\n/** Resolves the workspace location for a given project directory. */\nexport function resolveWorkspaceLocation(cwd: string = process.cwd()): WorkspaceLocation {\n  const projectRoot = path.resolve(cwd);\n  const workspaceDir = path.join(projectRoot, WORKSPACE_DIR_NAME);\n  return {\n    projectRoot,\n    workspaceDir,\n    manifestPath: path.join(workspaceDir, WORKSPACE_MANIFEST_FILENAME),\n  };\n}\n\n/**\n * Resolves a manifest-relative path against the workspace directory, rejecting\n * any path that escapes it.\n */\nexport function resolveInsideWorkspace(workspaceDir: string, relative: string): string {\n  const base = path.resolve(workspaceDir);\n  const resolved = path.resolve(base, relative);\n  const rel = path.relative(base, resolved);\n  if (rel === \"\" || rel === \".\" || (!rel.startsWith(\"..\") && !path.isAbsolute(rel))) {\n    return resolved;\n  }\n  throw new Error(\n    `Workspace path \"${relative}\" resolves outside the workspace directory`,\n  );\n}\n\nasync function pathExists(p: string): Promise<boolean> {\n  try {\n    await access(p);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nasync function isWritable(p: string): Promise<boolean> {\n  try {\n    await access(p, constants.W_OK);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nasync function listJsonl(dir: string): Promise<string[]> {\n  try {\n    const entries = await readdir(dir);\n    return entries.filter((f) => f.endsWith(\".jsonl\"));\n  } catch {\n    return [];\n  }\n}\n\nasync function countFiles(dir: string): Promise<number> {\n  try {\n    const entries = await readdir(dir, { withFileTypes: true });\n    return entries.filter((e) => e.isFile()).length;\n  } catch {\n    return 0;\n  }\n}\n\n/** Result of reading a workspace manifest from disk. */\nexport interface ReadWorkspaceManifestResult {\n  exists: boolean;\n  ok: boolean;\n  manifest?: AgentInspectWorkspaceManifest;\n  errors: string[];\n  warnings: string[];\n}\n\n/** Reads and validates `workspace.json` at the given location. Never throws. */\nexport async function readWorkspaceManifestFile(\n  location: WorkspaceLocation,\n): Promise<ReadWorkspaceManifestResult> {\n  let raw: string;\n  try {\n    raw = await readFile(location.manifestPath, \"utf-8\");\n  } catch {\n    return { exists: false, ok: false, errors: [\"workspace.json not found\"], warnings: [] };\n  }\n  const parsed = parseWorkspaceManifest(raw);\n  return {\n    exists: true,\n    ok: parsed.ok,\n    ...(parsed.manifest ? { manifest: parsed.manifest } : {}),\n    errors: parsed.errors,\n    warnings: parsed.warnings,\n  };\n}\n\n/** Options for {@link createWorkspace}. */\nexport interface CreateWorkspaceOptions {\n  cwd?: string;\n  project?: string;\n  redactionProfile?: WorkspaceRedactionProfile;\n  /** Preview only: do not write anything to disk. */\n  dryRun?: boolean;\n}\n\n/** Outcome of {@link createWorkspace}. */\nexport interface CreateWorkspaceResult {\n  location: WorkspaceLocation;\n  manifest: AgentInspectWorkspaceManifest;\n  /** True when a fresh manifest was written. */\n  created: boolean;\n  /** True when an existing workspace/trace directory was adopted without rewrite. */\n  adopted: boolean;\n  /** Relative directories created (or that would be created in dry-run). */\n  createdDirs: string[];\n  /** True when top-level `.jsonl` traces were detected and preserved. */\n  detectedExistingTraces: boolean;\n  dryRun: boolean;\n}\n\n/**\n * Creates or adopts a workspace. Never deletes or rewrites existing traces.\n * When a manifest already exists it is adopted (missing folders are created,\n * the manifest is left untouched).\n */\nexport async function createWorkspace(\n  options: CreateWorkspaceOptions = {},\n): Promise<CreateWorkspaceResult> {\n  const location = resolveWorkspaceLocation(options.cwd);\n  const dryRun = options.dryRun === true;\n\n  const existing = await readWorkspaceManifestFile(location);\n  const topLevelTraces = await listJsonl(location.workspaceDir);\n  const detectedExistingTraces = topLevelTraces.length > 0;\n\n  let manifest: AgentInspectWorkspaceManifest;\n  let created: boolean;\n  let adopted: boolean;\n\n  if (existing.exists && existing.ok && existing.manifest) {\n    manifest = existing.manifest;\n    created = false;\n    adopted = true;\n  } else {\n    const project =\n      options.project?.trim() ||\n      path.basename(location.projectRoot) ||\n      \"workspace\";\n    const traceDirs = detectedExistingTraces ? [\"runs\", \".\"] : [\"runs\"];\n    manifest = createDefaultWorkspaceManifest({\n      project,\n      traceDirs,\n      ...(options.redactionProfile ? { redactionProfile: options.redactionProfile } : {}),\n    });\n    created = true;\n    adopted = detectedExistingTraces || (existing.exists && !existing.ok);\n  }\n\n  const relDirs = uniqueDirs([\n    ...manifest.traceDirs.filter((d) => d !== \".\"),\n    manifest.reportsDir,\n    manifest.artifactsDir,\n    manifest.bundlesDir,\n    manifest.notesDir,\n    INDEX_DIR_NAME,\n  ]);\n\n  const createdDirs: string[] = [];\n  for (const rel of relDirs) {\n    const abs = resolveInsideWorkspace(location.workspaceDir, rel);\n    if (await pathExists(abs)) continue;\n    createdDirs.push(rel);\n    if (!dryRun) await mkdir(abs, { recursive: true });\n  }\n\n  if (!dryRun && created) {\n    await mkdir(location.workspaceDir, { recursive: true });\n    await writeFile(location.manifestPath, serializeWorkspaceManifest(manifest), \"utf-8\");\n  }\n\n  return {\n    location,\n    manifest,\n    created,\n    adopted,\n    createdDirs,\n    detectedExistingTraces,\n    dryRun,\n  };\n}\n\nfunction uniqueDirs(dirs: string[]): string[] {\n  const seen = new Set<string>();\n  const out: string[] = [];\n  for (const d of dirs) {\n    const t = d.trim();\n    if (t === \"\" || t === \".\" || seen.has(t)) continue;\n    seen.add(t);\n    out.push(t);\n  }\n  return out;\n}\n\n/** Index presence/status for {@link getWorkspaceStatus}. */\nexport interface WorkspaceIndexStatus {\n  enabled: boolean;\n  type: string;\n  exists: boolean;\n}\n\n/** Aggregate, read-only workspace status. */\nexport interface WorkspaceStatus {\n  project: string;\n  traceFiles: number;\n  reports: number;\n  artifacts: number;\n  bundles: number;\n  notes: number;\n  index: WorkspaceIndexStatus;\n}\n\n/** Computes read-only counts for a workspace. Requires a valid manifest. */\nexport async function getWorkspaceStatus(\n  location: WorkspaceLocation,\n  manifest: AgentInspectWorkspaceManifest,\n): Promise<WorkspaceStatus> {\n  let traceFiles = 0;\n  for (const rel of manifest.traceDirs) {\n    const abs = resolveInsideWorkspace(location.workspaceDir, rel);\n    traceFiles += (await listJsonl(abs)).length;\n  }\n\n  const reports = await countFiles(\n    resolveInsideWorkspace(location.workspaceDir, manifest.reportsDir),\n  );\n  const artifacts = await countFiles(\n    resolveInsideWorkspace(location.workspaceDir, manifest.artifactsDir),\n  );\n  const bundles = await countFiles(\n    resolveInsideWorkspace(location.workspaceDir, manifest.bundlesDir),\n  );\n  const notes = await countFiles(\n    resolveInsideWorkspace(location.workspaceDir, manifest.notesDir),\n  );\n\n  const indexPath = manifest.index.path\n    ? resolveInsideWorkspace(location.workspaceDir, manifest.index.path)\n    : resolveInsideWorkspace(location.workspaceDir, INDEX_DIR_NAME);\n\n  return {\n    project: manifest.project,\n    traceFiles,\n    reports,\n    artifacts,\n    bundles,\n    notes,\n    index: {\n      enabled: manifest.index.enabled,\n      type: manifest.index.type,\n      exists: await pathExists(indexPath),\n    },\n  };\n}\n\n/** A single workspace doctor check. */\nexport interface WorkspaceDoctorCheck {\n  id: string;\n  status: \"pass\" | \"warn\" | \"fail\";\n  message: string;\n}\n\n/** Result of {@link doctorWorkspace}. */\nexport interface WorkspaceDoctorResult {\n  ok: boolean;\n  checks: WorkspaceDoctorCheck[];\n}\n\n/**\n * Validates a workspace: manifest presence/shape, folder permissions, trace\n * readability, and index staleness. Read-only; never throws.\n */\nexport async function doctorWorkspace(\n  location: WorkspaceLocation,\n): Promise<WorkspaceDoctorResult> {\n  const checks: WorkspaceDoctorCheck[] = [];\n  const manifestResult = await readWorkspaceManifestFile(location);\n\n  if (!manifestResult.exists) {\n    checks.push({\n      id: \"manifest\",\n      status: \"fail\",\n      message: \"workspace.json not found (run `agent-inspect workspace init`)\",\n    });\n    return { ok: false, checks };\n  }\n  if (!manifestResult.ok || !manifestResult.manifest) {\n    checks.push({\n      id: \"manifest\",\n      status: \"fail\",\n      message: `workspace.json is invalid: ${manifestResult.errors.join(\"; \")}`,\n    });\n    return { ok: false, checks };\n  }\n\n  const manifest = manifestResult.manifest;\n  checks.push({ id: \"manifest\", status: \"pass\", message: \"workspace.json is valid\" });\n  for (const warning of manifestResult.warnings) {\n    checks.push({ id: \"manifest-warning\", status: \"warn\", message: warning });\n  }\n\n  const dirFields: Array<[string, string]> = [\n    ...manifest.traceDirs\n      .filter((d) => d !== \".\")\n      .map((d, i) => [`traceDir[${i}]`, d] as [string, string]),\n    [\"reportsDir\", manifest.reportsDir],\n    [\"artifactsDir\", manifest.artifactsDir],\n    [\"bundlesDir\", manifest.bundlesDir],\n    [\"notesDir\", manifest.notesDir],\n  ];\n\n  for (const [id, rel] of dirFields) {\n    let abs: string;\n    try {\n      abs = resolveInsideWorkspace(location.workspaceDir, rel);\n    } catch (error) {\n      checks.push({\n        id,\n        status: \"fail\",\n        message: error instanceof Error ? error.message : String(error),\n      });\n      continue;\n    }\n    if (!(await pathExists(abs))) {\n      checks.push({ id, status: \"warn\", message: `${rel}/ does not exist yet` });\n    } else if (!(await isWritable(abs))) {\n      checks.push({ id, status: \"fail\", message: `${rel}/ is not writable` });\n    } else {\n      checks.push({ id, status: \"pass\", message: `${rel}/ is present and writable` });\n    }\n  }\n\n  // Trace readability + index staleness.\n  let newestTraceMtime = 0;\n  for (const rel of manifest.traceDirs) {\n    const abs = resolveInsideWorkspace(location.workspaceDir, rel);\n    for (const file of await listJsonl(abs)) {\n      try {\n        const s = await stat(path.join(abs, file));\n        newestTraceMtime = Math.max(newestTraceMtime, s.mtimeMs);\n      } catch {\n        checks.push({ id: \"trace-readability\", status: \"warn\", message: `cannot stat ${rel}/${file}` });\n      }\n    }\n  }\n\n  if (manifest.index.enabled) {\n    const indexPath = manifest.index.path\n      ? resolveInsideWorkspace(location.workspaceDir, manifest.index.path)\n      : resolveInsideWorkspace(location.workspaceDir, INDEX_DIR_NAME);\n    if (!(await pathExists(indexPath))) {\n      checks.push({ id: \"index\", status: \"warn\", message: \"index enabled but not built\" });\n    } else {\n      try {\n        const s = await stat(indexPath);\n        if (newestTraceMtime > s.mtimeMs) {\n          checks.push({ id: \"index\", status: \"warn\", message: \"index is stale (traces are newer)\" });\n        } else {\n          checks.push({ id: \"index\", status: \"pass\", message: \"index is present\" });\n        }\n      } catch {\n        checks.push({ id: \"index\", status: \"warn\", message: \"cannot stat index\" });\n      }\n    }\n  }\n\n  const ok = !checks.some((c) => c.status === \"fail\");\n  return { ok, checks };\n}\n\n/** Options for {@link cleanWorkspace}. */\nexport interface CleanWorkspaceOptions {\n  /** Actually delete. When false (default), the operation is a dry-run. */\n  confirm?: boolean;\n}\n\n/** Result of {@link cleanWorkspace}. */\nexport interface CleanWorkspaceResult {\n  dryRun: boolean;\n  /** Relative paths removed (or that would be removed in dry-run). */\n  removed: string[];\n}\n\n/**\n * Removes generated workspace content (reports, artifacts, bundles, index).\n * Dry-run by default; trace directories are never touched.\n */\nexport async function cleanWorkspace(\n  location: WorkspaceLocation,\n  manifest: AgentInspectWorkspaceManifest,\n  options: CleanWorkspaceOptions = {},\n): Promise<CleanWorkspaceResult> {\n  const dryRun = options.confirm !== true;\n  const targets = uniqueDirs([\n    manifest.reportsDir,\n    manifest.artifactsDir,\n    manifest.bundlesDir,\n    manifest.index.path ?? INDEX_DIR_NAME,\n  ]);\n\n  const removed: string[] = [];\n  for (const rel of targets) {\n    const abs = resolveInsideWorkspace(location.workspaceDir, rel);\n    let entries: string[];\n    try {\n      entries = await readdir(abs);\n    } catch {\n      continue;\n    }\n    for (const entry of entries) {\n      const relPath = `${rel}/${entry}`;\n      removed.push(relPath);\n      if (!dryRun) {\n        await rm(path.join(abs, entry), { recursive: true, force: true });\n      }\n    }\n  }\n\n  return { dryRun, removed };\n}\n","import { spawn } from \"node:child_process\";\n\nexport interface BrowserOpenResult {\n  ok: boolean;\n  detail?: string;\n}\n\n/** Open a URL or file URL in the platform's default browser without waiting for it to exit. */\nexport function openInDefaultBrowser(target: string): Promise<BrowserOpenResult> {\n  const platform = process.platform;\n  const command =\n    platform === \"darwin\" ? \"open\" : platform === \"win32\" ? \"cmd\" : \"xdg-open\";\n  const args =\n    platform === \"win32\" ? [\"/c\", \"start\", \"\", target] : [target];\n\n  return new Promise((resolve) => {\n    try {\n      const child = spawn(command, args, {\n        detached: true,\n        stdio: \"ignore\",\n        windowsHide: platform === \"win32\",\n      });\n\n      child.once(\"spawn\", () => {\n        try {\n          child.unref();\n          resolve({ ok: true });\n        } catch (error) {\n          resolve({\n            ok: false,\n            detail: error instanceof Error ? error.message : String(error),\n          });\n        }\n      });\n      child.once(\"error\", (error) => {\n        resolve({\n          ok: false,\n          detail: error instanceof Error ? error.message : String(error),\n        });\n      });\n    } catch (error) {\n      resolve({\n        ok: false,\n        detail: error instanceof Error ? error.message : String(error),\n      });\n    }\n  });\n}\n","import { startViewerServer } from \"@agent-inspect/viewer\";\n\nimport { openInDefaultBrowser } from \"./browser-open.js\";\n\nexport interface ServeCommandOptions {\n  dir?: string;\n  host?: string;\n  port?: string;\n  open?: boolean;\n  suite?: boolean;\n  workspace?: boolean;\n  config?: string;\n  cwd?: string;\n}\n\nfunction parsePort(value: string | undefined): number | undefined {\n  if (value === undefined) return undefined;\n  const parsed = Number(value);\n  if (!Number.isInteger(parsed) || parsed <= 0 || parsed > 65535) {\n    throw new Error(\"--port must be an integer between 1 and 65535.\");\n  }\n  return parsed;\n}\n\nexport async function serveCommand(options: ServeCommandOptions = {}): Promise<void> {\n  const port = parsePort(options.port);\n  const host = options.host?.trim() || \"127.0.0.1\";\n  const mode = options.suite ? \"suite\" : options.workspace ? \"workspace\" : \"traces\";\n  const info = await startViewerServer({\n    ...(options.dir !== undefined ? { traceDir: options.dir } : {}),\n    host,\n    ...(port !== undefined ? { port } : {}),\n    mode,\n    ...(options.config !== undefined ? { suiteConfigPath: options.config } : {}),\n    ...(options.cwd !== undefined ? { cwd: options.cwd } : {}),\n  });\n\n  console.log(`AgentInspect viewer (read-only, ${info.mode}): ${info.url}`);\n  if (info.mode === \"traces\") {\n    console.log(`Trace directory: ${info.traceDir}`);\n  }\n\n  if (options.open === true && host !== \"127.0.0.1\" && host !== \"localhost\") {\n    console.warn(\"Skipping browser open for non-local host binding.\");\n  } else if (options.open === true) {\n    const opened = await openInDefaultBrowser(info.url);\n    if (!opened.ok) {\n      console.warn(\"Viewer started, but the browser could not be opened automatically.\");\n      console.warn(`Open manually: ${info.url}`);\n    }\n  }\n\n  await new Promise<void>(() => {\n    // Keep process alive until interrupted.\n  });\n}\n","import type * as Studio from \"@agent-inspect/studio\";\n\nimport { openInDefaultBrowser } from \"./browser-open.js\";\n\nconst PACKAGE = \"@agent-inspect/studio\";\n\nexport interface StudioCommandOptions {\n  host?: string;\n  port?: string;\n  workspace?: string;\n  db?: string;\n  server?: boolean;\n  open?: boolean;\n  auth?: string;\n  passwordEnv?: string;\n  cwd?: string;\n  ingest?: string;\n  archiveFileDrop?: boolean;\n  ingestTokenEnv?: string;\n}\n\nexport interface StudioImportDropOptions {\n  workspace?: string;\n  db?: string;\n  dir?: string;\n  archive?: boolean;\n  cwd?: string;\n}\n\nexport interface StudioImportGitHubOptions {\n  workspace?: string;\n  db?: string;\n  repo: string;\n  runId: string;\n  artifact: string;\n  tokenEnv?: string;\n  cwd?: string;\n}\n\nexport interface StudioImportBundleOptions {\n  workspace?: string;\n  db?: string;\n  path: string;\n  cwd?: string;\n}\n\nfunction isModuleNotFound(e: unknown): boolean {\n  return (\n    e !== null &&\n    typeof e === \"object\" &&\n    \"code\" in e &&\n    ((e as NodeJS.ErrnoException).code === \"ERR_MODULE_NOT_FOUND\" ||\n      (e as NodeJS.ErrnoException).code === \"MODULE_NOT_FOUND\")\n  );\n}\n\nasync function loadStudio(): Promise<typeof Studio | null> {\n  try {\n    return (await import(\"@agent-inspect/studio\")) as typeof Studio;\n  } catch (e) {\n    if (isModuleNotFound(e)) {\n      console.error(\n        `The optional Studio analyzer is not installed. Run: npm install ${PACKAGE}`,\n      );\n      process.exitCode = 1;\n      return null;\n    }\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] failed to load ${PACKAGE}: ${msg}`);\n    process.exitCode = 1;\n    return null;\n  }\n}\n\nfunction parsePort(value: string | undefined): number | undefined {\n  if (value === undefined) return undefined;\n  const parsed = Number(value);\n  if (!Number.isInteger(parsed) || parsed <= 0 || parsed > 65535) {\n    throw new Error(\"--port must be an integer between 1 and 65535.\");\n  }\n  return parsed;\n}\n\nfunction summarizeFileDropResult(result: Studio.FileDropImportResult): void {\n  if (result.skipped) {\n    console.log(`[AgentInspect studio] file-drop skipped: ${result.reason ?? \"disabled\"}`);\n    return;\n  }\n  console.log(\n    `[AgentInspect studio] file-drop scanned=${result.scanned} imported=${result.imported} skipped=${result.skippedFiles}`,\n  );\n  for (const warning of result.warnings) {\n    console.warn(`[AgentInspect studio] ${warning}`);\n  }\n  for (const error of result.errors) {\n    console.error(`[AgentInspect studio] ${error}`);\n  }\n}\n\nfunction summarizeGitHubResult(result: Studio.GitHubArtifactImportResult): void {\n  if (result.skipped) {\n    console.log(`[AgentInspect studio] github import skipped: ${result.reason ?? \"disabled\"}`);\n    return;\n  }\n  if (result.imported) {\n    console.log(\n      `[AgentInspect studio] github artifact imported to ${result.destPath ?? \"(unknown)\"}`,\n    );\n  } else if (result.destPath) {\n    console.log(`[AgentInspect studio] github artifact unchanged: ${result.destPath}`);\n  }\n  for (const warning of result.registryImportWarnings) {\n    console.warn(`[AgentInspect studio] ${warning}`);\n  }\n  for (const error of result.errors) {\n    console.error(`[AgentInspect studio] ${error}`);\n  }\n}\n\nexport async function studioImportBundleCommand(\n  options: StudioImportBundleOptions,\n): Promise<void> {\n  const mod = await loadStudio();\n  if (!mod) return;\n\n  const result = await mod.runStudioBundleUploadImport({\n    ...(options.workspace !== undefined ? { workspacePath: options.workspace } : {}),\n    ...(options.db !== undefined ? { dbPath: options.db } : {}),\n    bundlePath: options.path,\n    ...(options.cwd !== undefined ? { cwd: options.cwd } : {}),\n  });\n\n  if (result.skipped) {\n    console.log(`[AgentInspect studio] bundle import skipped: ${result.reason ?? \"disabled\"}`);\n  } else if (result.imported) {\n    console.log(`[AgentInspect studio] bundle imported to ${result.destPath ?? \"(unknown)\"}`);\n  } else if (result.destPath) {\n    console.log(`[AgentInspect studio] bundle unchanged: ${result.destPath}`);\n  }\n  for (const warning of result.registryImportWarnings) {\n    console.warn(`[AgentInspect studio] ${warning}`);\n  }\n  for (const error of result.errors) {\n    console.error(`[AgentInspect studio] ${error}`);\n  }\n  if (result.errors.length > 0) process.exitCode = 1;\n}\n\nexport async function studioImportGitHubCommand(\n  options: StudioImportGitHubOptions,\n): Promise<void> {\n  const mod = await loadStudio();\n  if (!mod) return;\n\n  const result = await mod.runStudioGitHubArtifactImport({\n    ...(options.workspace !== undefined ? { workspacePath: options.workspace } : {}),\n    ...(options.db !== undefined ? { dbPath: options.db } : {}),\n    repo: options.repo,\n    runId: options.runId,\n    artifact: options.artifact,\n    ...(options.tokenEnv !== undefined ? { tokenEnv: options.tokenEnv } : {}),\n    ...(options.cwd !== undefined ? { cwd: options.cwd } : {}),\n  });\n  summarizeGitHubResult(result);\n  if (result.errors.length > 0) {\n    process.exitCode = 1;\n  }\n}\n\nexport async function studioImportDropCommand(\n  options: StudioImportDropOptions = {},\n): Promise<void> {\n  const mod = await loadStudio();\n  if (!mod) return;\n\n  const result = await mod.runStudioFileDropImport({\n    ...(options.workspace !== undefined ? { workspacePath: options.workspace } : {}),\n    ...(options.db !== undefined ? { dbPath: options.db } : {}),\n    ...(options.dir !== undefined ? { dropDir: options.dir } : {}),\n    ...(options.archive === true ? { archiveAfterImport: true } : {}),\n    ...(options.cwd !== undefined ? { cwd: options.cwd } : {}),\n  });\n  summarizeFileDropResult(result);\n  if (result.errors.length > 0) {\n    process.exitCode = 1;\n  }\n}\n\nexport async function studioCommand(options: StudioCommandOptions = {}): Promise<void> {\n  const mod = await loadStudio();\n  if (!mod) return;\n\n  const ingest = options.ingest?.trim();\n  if (ingest && ingest !== \"file-drop\" && ingest !== \"http\") {\n    throw new Error(`Unsupported --ingest channel: ${ingest}. Supported: file-drop, http`);\n  }\n\n  const port = parsePort(options.port);\n  const host = options.host?.trim();\n  const info = await mod.startStudioServer({\n    ...(host !== undefined && host.length > 0 ? { host } : {}),\n    ...(port !== undefined ? { port } : {}),\n    ...(options.workspace !== undefined ? { workspacePath: options.workspace } : {}),\n    ...(options.db !== undefined ? { dbPath: options.db } : {}),\n    ...(options.server === true ? { server: true } : {}),\n    ...(options.cwd !== undefined ? { cwd: options.cwd } : {}),\n    ...(options.auth === \"basic\" ? { auth: \"basic\" as const } : {}),\n    ...(options.passwordEnv !== undefined ? { passwordEnv: options.passwordEnv } : {}),\n    ...(ingest === \"file-drop\" ? { ingestFileDrop: true } : {}),\n    ...(ingest === \"http\" ? { ingestHttp: true } : {}),\n    ...(options.ingestTokenEnv !== undefined ? { ingestTokenEnv: options.ingestTokenEnv } : {}),\n    ...(options.archiveFileDrop === true ? { archiveFileDrop: true } : {}),\n  });\n\n  if (ingest === \"file-drop\") {\n    console.log(`[AgentInspect studio] file-drop ingest enabled for startup scan`);\n  }\n  if (ingest === \"http\") {\n    console.log(`[AgentInspect studio] HTTP ingest enabled (token required on POST routes)`);\n  }\n\n  console.log(`AgentInspect studio (read-only): ${info.url}`);\n\n  if (options.open === true && info.host !== \"127.0.0.1\" && info.host !== \"localhost\") {\n    console.warn(\"Skipping browser open for non-local host binding.\");\n  } else if (options.open === true) {\n    const opened = await openInDefaultBrowser(info.url);\n    if (!opened.ok) {\n      console.warn(\"Studio started, but the browser could not be opened automatically.\");\n      console.warn(`Open manually: ${info.url}`);\n    }\n  }\n\n  await new Promise<void>(() => {\n    // Keep process alive until interrupted.\n  });\n}\n","import { fileURLToPath } from \"node:url\";\n\nimport {\n  openTrace,\n  TraceReadError,\n  type TraceInput,\n  type TraceReadResult,\n} from \"agent-inspect/readers\";\n\nexport type EvalStatus = \"pass\" | \"fail\" | \"error\";\nexport type EvalSeverity = \"error\" | \"warning\" | \"info\";\nexport type EvalFindingStatus = \"pass\" | \"fail\" | \"warning\";\nexport type EvalRuleCategory =\n  | \"run\"\n  | \"tool\"\n  | \"llm\"\n  | \"retrieval\"\n  | \"structure\"\n  | \"safety\"\n  | \"custom\";\n\nexport interface EvalEvidence {\n  runId?: string;\n  eventId?: string;\n  parentId?: string;\n  traceId?: string;\n  spanId?: string;\n  kind?: string;\n  name?: string;\n  path?: string;\n}\n\nexport interface EvalFinding {\n  ruleId: string;\n  status: EvalFindingStatus;\n  severity: EvalSeverity;\n  message: string;\n  expected?: unknown;\n  actual?: unknown;\n  evidence: EvalEvidence[];\n}\n\nexport interface EvalDiagnostic {\n  code:\n    | \"AI_EVAL_TRACE_UNREADABLE\"\n    | \"AI_EVAL_UNSUPPORTED_FORMAT\"\n    | \"AI_EVAL_AMBIGUOUS_FORMAT\"\n    | \"AI_EVAL_RUN_SELECTION_REQUIRED\"\n    | \"AI_EVAL_RULE_FAILED\"\n    | \"AI_EVAL_INVALID_ARGUMENTS\"\n    | \"AI_EVAL_INVALID_CONFIG\"\n    | \"AI_EVAL_CONFIG_LOAD_FAILED\";\n  severity: EvalSeverity;\n  message: string;\n  ruleId?: string;\n}\n\nexport type EvalDiagnosticCode = EvalDiagnostic[\"code\"];\n\nexport interface EvalSummary {\n  passed: number;\n  failed: number;\n  warnings: number;\n  errors: number;\n}\n\nexport interface EvalRunResult {\n  ok: boolean;\n  status: EvalStatus;\n  format: string;\n  runId?: string;\n  summary: EvalSummary;\n  findings: EvalFinding[];\n  diagnostics: EvalDiagnostic[];\n}\n\nexport interface EvalInput {\n  trace: string | URL | TraceReadResult;\n  runId?: string;\n  format?: \"agent-inspect-jsonl\" | \"openinference-json\" | \"otlp-json\" | \"auto\";\n}\n\nexport interface EvalRunOptions {\n  checks?: readonly EvalRule[];\n  runId?: string;\n  format?: EvalInput[\"format\"];\n}\n\nexport type EvalRunInput = EvalInput | string | TraceReadResult;\n\n/** Experimental options for deterministic answer/context overlap checks. */\nexport interface ContextOverlapOptions {\n  minOverlap?: number;\n  minSharedTerms?: number;\n  answerKeys?: readonly string[];\n  contextKeys?: readonly string[];\n}\n\n/** Experimental options for deterministic quote grounding checks. */\nexport interface QuoteOverlapOptions {\n  answerKeys?: readonly string[];\n  contextKeys?: readonly string[];\n  minQuoteLength?: number;\n  requireQuote?: boolean;\n}\n\n/** Experimental options for deterministic citation presence checks. */\nexport interface CitationPresenceOptions {\n  answerKeys?: readonly string[];\n  citationKeys?: readonly string[];\n}\n\n/** Experimental options for deterministic source-id checks. */\nexport interface RequiredSourceIdsOptions {\n  sourceIdKeys?: readonly string[];\n}\n\n/** Experimental options for deterministic answer length checks. */\nexport interface AnswerLengthBoundsOptions {\n  minCharacters?: number;\n  maxCharacters?: number;\n  minWords?: number;\n  maxWords?: number;\n  answerKeys?: readonly string[];\n}\n\n/** Experimental options for deterministic unsupported-phrase checks. */\nexport interface BannedUnsupportedPhrasesOptions {\n  answerKeys?: readonly string[];\n}\n\nexport interface EvalRule {\n  id: string;\n  category: EvalRuleCategory;\n  severity?: EvalSeverity;\n  evaluate(context: EvalContext): readonly EvalFinding[];\n}\n\ntype EvalRunTree = TraceReadResult[\"runs\"][number];\ntype EvalNode = EvalRunTree[\"children\"][number];\ntype EvalEvent = EvalNode[\"event\"];\n\nexport interface EvalContext {\n  format: string;\n  run: EvalRunTree;\n  nodes: readonly EvalNode[];\n  events: readonly TraceReadResult[\"events\"][number][];\n}\n\nfunction isTraceReadResult(value: unknown): value is TraceReadResult {\n  return (\n    value !== null &&\n    typeof value === \"object\" &&\n    \"runs\" in value &&\n    \"events\" in value &&\n    \"format\" in value\n  );\n}\n\nfunction traceInputFrom(value: string | URL): TraceInput {\n  // URL.pathname is not a filesystem path on Windows (leading slash before\n  // the drive letter); fileURLToPath handles file: URLs on every platform.\n  return { type: \"file\", path: value instanceof URL ? fileURLToPath(value) : value };\n}\n\nasync function resolveRead(\n  input: EvalRunInput,\n  options: EvalRunOptions,\n): Promise<{ read?: TraceReadResult; runId?: string; diagnostics: EvalDiagnostic[] }> {\n  try {\n    if (typeof input === \"string\") {\n      const read = await openTrace(traceInputFrom(input), {\n        ...(options.format !== undefined && options.format !== \"auto\"\n          ? { format: options.format }\n          : {}),\n      });\n      return { read, runId: options.runId, diagnostics: [] };\n    }\n\n    if (isTraceReadResult(input)) {\n      return { read: input, runId: options.runId, diagnostics: [] };\n    }\n\n    if (isTraceReadResult(input.trace)) {\n      return { read: input.trace, runId: options.runId ?? input.runId, diagnostics: [] };\n    }\n\n    const format = options.format ?? input.format;\n    const read = await openTrace(traceInputFrom(input.trace), {\n      ...(format !== undefined && format !== \"auto\" ? { format } : {}),\n    });\n    return { read, runId: options.runId ?? input.runId, diagnostics: [] };\n  } catch (error) {\n    return { diagnostics: [diagnosticFromError(error)] };\n  }\n}\n\nfunction diagnosticFromError(error: unknown): EvalDiagnostic {\n  if (error instanceof TraceReadError) {\n    const code =\n      error.code === \"unsupported_format\"\n        ? \"AI_EVAL_UNSUPPORTED_FORMAT\"\n        : error.code === \"ambiguous_format\"\n          ? \"AI_EVAL_AMBIGUOUS_FORMAT\"\n          : \"AI_EVAL_TRACE_UNREADABLE\";\n    return { code, severity: \"error\", message: error.message };\n  }\n  return {\n    code: \"AI_EVAL_TRACE_UNREADABLE\",\n    severity: \"error\",\n    message: error instanceof Error ? error.message : String(error),\n  };\n}\n\nfunction flatten(nodes: readonly EvalNode[]): EvalNode[] {\n  return nodes.flatMap((node) => [node, ...flatten(node.children)]);\n}\n\nfunction selectRun(\n  read: TraceReadResult,\n  runId: string | undefined,\n): { run?: EvalRunTree; diagnostics: EvalDiagnostic[] } {\n  if (runId !== undefined) {\n    const run = read.runs.find((candidate) => candidate.runId === runId);\n    return run === undefined\n      ? {\n          diagnostics: [\n            {\n              code: \"AI_EVAL_RUN_SELECTION_REQUIRED\",\n              severity: \"error\",\n              message: `Run not found: ${runId}.`,\n            },\n          ],\n        }\n      : { run, diagnostics: [] };\n  }\n\n  if (read.runs.length === 1) {\n    return { run: read.runs[0], diagnostics: [] };\n  }\n\n  if (read.runs.length === 0) {\n    return {\n      diagnostics: [\n        {\n          code: \"AI_EVAL_RUN_SELECTION_REQUIRED\",\n          severity: \"error\",\n          message: \"No runs are available for eval.\",\n        },\n      ],\n    };\n  }\n\n  return {\n    diagnostics: [\n      {\n        code: \"AI_EVAL_RUN_SELECTION_REQUIRED\",\n        severity: \"error\",\n        message: \"Multiple runs are available; select a run before eval.\",\n      },\n    ],\n  };\n}\n\nfunction errorResult(\n  format: string,\n  diagnostics: readonly EvalDiagnostic[],\n  runId?: string,\n): EvalRunResult {\n  const errors = diagnostics.filter((item) => item.severity === \"error\").length;\n  return {\n    ok: false,\n    status: \"error\",\n    format,\n    ...(runId !== undefined ? { runId } : {}),\n    summary: { passed: 0, failed: 0, warnings: 0, errors },\n    findings: [],\n    diagnostics: [...diagnostics],\n  };\n}\n\nfunction normalizeFinding(rule: EvalRule, finding: EvalFinding): EvalFinding {\n  return {\n    ...finding,\n    ruleId: finding.ruleId || rule.id,\n    severity: finding.severity ?? rule.severity ?? \"error\",\n    evidence: [...finding.evidence],\n  };\n}\n\nfunction compareFindings(a: EvalFinding, b: EvalFinding): number {\n  const aEvidence = a.evidence[0];\n  const bEvidence = b.evidence[0];\n  return (\n    a.ruleId.localeCompare(b.ruleId) ||\n    (aEvidence?.runId ?? \"\").localeCompare(bEvidence?.runId ?? \"\") ||\n    (aEvidence?.eventId ?? \"\").localeCompare(bEvidence?.eventId ?? \"\") ||\n    (aEvidence?.path ?? \"\").localeCompare(bEvidence?.path ?? \"\") ||\n    a.message.localeCompare(b.message)\n  );\n}\n\nfunction summarize(findings: readonly EvalFinding[], ruleCount: number): EvalSummary {\n  const failed = findings.filter((item) => item.status === \"fail\").length;\n  const warnings = findings.filter((item) => item.status === \"warning\").length;\n  const errors = findings.filter((item) => item.severity === \"error\").length;\n  return {\n    passed: Math.max(0, ruleCount - failed - warnings),\n    failed,\n    warnings,\n    errors,\n  };\n}\n\nfunction defaultRules(): EvalRule[] {\n  return [checks.requireSuccess()];\n}\n\nexport async function evalRun(\n  input: EvalRunInput,\n  options: EvalRunOptions = {},\n): Promise<EvalRunResult> {\n  const resolved = await resolveRead(input, options);\n  if (resolved.read === undefined) {\n    return errorResult(\"unknown\", resolved.diagnostics);\n  }\n\n  const selected = selectRun(resolved.read, resolved.runId);\n  if (selected.run === undefined) {\n    return errorResult(resolved.read.format, selected.diagnostics, resolved.runId);\n  }\n\n  const rules = [...(options.checks ?? defaultRules())].sort((a, b) =>\n    a.id.localeCompare(b.id),\n  );\n  const context: EvalContext = {\n    format: resolved.read.format,\n    run: selected.run,\n    nodes: flatten(selected.run.children),\n    events: resolved.read.events.filter((event) => event.runId === selected.run?.runId),\n  };\n\n  const diagnostics: EvalDiagnostic[] = [];\n  const findings: EvalFinding[] = [];\n  for (const rule of rules) {\n    try {\n      findings.push(...rule.evaluate(context).map((finding) => normalizeFinding(rule, finding)));\n    } catch (error) {\n      diagnostics.push({\n        code: \"AI_EVAL_RULE_FAILED\",\n        severity: \"error\",\n        ruleId: rule.id,\n        message: `Eval rule ${rule.id} failed: ${\n          error instanceof Error ? error.message : String(error)\n        }`,\n      });\n    }\n  }\n\n  if (diagnostics.length > 0) {\n    return errorResult(resolved.read.format, diagnostics, selected.run.runId);\n  }\n\n  const sortedFindings = findings.sort(compareFindings);\n  const summary = summarize(sortedFindings, rules.length);\n  const status = summary.failed > 0 ? \"fail\" : \"pass\";\n  return {\n    ok: status === \"pass\",\n    status,\n    format: resolved.read.format,\n    runId: selected.run.runId,\n    summary,\n    findings: sortedFindings,\n    diagnostics: [],\n  };\n}\n\nfunction evidenceForRun(run: EvalRunTree, path?: string): EvalEvidence[] {\n  return [{ runId: run.runId, ...(path !== undefined ? { path } : {}) }];\n}\n\nfunction evidenceForEvent(event: EvalEvent, path?: string): EvalEvidence[] {\n  return [\n    {\n      runId: event.runId,\n      eventId: event.eventId,\n      ...(event.parentId !== undefined ? { parentId: event.parentId } : {}),\n      kind: event.kind,\n      name: event.name,\n      ...(path !== undefined ? { path } : {}),\n    },\n  ];\n}\n\nfunction fail(\n  ruleId: string,\n  message: string,\n  evidence: EvalEvidence[],\n  expected?: unknown,\n  actual?: unknown,\n): EvalFinding {\n  return {\n    ruleId,\n    status: \"fail\",\n    severity: \"error\",\n    message,\n    ...(expected !== undefined ? { expected } : {}),\n    ...(actual !== undefined ? { actual } : {}),\n    evidence,\n  };\n}\n\nfunction nodeNames(nodes: readonly EvalNode[], kind?: string): string[] {\n  return nodes\n    .filter((node) => kind === undefined || node.event.kind === kind)\n    .map((node) => node.event.name)\n    .sort((a, b) => a.localeCompare(b));\n}\n\nfunction hasAttribute(node: EvalNode, key: string): boolean {\n  return (\n    node.event.attributes !== undefined &&\n    Object.prototype.hasOwnProperty.call(node.event.attributes, key)\n  );\n}\n\nfunction numericAttribute(node: EvalNode, keys: readonly string[]): number | undefined {\n  const attrs = node.event.attributes;\n  if (attrs === undefined) return undefined;\n  for (const key of keys) {\n    const value = attrs[key];\n    if (typeof value === \"number\" && Number.isFinite(value)) return value;\n  }\n  return undefined;\n}\n\nfunction totalTokenCount(events: readonly TraceReadResult[\"events\"][number][]): number {\n  return events.reduce((total, event) => {\n    const usage = event.tokenUsage;\n    if (usage?.total !== undefined) return total + usage.total;\n    return total + (usage?.input ?? 0) + (usage?.output ?? 0);\n  }, 0);\n}\n\nfunction createRule(\n  id: string,\n  category: EvalRuleCategory,\n  evaluate: EvalRule[\"evaluate\"],\n): EvalRule {\n  return { id, category, severity: \"error\", evaluate };\n}\n\nconst DEFAULT_ANSWER_KEYS = [\n  \"answer\",\n  \"finalAnswer\",\n  \"final\",\n  \"response\",\n  \"result\",\n  \"output\",\n  \"outputPreview\",\n  \"completion\",\n  \"text\",\n] as const;\n\nconst DEFAULT_CONTEXT_KEYS = [\n  \"context\",\n  \"contexts\",\n  \"document\",\n  \"documents\",\n  \"retrieved\",\n  \"retrieval\",\n  \"chunks\",\n  \"chunk\",\n  \"source\",\n  \"sources\",\n  \"sourceText\",\n] as const;\n\nconst DEFAULT_CITATION_KEYS = [\n  \"citation\",\n  \"citations\",\n  \"reference\",\n  \"references\",\n  \"sourceId\",\n  \"sourceIds\",\n  \"source_id\",\n  \"source_ids\",\n] as const;\n\nconst DEFAULT_SOURCE_ID_KEYS = [\n  ...DEFAULT_CITATION_KEYS,\n  \"id\",\n  \"ids\",\n  \"documentId\",\n  \"documentIds\",\n  \"docId\",\n  \"docIds\",\n] as const;\n\nconst DEFAULT_BANNED_UNSUPPORTED_PHRASES = [\n  \"i don't have enough information\",\n  \"i do not have enough information\",\n  \"not enough context\",\n  \"cannot determine from the context\",\n  \"unable to determine from the provided context\",\n] as const;\n\nconst STOP_WORDS = new Set([\n  \"a\",\n  \"an\",\n  \"and\",\n  \"are\",\n  \"but\",\n  \"for\",\n  \"from\",\n  \"have\",\n  \"into\",\n  \"not\",\n  \"that\",\n  \"the\",\n  \"their\",\n  \"this\",\n  \"was\",\n  \"were\",\n  \"with\",\n  \"you\",\n  \"your\",\n]);\n\ninterface TextField {\n  text: string;\n  node: EvalNode;\n  path: string;\n}\n\nfunction normalizeKey(key: string): string {\n  return key.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n}\n\nfunction keySet(keys: readonly string[]): Set<string> {\n  return new Set(keys.map(normalizeKey));\n}\n\nfunction valuesAsStrings(value: unknown, depth = 0): string[] {\n  if (depth > 5) return [];\n  if (typeof value === \"string\") {\n    const trimmed = value.trim();\n    return trimmed.length > 0 ? [trimmed] : [];\n  }\n  if (typeof value === \"number\" || typeof value === \"boolean\") return [String(value)];\n  if (Array.isArray(value)) {\n    return value.flatMap((item) => valuesAsStrings(item, depth + 1));\n  }\n  if (value !== null && typeof value === \"object\") {\n    return Object.values(value as Record<string, unknown>).flatMap((item) =>\n      valuesAsStrings(item, depth + 1),\n    );\n  }\n  return [];\n}\n\nfunction collectTextFields(\n  nodes: readonly EvalNode[],\n  keys: readonly string[],\n  preferredKinds: readonly string[] = [],\n): TextField[] {\n  const wanted = keySet(keys);\n  const preferred = new Set(preferredKinds);\n  const orderedNodes = [...nodes].sort((a, b) => {\n    const aPreferred = preferred.has(a.event.kind) ? 0 : 1;\n    const bPreferred = preferred.has(b.event.kind) ? 0 : 1;\n    return aPreferred - bPreferred || a.event.eventId.localeCompare(b.event.eventId);\n  });\n  const fields: TextField[] = [];\n  for (const node of orderedNodes) {\n    const attrs = node.event.attributes;\n    if (attrs === undefined) continue;\n    for (const [key, value] of Object.entries(attrs)) {\n      if (!wanted.has(normalizeKey(key))) continue;\n      for (const text of valuesAsStrings(value)) {\n        fields.push({ text, node, path: `attributes.${key}` });\n      }\n    }\n  }\n  return fields;\n}\n\nfunction tokenize(text: string): string[] {\n  return [...text.toLowerCase().matchAll(/[a-z0-9][a-z0-9'-]{2,}/g)]\n    .map((match) => match[0].replace(/^['-]+|['-]+$/g, \"\"))\n    .filter((token) => token.length > 2 && !STOP_WORDS.has(token));\n}\n\nfunction firstEvidence(\n  fields: readonly TextField[],\n  run: EvalRunTree,\n  path: string,\n): EvalEvidence[] {\n  const first = fields[0];\n  return first === undefined\n    ? evidenceForRun(run, path)\n    : evidenceForEvent(first.node.event, first.path);\n}\n\nfunction collectSourceIds(\n  nodes: readonly EvalNode[],\n  keys: readonly string[],\n): string[] {\n  const wanted = keySet(keys);\n  const ids = new Set<string>();\n  for (const node of nodes) {\n    const attrs = node.event.attributes;\n    if (attrs === undefined) continue;\n    for (const [key, value] of Object.entries(attrs)) {\n      if (!wanted.has(normalizeKey(key))) continue;\n      for (const candidate of valuesAsStrings(value)) {\n        const trimmed = candidate.trim();\n        if (trimmed.length > 0 && trimmed.length <= 128) ids.add(trimmed);\n      }\n    }\n  }\n  return [...ids].sort((a, b) => a.localeCompare(b));\n}\n\nfunction citationCount(answer: string, citationFields: readonly TextField[]): number {\n  const inline =\n    answer.match(/\\[[^\\]\\n]{1,40}\\]|\\([A-Za-z][A-Za-z0-9_-]{0,39}\\)/g)?.length ?? 0;\n  return inline + citationFields.length;\n}\n\nfunction quotedSnippets(text: string, minLength: number): string[] {\n  const snippets = new Set<string>();\n  const pattern = /\"([^\"\\n]+)\"|'([^'\\n]+)'|“([^”\\n]+)”/g;\n  for (const match of text.matchAll(pattern)) {\n    const snippet = (match[1] ?? match[2] ?? match[3] ?? \"\").trim();\n    if (snippet.length >= minLength) snippets.add(snippet);\n  }\n  return [...snippets].sort((a, b) => a.localeCompare(b));\n}\n\nfunction wordCount(text: string): number {\n  return tokenize(text).length;\n}\n\nexport const checks = {\n  requireSuccess(): EvalRule {\n    return createRule(\"eval.requireSuccess\", \"run\", (context) =>\n      context.run.status === \"ok\"\n        ? []\n        : [\n            fail(\n              \"eval.requireSuccess\",\n              \"Run did not complete successfully.\",\n              evidenceForRun(context.run, \"status\"),\n              \"ok\",\n              context.run.status ?? \"unknown\",\n            ),\n          ],\n    );\n  },\n\n  requiredTools(required: readonly string[]): EvalRule {\n    const expected = [...required].sort((a, b) => a.localeCompare(b));\n    return createRule(\"eval.requiredTools\", \"tool\", (context) => {\n      const tools = new Set(nodeNames(context.nodes, \"TOOL\"));\n      return expected\n        .filter((name) => !tools.has(name))\n        .map((name) =>\n          fail(\n            \"eval.requiredTools\",\n            `Required tool ${name} did not appear.`,\n            evidenceForRun(context.run, \"children\"),\n            name,\n            [...tools].sort((a, b) => a.localeCompare(b)),\n          ),\n        );\n    });\n  },\n\n  forbiddenTools(forbidden: readonly string[]): EvalRule {\n    const blocked = [...forbidden].sort((a, b) => a.localeCompare(b));\n    return createRule(\"eval.forbiddenTools\", \"tool\", (context) =>\n      context.nodes\n        .filter((node) => node.event.kind === \"TOOL\" && blocked.includes(node.event.name))\n        .map((node) =>\n          fail(\n            \"eval.forbiddenTools\",\n            `Forbidden tool ${node.event.name} appeared.`,\n            evidenceForEvent(node.event, \"name\"),\n            \"tool absent\",\n            node.event.name,\n          ),\n        ),\n    );\n  },\n\n  maxDurationMs(maxDurationMs: number): EvalRule {\n    return createRule(\"eval.maxDurationMs\", \"run\", (context) =>\n      context.run.durationMs !== undefined && context.run.durationMs > maxDurationMs\n        ? [\n            fail(\n              \"eval.maxDurationMs\",\n              `Run duration exceeded ${maxDurationMs}ms.`,\n              evidenceForRun(context.run, \"durationMs\"),\n              { maxDurationMs },\n              context.run.durationMs,\n            ),\n          ]\n        : [],\n    );\n  },\n\n  maxDepth(maxDepth: number): EvalRule {\n    return createRule(\"eval.maxDepth\", \"structure\", (context) => {\n      const deepest = context.nodes.reduce<EvalNode | undefined>(\n        (current, node) =>\n          current === undefined || node.depth > current.depth ? node : current,\n        undefined,\n      );\n      return deepest !== undefined && deepest.depth > maxDepth\n        ? [\n            fail(\n              \"eval.maxDepth\",\n              `Run tree depth exceeded ${maxDepth}.`,\n              evidenceForEvent(deepest.event, \"depth\"),\n              { maxDepth },\n              deepest.depth,\n            ),\n          ]\n        : [];\n    });\n  },\n\n  maxRetries(maxRetries: number): EvalRule {\n    return createRule(\"eval.maxRetries\", \"structure\", (context) =>\n      context.nodes.flatMap((node) => {\n        const retries = numericAttribute(node, [\"retryCount\", \"retries\", \"attempt\"]);\n        return retries !== undefined && retries > maxRetries\n          ? [\n              fail(\n                \"eval.maxRetries\",\n                `Retry count exceeded ${maxRetries}.`,\n                evidenceForEvent(node.event, \"attributes.retryCount\"),\n                { maxRetries },\n                retries,\n              ),\n            ]\n          : [];\n      }),\n    );\n  },\n\n  maxTotalTokens(maxTotalTokens: number): EvalRule {\n    return createRule(\"eval.maxTotalTokens\", \"llm\", (context) => {\n      const total = totalTokenCount(context.events);\n      return total > maxTotalTokens\n        ? [\n            fail(\n              \"eval.maxTotalTokens\",\n              `Total token usage exceeded ${maxTotalTokens}.`,\n              evidenceForRun(context.run, \"tokenUsage.total\"),\n              { maxTotalTokens },\n              total,\n            ),\n          ]\n        : [];\n    });\n  },\n\n  noFailedSteps(): EvalRule {\n    return createRule(\"eval.noFailedSteps\", \"run\", (context) =>\n      context.nodes\n        .filter((node) => node.event.status === \"error\" || node.event.kind === \"ERROR\")\n        .map((node) =>\n          fail(\n            \"eval.noFailedSteps\",\n            \"Run contains a failed step or error node.\",\n            evidenceForEvent(node.event, \"status\"),\n            \"no failed nodes\",\n            node.event.status ?? node.event.kind,\n          ),\n        ),\n    );\n  },\n\n  requiredRetrievalBeforeGeneration(): EvalRule {\n    return createRule(\"eval.requiredRetrievalBeforeGeneration\", \"retrieval\", (context) => {\n      const firstLlmIndex = context.nodes.findIndex((node) => node.event.kind === \"LLM\");\n      if (firstLlmIndex === -1) return [];\n      const retrievalIndex = context.nodes.findIndex(\n        (node, index) => index < firstLlmIndex && node.event.kind === \"RETRIEVER\",\n      );\n      return retrievalIndex === -1\n        ? [\n            fail(\n              \"eval.requiredRetrievalBeforeGeneration\",\n              \"No retrieval step appeared before the first LLM generation.\",\n              evidenceForEvent(context.nodes[firstLlmIndex].event, \"kind\"),\n              \"RETRIEVER before LLM\",\n              \"LLM before RETRIEVER\",\n            ),\n          ]\n        : [];\n    });\n  },\n\n  requiredDecisionMetadata(keys: readonly string[]): EvalRule {\n    const required = [...keys].sort((a, b) => a.localeCompare(b));\n    return createRule(\"eval.requiredDecisionMetadata\", \"structure\", (context) => {\n      const decisions = context.nodes.filter((node) => node.event.kind === \"DECISION\");\n      if (decisions.length === 0) {\n        return [\n          fail(\n            \"eval.requiredDecisionMetadata\",\n            \"No decision node is available for required metadata.\",\n            evidenceForRun(context.run, \"children\"),\n            { decisionMetadata: required },\n            \"no decision nodes\",\n          ),\n        ];\n      }\n      return decisions.flatMap((node) =>\n        required\n          .filter((key) => !hasAttribute(node, key))\n          .map((key) =>\n            fail(\n              \"eval.requiredDecisionMetadata\",\n              `Decision metadata ${key} is missing.`,\n              evidenceForEvent(node.event, `attributes.${key}`),\n              key,\n              \"missing\",\n            ),\n          ),\n      );\n    });\n  },\n\n  contextOverlap(options: ContextOverlapOptions = {}): EvalRule {\n    const minOverlap = options.minOverlap ?? 0.1;\n    const minSharedTerms = options.minSharedTerms ?? 1;\n    const answerKeys = options.answerKeys ?? DEFAULT_ANSWER_KEYS;\n    const contextKeys = options.contextKeys ?? DEFAULT_CONTEXT_KEYS;\n    return createRule(\"eval.contextOverlap\", \"retrieval\", (context) => {\n      const answers = collectTextFields(context.nodes, answerKeys, [\"RESULT\", \"LLM\", \"AGENT\"]);\n      const contexts = collectTextFields(context.nodes, contextKeys, [\"RETRIEVER\", \"TOOL\"]);\n      if (answers.length === 0 || contexts.length === 0) {\n        return [\n          fail(\n            \"eval.contextOverlap\",\n            \"Answer and context text are required for overlap evaluation.\",\n            firstEvidence(answers.length > 0 ? answers : contexts, context.run, \"children\"),\n            { answer: \"present\", context: \"present\" },\n            { answerFields: answers.length, contextFields: contexts.length },\n          ),\n        ];\n      }\n\n      const answerTerms = new Set(tokenize(answers.map((field) => field.text).join(\" \")));\n      const contextTerms = new Set(tokenize(contexts.map((field) => field.text).join(\" \")));\n      const sharedTerms = [...answerTerms].filter((term) => contextTerms.has(term)).length;\n      const overlap = answerTerms.size === 0 ? 0 : sharedTerms / answerTerms.size;\n      return sharedTerms < minSharedTerms || overlap < minOverlap\n        ? [\n            fail(\n              \"eval.contextOverlap\",\n              \"Answer text did not sufficiently overlap retrieved context.\",\n              firstEvidence(answers, context.run, \"attributes.answer\"),\n              { minOverlap, minSharedTerms },\n              {\n                answerTerms: answerTerms.size,\n                contextTerms: contextTerms.size,\n                sharedTerms,\n                overlap: Number(overlap.toFixed(4)),\n              },\n            ),\n          ]\n        : [];\n    });\n  },\n\n  quoteOverlap(options: QuoteOverlapOptions = {}): EvalRule {\n    const answerKeys = options.answerKeys ?? DEFAULT_ANSWER_KEYS;\n    const contextKeys = options.contextKeys ?? DEFAULT_CONTEXT_KEYS;\n    const minQuoteLength = options.minQuoteLength ?? 6;\n    const requireQuote = options.requireQuote ?? true;\n    return createRule(\"eval.quoteOverlap\", \"retrieval\", (context) => {\n      const answers = collectTextFields(context.nodes, answerKeys, [\"RESULT\", \"LLM\", \"AGENT\"]);\n      const contexts = collectTextFields(context.nodes, contextKeys, [\"RETRIEVER\", \"TOOL\"]);\n      const answerText = answers.map((field) => field.text).join(\" \");\n      const contextText = contexts.map((field) => field.text).join(\" \").toLowerCase();\n      const quotes = quotedSnippets(answerText, minQuoteLength);\n      if (quotes.length === 0) {\n        return requireQuote\n          ? [\n              fail(\n                \"eval.quoteOverlap\",\n                \"Answer did not contain a quote for overlap evaluation.\",\n                firstEvidence(answers, context.run, \"attributes.answer\"),\n                { quotedText: \"present\" },\n                { quoteCount: 0 },\n              ),\n            ]\n          : [];\n      }\n      const missing = quotes.filter((quote) => !contextText.includes(quote.toLowerCase()));\n      return missing.length > 0\n        ? [\n            fail(\n              \"eval.quoteOverlap\",\n              \"Quoted answer text did not appear in retrieved context.\",\n              firstEvidence(answers, context.run, \"attributes.answer\"),\n              { allQuotesInContext: true },\n              { quoteCount: quotes.length, missingQuotes: missing.length },\n            ),\n          ]\n        : [];\n    });\n  },\n\n  citationPresence(options: CitationPresenceOptions = {}): EvalRule {\n    const answerKeys = options.answerKeys ?? DEFAULT_ANSWER_KEYS;\n    const citationKeys = options.citationKeys ?? DEFAULT_CITATION_KEYS;\n    return createRule(\"eval.citationPresence\", \"retrieval\", (context) => {\n      const answers = collectTextFields(context.nodes, answerKeys, [\"RESULT\", \"LLM\", \"AGENT\"]);\n      const citations = collectTextFields(context.nodes, citationKeys);\n      const count = citationCount(answers.map((field) => field.text).join(\" \"), citations);\n      return count === 0\n        ? [\n            fail(\n              \"eval.citationPresence\",\n              \"Answer did not include citations or source references.\",\n              firstEvidence(answers, context.run, \"attributes.answer\"),\n              { citationCount: \">= 1\" },\n              { citationCount: 0 },\n            ),\n          ]\n        : [];\n    });\n  },\n\n  requiredSourceIds(\n    requiredIds: readonly string[],\n    options: RequiredSourceIdsOptions = {},\n  ): EvalRule {\n    const expected = [...requiredIds].sort((a, b) => a.localeCompare(b));\n    const sourceIdKeys = options.sourceIdKeys ?? DEFAULT_SOURCE_ID_KEYS;\n    return createRule(\"eval.requiredSourceIds\", \"retrieval\", (context) => {\n      const available = collectSourceIds(context.nodes, sourceIdKeys);\n      const availableSet = new Set(available);\n      const missing = expected.filter((id) => !availableSet.has(id));\n      return missing.length > 0\n        ? [\n            fail(\n              \"eval.requiredSourceIds\",\n              \"Required source IDs were not present in trace context or citations.\",\n              evidenceForRun(context.run, \"children\"),\n              { sourceIds: expected },\n              { missingSourceIds: missing, availableSourceIds: available.slice(0, 20) },\n            ),\n          ]\n        : [];\n    });\n  },\n\n  answerLengthBounds(options: AnswerLengthBoundsOptions): EvalRule {\n    const answerKeys = options.answerKeys ?? DEFAULT_ANSWER_KEYS;\n    return createRule(\"eval.answerLengthBounds\", \"llm\", (context) => {\n      const answers = collectTextFields(context.nodes, answerKeys, [\"RESULT\", \"LLM\", \"AGENT\"]);\n      const answer = answers.map((field) => field.text).join(\" \").trim();\n      const characters = answer.length;\n      const words = wordCount(answer);\n      const tooShort =\n        (options.minCharacters !== undefined && characters < options.minCharacters) ||\n        (options.minWords !== undefined && words < options.minWords);\n      const tooLong =\n        (options.maxCharacters !== undefined && characters > options.maxCharacters) ||\n        (options.maxWords !== undefined && words > options.maxWords);\n      return answer.length === 0 || tooShort || tooLong\n        ? [\n            fail(\n              \"eval.answerLengthBounds\",\n              \"Answer length fell outside required bounds.\",\n              firstEvidence(answers, context.run, \"attributes.answer\"),\n              {\n                minCharacters: options.minCharacters,\n                maxCharacters: options.maxCharacters,\n                minWords: options.minWords,\n                maxWords: options.maxWords,\n              },\n              { characters, words },\n            ),\n          ]\n        : [];\n    });\n  },\n\n  bannedUnsupportedPhrases(\n    phrases: readonly string[] = DEFAULT_BANNED_UNSUPPORTED_PHRASES,\n    options: BannedUnsupportedPhrasesOptions = {},\n  ): EvalRule {\n    const answerKeys = options.answerKeys ?? DEFAULT_ANSWER_KEYS;\n    const banned = [...phrases].map((phrase) => phrase.toLowerCase()).sort();\n    return createRule(\"eval.bannedUnsupportedPhrases\", \"safety\", (context) => {\n      const answers = collectTextFields(context.nodes, answerKeys, [\"RESULT\", \"LLM\", \"AGENT\"]);\n      const answer = answers.map((field) => field.text).join(\" \").toLowerCase();\n      const matches = banned.filter((phrase) => answer.includes(phrase));\n      return matches.length > 0\n        ? [\n            fail(\n              \"eval.bannedUnsupportedPhrases\",\n              \"Answer contained banned unsupported-answer phrasing.\",\n              firstEvidence(answers, context.run, \"attributes.answer\"),\n              { bannedPhraseCount: banned.length },\n              { matchedPhraseCount: matches.length },\n            ),\n          ]\n        : [];\n    });\n  },\n} as const;\n\nexport function renderEvalMarkdown(result: EvalRunResult): string {\n  const lines = [\n    `# AgentInspect Eval`,\n    \"\",\n    `Status: ${result.status}`,\n    `Format: ${result.format}`,\n    ...(result.runId !== undefined ? [`Run: ${result.runId}`] : []),\n    `Summary: ${result.summary.passed} passed, ${result.summary.failed} failed, ${result.summary.warnings} warnings, ${result.summary.errors} errors`,\n  ];\n\n  if (result.diagnostics.length > 0) {\n    lines.push(\"\", \"## Diagnostics\");\n    for (const diagnostic of result.diagnostics) {\n      lines.push(`- ${diagnostic.code}: ${diagnostic.message}`);\n    }\n  }\n\n  if (result.findings.length > 0) {\n    lines.push(\"\", \"## Findings\");\n    for (const finding of result.findings) {\n      const path = finding.evidence[0]?.path;\n      lines.push(`- ${finding.ruleId}: ${finding.message}${path ? ` (${path})` : \"\"}`);\n    }\n  }\n\n  return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport {\n  createEvalCircuitRule,\n  createEvalGuardrailRule,\n  type EvalCircuitRuleOptions,\n  type EvalGuardrailRuleOptions,\n} from \"./safety-rules.js\";\n","import { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport {\n  checks,\n  evalRun,\n  renderEvalMarkdown,\n  type AnswerLengthBoundsOptions,\n  type CitationPresenceOptions,\n  type ContextOverlapOptions,\n  type EvalDiagnostic,\n  type EvalDiagnosticCode,\n  type EvalRule,\n  type QuoteOverlapOptions,\n  type RequiredSourceIdsOptions,\n  type EvalRunResult,\n} from \"@agent-inspect/eval\";\nimport {\n  TraceReadError,\n  openTrace,\n} from \"@agent-inspect/core/readers\";\n\nimport { inputFromTarget } from \"./trace-input.js\";\n\nexport interface EvalCommandOptions {\n  dir?: string;\n  format?: string;\n  run?: string;\n  config?: string;\n  json?: boolean;\n  markdown?: boolean;\n  requireSuccess?: boolean;\n  requiredTool?: string[];\n  forbidTool?: string[];\n  forbiddenTool?: string[];\n  maxDurationMs?: string;\n  maxDepth?: string;\n  maxRetries?: string;\n  maxTotalTokens?: string;\n  requireRetrievalBeforeGeneration?: boolean;\n  requiredDecisionMetadata?: string[];\n  contextOverlap?: boolean;\n  minContextOverlap?: string;\n  minSharedTerms?: string;\n  quoteOverlap?: boolean;\n  citationPresence?: boolean;\n  requiredSourceId?: string[];\n  minAnswerCharacters?: string;\n  maxAnswerCharacters?: string;\n  minAnswerWords?: string;\n  maxAnswerWords?: string;\n  bannedPhrase?: string[];\n}\n\ntype EvalConfig = {\n  eval?: {\n    requireSuccess?: boolean;\n    requiredTools?: string[];\n    forbiddenTools?: string[];\n    maxDurationMs?: number;\n    maxDepth?: number;\n    maxRetries?: number;\n    maxTotalTokens?: number;\n    requiredRetrievalBeforeGeneration?: boolean;\n    requiredDecisionMetadata?: string[];\n    contextOverlap?: boolean | ContextOverlapOptions;\n    quoteOverlap?: boolean | QuoteOverlapOptions;\n    citationPresence?: boolean | CitationPresenceOptions;\n    requiredSourceIds?: string[] | { ids: string[] } & RequiredSourceIdsOptions;\n    answerLengthBounds?: AnswerLengthBoundsOptions;\n    bannedUnsupportedPhrases?: string[];\n  };\n};\n\nconst CONFIG_EXTENSIONS = new Set([\".json\", \".js\", \".mjs\", \".cjs\"]);\nconst TS_CONFIG_EXTENSIONS = new Set([\".ts\", \".mts\", \".cts\"]);\n\nfunction diagnostic(\n  code: EvalDiagnosticCode,\n  message: string,\n  severity: EvalDiagnostic[\"severity\"] = \"error\",\n): EvalDiagnostic {\n  return { code, message, severity };\n}\n\nfunction errorResult(code: EvalDiagnosticCode, message: string, format = \"unknown\"): EvalRunResult {\n  return {\n    ok: false,\n    status: \"error\",\n    format,\n    summary: { passed: 0, failed: 0, warnings: 0, errors: 1 },\n    findings: [],\n    diagnostics: [diagnostic(code, message)],\n  };\n}\n\nfunction parseNumber(value: string | undefined, label: string): number | undefined {\n  if (value === undefined) return undefined;\n  const parsed = Number(value);\n  if (!Number.isFinite(parsed) || parsed < 0) {\n    throw new Error(`${label} must be a non-negative number.`);\n  }\n  return parsed;\n}\n\nfunction asStringArray(value: unknown, label: string): string[] | undefined {\n  if (value === undefined) return undefined;\n  if (!Array.isArray(value) || value.some((item) => typeof item !== \"string\")) {\n    throw new Error(`${label} must be an array of strings.`);\n  }\n  return value;\n}\n\nfunction asConfig(value: unknown): EvalConfig {\n  if (value === undefined || value === null) return {};\n  if (typeof value !== \"object\" || Array.isArray(value)) {\n    throw new Error(\"Config must export an object.\");\n  }\n  return value as EvalConfig;\n}\n\nasync function loadConfig(configPath: string | undefined): Promise<EvalConfig> {\n  if (configPath === undefined) return {};\n  const extension = path.extname(configPath);\n  if (TS_CONFIG_EXTENSIONS.has(extension)) {\n    throw new Error(\n      \"TypeScript eval configs require an explicit precompiled JavaScript config or future --config-loader support.\",\n    );\n  }\n  if (!CONFIG_EXTENSIONS.has(extension)) {\n    throw new Error(\"Unsupported eval config extension. Use .json, .js, .mjs, or .cjs.\");\n  }\n\n  const absolute = path.resolve(configPath);\n  if (extension === \".json\") {\n    const raw = await readFile(absolute, \"utf-8\");\n    return asConfig(JSON.parse(raw));\n  }\n\n  const mod = await import(pathToFileURL(absolute).href);\n  return asConfig(\"default\" in mod ? mod.default : mod);\n}\n\nfunction normalizeConfig(config: EvalConfig): NonNullable<EvalConfig[\"eval\"]> {\n  if (config.eval === undefined) return {};\n  if (typeof config.eval !== \"object\" || Array.isArray(config.eval)) {\n    throw new Error(\"eval config must be an object.\");\n  }\n  return config.eval;\n}\n\nfunction maybeAdd<T>(rules: EvalRule[], value: T | undefined, makeRule: (value: T) => EvalRule): void {\n  if (value !== undefined) rules.push(makeRule(value));\n}\n\nfunction optionObject<T extends object>(value: boolean | T | undefined): T | undefined {\n  if (value === undefined || value === false) return undefined;\n  if (value === true) return {} as T;\n  if (typeof value !== \"object\" || Array.isArray(value)) {\n    throw new Error(\"Eval heuristic config must be a boolean or object.\");\n  }\n  return value;\n}\n\nfunction sourceIdsFromConfig(\n  value: NonNullable<NonNullable<EvalConfig[\"eval\"]>[\"requiredSourceIds\"]> | undefined,\n): { ids: string[]; options?: RequiredSourceIdsOptions } | undefined {\n  if (value === undefined) return undefined;\n  if (Array.isArray(value)) return { ids: asStringArray(value, \"eval.requiredSourceIds\") ?? [] };\n  if (typeof value !== \"object\" || Array.isArray(value)) {\n    throw new Error(\"eval.requiredSourceIds must be an array or object.\");\n  }\n  const ids = asStringArray(value.ids, \"eval.requiredSourceIds.ids\") ?? [];\n  return { ids, options: { sourceIdKeys: value.sourceIdKeys } };\n}\n\nfunction buildRules(config: EvalConfig, options: EvalCommandOptions): EvalRule[] | undefined {\n  const evalConfig = normalizeConfig(config);\n  const rules: EvalRule[] = [];\n\n  if (evalConfig.requireSuccess || options.requireSuccess) rules.push(checks.requireSuccess());\n\n  const requiredTools = [\n    ...(asStringArray(evalConfig.requiredTools, \"eval.requiredTools\") ?? []),\n    ...(options.requiredTool ?? []),\n  ];\n  if (requiredTools.length > 0) rules.push(checks.requiredTools(requiredTools));\n\n  const forbiddenTools = [\n    ...(asStringArray(evalConfig.forbiddenTools, \"eval.forbiddenTools\") ?? []),\n    ...(options.forbidTool ?? []),\n    ...(options.forbiddenTool ?? []),\n  ];\n  if (forbiddenTools.length > 0) rules.push(checks.forbiddenTools(forbiddenTools));\n\n  const maxDurationMs =\n    parseNumber(options.maxDurationMs, \"--max-duration-ms\") ?? evalConfig.maxDurationMs;\n  maybeAdd(rules, maxDurationMs, checks.maxDurationMs);\n\n  const maxDepth = parseNumber(options.maxDepth, \"--max-depth\") ?? evalConfig.maxDepth;\n  maybeAdd(rules, maxDepth, checks.maxDepth);\n\n  const maxRetries = parseNumber(options.maxRetries, \"--max-retries\") ?? evalConfig.maxRetries;\n  maybeAdd(rules, maxRetries, checks.maxRetries);\n\n  const maxTotalTokens =\n    parseNumber(options.maxTotalTokens, \"--max-total-tokens\") ?? evalConfig.maxTotalTokens;\n  maybeAdd(rules, maxTotalTokens, checks.maxTotalTokens);\n\n  if (\n    evalConfig.requiredRetrievalBeforeGeneration ||\n    options.requireRetrievalBeforeGeneration\n  ) {\n    rules.push(checks.requiredRetrievalBeforeGeneration());\n  }\n\n  const requiredDecisionMetadata = [\n    ...(asStringArray(\n      evalConfig.requiredDecisionMetadata,\n      \"eval.requiredDecisionMetadata\",\n    ) ?? []),\n    ...(options.requiredDecisionMetadata ?? []),\n  ];\n  if (requiredDecisionMetadata.length > 0) {\n    rules.push(checks.requiredDecisionMetadata(requiredDecisionMetadata));\n  }\n\n  const contextOverlap = optionObject<ContextOverlapOptions>(evalConfig.contextOverlap);\n  const minOverlap = parseNumber(options.minContextOverlap, \"--min-context-overlap\");\n  const minSharedTerms = parseNumber(options.minSharedTerms, \"--min-shared-terms\");\n  if (contextOverlap !== undefined || options.contextOverlap || minOverlap !== undefined || minSharedTerms !== undefined) {\n    rules.push(checks.contextOverlap({ ...contextOverlap, minOverlap, minSharedTerms }));\n  }\n\n  const quoteOverlap = optionObject<QuoteOverlapOptions>(evalConfig.quoteOverlap);\n  if (quoteOverlap !== undefined || options.quoteOverlap) {\n    rules.push(checks.quoteOverlap(quoteOverlap));\n  }\n\n  const citationPresence = optionObject<CitationPresenceOptions>(evalConfig.citationPresence);\n  if (citationPresence !== undefined || options.citationPresence) {\n    rules.push(checks.citationPresence(citationPresence));\n  }\n\n  const sourceIds = sourceIdsFromConfig(evalConfig.requiredSourceIds);\n  const requiredSourceIds = [...(sourceIds?.ids ?? []), ...(options.requiredSourceId ?? [])];\n  if (requiredSourceIds.length > 0) {\n    rules.push(checks.requiredSourceIds(requiredSourceIds, sourceIds?.options));\n  }\n\n  const cliAnswerLength: AnswerLengthBoundsOptions = {\n    minCharacters: parseNumber(options.minAnswerCharacters, \"--min-answer-characters\"),\n    maxCharacters: parseNumber(options.maxAnswerCharacters, \"--max-answer-characters\"),\n    minWords: parseNumber(options.minAnswerWords, \"--min-answer-words\"),\n    maxWords: parseNumber(options.maxAnswerWords, \"--max-answer-words\"),\n  };\n  const hasCliAnswerLength = Object.values(cliAnswerLength).some((value) => value !== undefined);\n  if (evalConfig.answerLengthBounds !== undefined || hasCliAnswerLength) {\n    rules.push(checks.answerLengthBounds({ ...evalConfig.answerLengthBounds, ...cliAnswerLength }));\n  }\n\n  const bannedPhrases = [\n    ...(asStringArray(\n      evalConfig.bannedUnsupportedPhrases,\n      \"eval.bannedUnsupportedPhrases\",\n    ) ?? []),\n    ...(options.bannedPhrase ?? []),\n  ];\n  if (bannedPhrases.length > 0) rules.push(checks.bannedUnsupportedPhrases(bannedPhrases));\n\n  return rules.length > 0 ? rules : undefined;\n}\n\nfunction exitCodeFor(result: EvalRunResult): number {\n  if (result.status === \"pass\") return 0;\n  if (result.status === \"fail\") return 1;\n  return 2;\n}\n\nfunction stable(value: unknown): unknown {\n  if (Array.isArray(value)) return value.map(stable);\n  if (value === null || typeof value !== \"object\") return value;\n  const record = value as Record<string, unknown>;\n  return Object.fromEntries(\n    Object.keys(record)\n      .sort((a, b) => a.localeCompare(b))\n      .map((key) => [key, stable(record[key])]),\n  );\n}\n\nfunction printJson(result: EvalRunResult): void {\n  console.log(JSON.stringify(stable(result), null, 2));\n}\n\nfunction printHuman(result: EvalRunResult): void {\n  console.log(`Eval status: ${result.status}`);\n  console.log(`Format: ${result.format}`);\n  if (result.runId !== undefined) console.log(`Run: ${result.runId}`);\n  console.log(\n    `Summary: ${result.summary.failed} failed, ${result.summary.warnings} warning(s), ${result.summary.errors} error(s)`,\n  );\n  for (const diagnostic of result.diagnostics) {\n    console.log(`- ${diagnostic.code}: ${diagnostic.message}`);\n  }\n  for (const finding of result.findings) {\n    const path = finding.evidence[0]?.path;\n    console.log(`- ${finding.ruleId}: ${finding.message}${path ? ` (${path})` : \"\"}`);\n  }\n}\n\nfunction readErrorResult(error: unknown): EvalRunResult {\n  if (error instanceof TraceReadError) {\n    const code =\n      error.code === \"unsupported_format\"\n        ? \"AI_EVAL_UNSUPPORTED_FORMAT\"\n        : error.code === \"ambiguous_format\"\n          ? \"AI_EVAL_AMBIGUOUS_FORMAT\"\n          : \"AI_EVAL_TRACE_UNREADABLE\";\n    return errorResult(code, error.message);\n  }\n  return errorResult(\n    \"AI_EVAL_TRACE_UNREADABLE\",\n    error instanceof Error ? error.message : String(error),\n  );\n}\n\nexport async function evalCommand(\n  target: string,\n  options: EvalCommandOptions = {},\n  stdin: NodeJS.ReadableStream = process.stdin,\n): Promise<void> {\n  let result: EvalRunResult;\n  let phase: \"config\" | \"read\" = \"config\";\n\n  try {\n    const config = await loadConfig(options.config);\n    const rules = buildRules(config, options);\n    phase = \"read\";\n    const input = await inputFromTarget(target, options, stdin);\n    const read = await openTrace(input, {\n      ...(options.format !== undefined ? { format: options.format } : {}),\n    });\n    result = await evalRun(read, {\n      ...(rules !== undefined ? { checks: rules } : {}),\n      ...(options.run !== undefined ? { runId: options.run } : {}),\n    });\n  } catch (error) {\n    if (phase === \"config\") {\n      const message = error instanceof Error ? error.message : String(error);\n      const code: EvalDiagnosticCode =\n        message.startsWith(\"--\")\n          ? \"AI_EVAL_INVALID_ARGUMENTS\"\n          : error instanceof SyntaxError ||\n              message.includes(\"Unsupported eval config extension\") ||\n              message.includes(\"TypeScript eval configs\") ||\n              message.includes(\"Config must\") ||\n              message.includes(\"eval config\") ||\n              message.includes(\"must be an array\")\n            ? \"AI_EVAL_INVALID_CONFIG\"\n            : \"AI_EVAL_CONFIG_LOAD_FAILED\";\n      result = errorResult(code, message);\n    } else {\n      result = readErrorResult(error);\n    }\n  }\n\n  process.exitCode = exitCodeFor(result);\n  if (options.json) printJson(result);\n  else if (options.markdown) console.log(renderEvalMarkdown(result).trimEnd());\n  else printHuman(result);\n}\n","import { appendFile, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport {\n  TraceReadError,\n  openTrace,\n  type TraceReadResult,\n} from \"@agent-inspect/core/readers\";\nimport {\n  createBaselineRegressionRule,\n  createSafetyOversizedAttributeRule,\n  createSafetyRawContentRule,\n  createSafetyRedactionRule,\n  createSafetySecretPatternRule,\n  runTraceChecks,\n  summarizeSemanticParity,\n  type TraceCheckResult,\n  type TraceCheckRule,\n} from \"@agent-inspect/core/checks\";\nimport {\n  buildEvidenceCiPackage,\n  getTraceFilePath,\n  resolveTraceDir,\n  type EvidenceSafeStatus,\n} from \"@agent-inspect/core/advanced\";\nimport { createEvidenceCiArtifacts } from \"@agent-inspect/core/reporters\";\n\nimport { version as packageVersion } from \"../../../package.json\";\nimport { redactTraceContent } from \"./redact.js\";\nimport { inputFromTarget } from \"./trace-input.js\";\n\nexport interface ArtifactsCommandOptions {\n  dir?: string;\n  format?: string;\n  run?: string;\n  outputDir?: string;\n  baseline?: string;\n  baselineRun?: string;\n  githubSummary?: string;\n  json?: boolean;\n  /** Write Evidence v2 package on failure (commander may set false via --no-evidence). */\n  evidence?: boolean | undefined;\n  /**\n   * When true (default), evidence files are written only if checks/diff are not clean.\n   * Success stays quiet for evidence unless `--always-evidence`.\n   */\n  onFailureOnly?: boolean | undefined;\n  /** Force evidence emit even when checks pass. */\n  alwaysEvidence?: boolean | undefined;\n}\n\ntype SelectedRun = TraceReadResult[\"runs\"][number];\n\ninterface SafeTraceSummary {\n  format: string;\n  runId?: string;\n  runStatus?: string;\n  runDurationMs?: number;\n  runCount: number;\n  eventCount: number;\n  eventsByKind: Record<string, number>;\n  eventsByStatus: Record<string, number>;\n  readerWarnings: number;\n  unsupportedFields: number;\n}\n\ninterface ArtifactManifest {\n  status: \"ok\" | \"unsafe\" | \"regression\" | \"warning\" | \"unknown\";\n  outputDir: string;\n  files: string[];\n  trace: SafeTraceSummary;\n  check: {\n    status: TraceCheckResult[\"status\"];\n    findings: number;\n    diagnostics: number;\n  };\n  diff: {\n    status: TraceCheckResult[\"status\"] | \"not_requested\";\n    findings: number;\n    diagnostics: number;\n  };\n  githubSummary?: string;\n  note: string;\n}\n\nconst NOTE =\n  \"Generated locally by AgentInspect. Artifacts are best-effort summaries, not compliance or security certification.\";\n\nconst SAFETY_RULES: TraceCheckRule[] = [\n  createSafetyRawContentRule(),\n  createSafetyRedactionRule(),\n  createSafetySecretPatternRule(),\n  createSafetyOversizedAttributeRule({\n    maxStringLength: 16_384,\n    maxArrayLength: 1_000,\n    maxObjectKeys: 200,\n    maxSerializedBytes: 128 * 1024,\n  }),\n];\n\nfunction stable(value: unknown): unknown {\n  if (Array.isArray(value)) return value.map(stable);\n  if (value === null || typeof value !== \"object\") return value;\n  const record = value as Record<string, unknown>;\n  return Object.fromEntries(\n    Object.keys(record)\n      .sort((a, b) => a.localeCompare(b))\n      .map((key) => [key, stable(record[key])]),\n  );\n}\n\nfunction writeJson(value: unknown): string {\n  return `${JSON.stringify(stable(value), null, 2)}\\n`;\n}\n\nfunction escapeHtml(value: string): string {\n  return value\n    .replaceAll(\"&\", \"&amp;\")\n    .replaceAll(\"<\", \"&lt;\")\n    .replaceAll(\">\", \"&gt;\")\n    .replaceAll('\"', \"&quot;\");\n}\n\nfunction markdownTable(rows: readonly [string, string | number | undefined][]): string {\n  const lines = [\"| Field | Value |\", \"| --- | --- |\"];\n  for (const [key, value] of rows) {\n    lines.push(`| ${key} | ${value ?? \"unknown\"} |`);\n  }\n  return lines.join(\"\\n\");\n}\n\nfunction increment(record: Record<string, number>, key: string | undefined): void {\n  const label = key && key.trim() !== \"\" ? key : \"unknown\";\n  record[label] = (record[label] ?? 0) + 1;\n}\n\nfunction selectRun(read: TraceReadResult, runId: string | undefined): SelectedRun | undefined {\n  if (runId !== undefined) {\n    return read.runs.find((run) => run.runId === runId);\n  }\n  return read.runs.length === 1 ? read.runs[0] : undefined;\n}\n\nfunction summarizeTrace(read: TraceReadResult, run: SelectedRun | undefined): SafeTraceSummary {\n  const runId = run?.runId;\n  const scopedEvents =\n    runId === undefined ? read.events : read.events.filter((event) => event.runId === runId);\n  const eventsByKind: Record<string, number> = {};\n  const eventsByStatus: Record<string, number> = {};\n  for (const event of scopedEvents) {\n    increment(eventsByKind, event.kind);\n    increment(eventsByStatus, event.status);\n  }\n  return {\n    format: read.format,\n    ...(runId !== undefined ? { runId } : {}),\n    ...(run?.status !== undefined ? { runStatus: run.status } : {}),\n    ...(run?.durationMs !== undefined ? { runDurationMs: run.durationMs } : {}),\n    runCount: read.runs.length,\n    eventCount: scopedEvents.length,\n    eventsByKind: Object.fromEntries(Object.entries(eventsByKind).sort()),\n    eventsByStatus: Object.fromEntries(Object.entries(eventsByStatus).sort()),\n    readerWarnings: read.warnings.length,\n    unsupportedFields: read.unsupportedFields.length,\n  };\n}\n\nfunction renderCheckSection(result: TraceCheckResult): string {\n  const lines = [\n    `Status: ${result.status}`,\n    `Findings: ${result.findings.length}`,\n    `Diagnostics: ${result.diagnostics.length}`,\n  ];\n  for (const finding of result.findings.slice(0, 10)) {\n    const path = finding.evidence[0]?.path ?? \"(run)\";\n    lines.push(`- ${finding.ruleId}: ${finding.message} (${path})`);\n  }\n  for (const diagnostic of result.diagnostics.slice(0, 10)) {\n    lines.push(`- ${diagnostic.code}: ${diagnostic.message}`);\n  }\n  return lines.join(\"\\n\");\n}\n\nfunction renderMarkdown(\n  trace: SafeTraceSummary,\n  check: TraceCheckResult,\n  diff: TraceCheckResult | undefined,\n): string {\n  const lines = [\n    \"# AgentInspect CI Artifacts\",\n    \"\",\n    NOTE,\n    \"\",\n    \"## Trace\",\n    \"\",\n    markdownTable([\n      [\"Format\", trace.format],\n      [\"Run\", trace.runId],\n      [\"Run status\", trace.runStatus],\n      [\"Run duration ms\", trace.runDurationMs],\n      [\"Runs\", trace.runCount],\n      [\"Events\", trace.eventCount],\n      [\"Reader warnings\", trace.readerWarnings],\n      [\"Unsupported fields\", trace.unsupportedFields],\n    ]),\n    \"\",\n    \"## Safety check\",\n    \"\",\n    \"```text\",\n    renderCheckSection(check),\n    \"```\",\n    \"\",\n    \"## Baseline diff\",\n    \"\",\n  ];\n  if (diff) {\n    lines.push(\"```text\", renderCheckSection(diff), \"```\", \"\");\n  } else {\n    lines.push(\"No baseline was supplied.\", \"\");\n  }\n  return lines.join(\"\\n\");\n}\n\nfunction renderHtml(\n  trace: SafeTraceSummary,\n  check: TraceCheckResult,\n  diff: TraceCheckResult | undefined,\n): string {\n  const rows = [\n    [\"Format\", trace.format],\n    [\"Run\", trace.runId],\n    [\"Run status\", trace.runStatus],\n    [\"Run duration ms\", trace.runDurationMs],\n    [\"Runs\", trace.runCount],\n    [\"Events\", trace.eventCount],\n    [\"Reader warnings\", trace.readerWarnings],\n    [\"Unsupported fields\", trace.unsupportedFields],\n  ] as const;\n  const table = rows\n    .map(\n      ([key, value]) =>\n        `<tr><th>${escapeHtml(key)}</th><td>${escapeHtml(String(value ?? \"unknown\"))}</td></tr>`,\n    )\n    .join(\"\");\n  return `<!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 CI Artifacts</title>\n<style>body{font-family:system-ui,sans-serif;line-height:1.5;margin:1.5rem;max-width:960px;color:#111}table{border-collapse:collapse}th,td{border:1px solid #ddd;padding:0.35rem 0.5rem;text-align:left}pre{white-space:pre-wrap;background:#f8f8f8;padding:0.75rem;overflow:auto}</style>\n</head>\n<body>\n<h1>AgentInspect CI Artifacts</h1>\n<p>${escapeHtml(NOTE)}</p>\n<h2>Trace</h2>\n<table><tbody>${table}</tbody></table>\n<h2>Safety check</h2>\n<pre>${escapeHtml(renderCheckSection(check))}</pre>\n<h2>Baseline diff</h2>\n<pre>${escapeHtml(diff ? renderCheckSection(diff) : \"No baseline was supplied.\")}</pre>\n</body>\n</html>\n`;\n}\n\nasync function writeArtifact(\n  outputDir: string,\n  relativePath: string,\n  content: string,\n  files: string[],\n): Promise<void> {\n  const outPath = path.join(outputDir, relativePath);\n  await mkdir(path.dirname(outPath), { recursive: true });\n  await writeFile(outPath, content, \"utf-8\");\n  files.push(relativePath);\n}\n\nfunction readErrorMessage(error: unknown): string {\n  if (error instanceof TraceReadError) return error.message;\n  return error instanceof Error ? error.message : String(error);\n}\n\nfunction manifestStatus(\n  check: TraceCheckResult,\n  diff: TraceCheckResult | undefined,\n): ArtifactManifest[\"status\"] {\n  if (check.status === \"error\" || diff?.status === \"error\") return \"unknown\";\n  if (check.status === \"fail\") return \"unsafe\";\n  if (diff?.status === \"fail\") return \"regression\";\n  if (check.summary.warnings > 0 || (diff?.summary.warnings ?? 0) > 0) return \"warning\";\n  return \"ok\";\n}\n\nfunction toEvidenceStatus(status: ArtifactManifest[\"status\"]): EvidenceSafeStatus {\n  if (status === \"ok\") return \"SAFE\";\n  if (status === \"warning\") return \"SAFE WITH WARNINGS\";\n  if (status === \"unsafe\" || status === \"regression\") return \"UNSAFE\";\n  return \"UNKNOWN\";\n}\n\nfunction shouldWriteEvidence(\n  options: ArtifactsCommandOptions,\n  status: ArtifactManifest[\"status\"],\n): boolean {\n  if (options.alwaysEvidence === true) return true;\n  if (options.evidence === false) return false;\n  // Default: evidence only when checks are not clean (success stays quiet).\n  const onFailureOnly = options.onFailureOnly !== false;\n  if (!onFailureOnly) return true;\n  return status === \"unsafe\" || status === \"regression\" || status === \"unknown\" || status === \"warning\";\n}\n\nexport async function artifactsCommand(\n  target: string,\n  options: ArtifactsCommandOptions = {},\n  stdin: NodeJS.ReadableStream = process.stdin,\n): Promise<void> {\n  const outputDir =\n    options.outputDir !== undefined && options.outputDir.trim() !== \"\"\n      ? path.resolve(options.outputDir.trim())\n      : \"\";\n  if (outputDir === \"\") {\n    console.error(\"--output-dir is required.\");\n    process.exitCode = 1;\n    return;\n  }\n\n  let read: TraceReadResult;\n  try {\n    const input = await inputFromTarget(target, options, stdin);\n    read = await openTrace(input, {\n      ...(options.format !== undefined ? { format: options.format } : {}),\n    });\n  } catch (error) {\n    console.error(`[AgentInspect] artifacts failed: ${readErrorMessage(error)}`);\n    process.exitCode = 1;\n    return;\n  }\n\n  const selectedRun = selectRun(read, options.run);\n  const check = runTraceChecks(\n    { read },\n    {\n      rules: SAFETY_RULES,\n      ...(options.run !== undefined ? { runId: options.run } : {}),\n    },\n  );\n  const trace = summarizeTrace(read, selectedRun);\n\n  let diff: TraceCheckResult | undefined;\n  if (options.baseline !== undefined && options.baseline.trim() !== \"\") {\n    try {\n      const baselineInput = await inputFromTarget(options.baseline, options, stdin);\n      const baselineRead = await openTrace(baselineInput, {\n        ...(options.format !== undefined ? { format: options.format } : {}),\n      });\n      diff = runTraceChecks(\n        { read },\n        {\n          rules: [\n            createBaselineRegressionRule({\n              baseline: { read: baselineRead },\n              ...(options.baselineRun !== undefined ? { baselineRunId: options.baselineRun } : {}),\n              compareFormat: true,\n            }),\n          ],\n          ...(options.run !== undefined ? { runId: options.run } : {}),\n        },\n      );\n    } catch (error) {\n      console.error(`[AgentInspect] baseline diff failed: ${readErrorMessage(error)}`);\n      process.exitCode = 1;\n      return;\n    }\n  }\n\n  const files: string[] = [];\n  await mkdir(outputDir, { recursive: true });\n  await writeArtifact(outputDir, \"trace.json\", writeJson(trace), files);\n  await writeArtifact(outputDir, \"check.json\", writeJson(check), files);\n  await writeArtifact(\n    outputDir,\n    \"diff.json\",\n    writeJson(diff ?? { status: \"not_requested\", findings: [], diagnostics: [] }),\n    files,\n  );\n  await writeArtifact(outputDir, \"summary.md\", renderMarkdown(trace, check, diff), files);\n  await writeArtifact(outputDir, \"report.html\", renderHtml(trace, check, diff), files);\n\n  const status = manifestStatus(check, diff);\n  if (shouldWriteEvidence(options, status)) {\n    try {\n      const runIds =\n        selectedRun !== undefined\n          ? [selectedRun.runId]\n          : read.runs.map((run) => run.runId);\n      const traceDir = resolveTraceDir({ dir: options.dir });\n      const sourceContents = new Map<string, string>();\n      let combined = \"\";\n      for (const runId of runIds) {\n        const tracePath = getTraceFilePath(runId, traceDir);\n        let raw = \"\";\n        try {\n          raw = await readFile(tracePath, \"utf-8\");\n        } catch {\n          // Fall back to re-serializing known events for this run when file missing.\n          raw = `${read.events\n            .filter((event) => event.runId === runId)\n            .map((event) => JSON.stringify(event))\n            .join(\"\\n\")}\\n`;\n        }\n        sourceContents.set(runId, raw);\n        const redacted = redactTraceContent(raw, \"strict\");\n        combined += redacted.content.endsWith(\"\\n\")\n          ? redacted.content\n          : `${redacted.content}\\n`;\n      }\n      const checkResultsJson = writeJson({\n        aggregateStatus: toEvidenceStatus(status),\n        runs: runIds.map((runId) => ({\n          runId,\n          status: toEvidenceStatus(status),\n          errors: check.summary.errors,\n          warnings: check.summary.warnings,\n          findings: check.findings.length,\n        })),\n      });\n      const parity = summarizeSemanticParity(read.events);\n      const evidencePackage = buildEvidenceCiPackage({\n        generatorVersion: packageVersion,\n        runIds,\n        sourceContents,\n        redactedTraceJsonl: combined,\n        redactionProfile: \"strict\",\n        assessmentStatus: toEvidenceStatus(status),\n        checkResultsJson,\n        summaryText: renderMarkdown(trace, check, diff),\n        semantics: {\n          projectionVersion: \"logical-lifecycle-0.1\",\n          rawEventCount: parity.rawEventCount,\n          logicalEventCount: parity.logicalEventCount,\n          runningLogicalCount: parity.runningLogicalCount,\n          finishedToolCount: parity.finishedToolCount,\n          finishedToolNames: [...parity.finishedToolNames],\n          pairedCount: parity.pairedCount,\n          parentRemapCount: parity.parentRemapCount,\n          contractStatus: check.status === \"pass\" ? \"pass\" : check.status === \"fail\" ? \"fail\" : \"error\",\n          ...(parity.failureRoleCounts !== undefined\n            ? { failureRoleCounts: { ...parity.failureRoleCounts } }\n            : {}),\n        },\n      });\n      await writeArtifact(outputDir, \"evidence.html\", evidencePackage[\"evidence.html\"], files);\n      await writeArtifact(outputDir, \"evidence.json\", evidencePackage[\"evidence.json\"], files);\n      await writeArtifact(\n        outputDir,\n        \"check-results.json\",\n        evidencePackage[\"check-results.json\"],\n        files,\n      );\n      await writeArtifact(outputDir, \"trace.jsonl\", evidencePackage[\"trace.jsonl\"], files);\n      // Ensure standard CI descriptors stay aligned with written files.\n      const expected = createEvidenceCiArtifacts({ redactionProfile: \"strict\" }).map((a) => a.path);\n      for (const name of expected) {\n        if (!files.includes(name)) {\n          throw new Error(`Evidence CI package missing expected file: ${name}`);\n        }\n      }\n    } catch (error) {\n      console.error(\n        `[AgentInspect] evidence package skipped: ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  }\n\n  const summaryTarget = options.githubSummary ?? process.env.GITHUB_STEP_SUMMARY;\n  if (summaryTarget !== undefined && summaryTarget.trim() !== \"\") {\n    await mkdir(path.dirname(path.resolve(summaryTarget)), { recursive: true });\n    await appendFile(path.resolve(summaryTarget), `\\n${renderMarkdown(trace, check, diff)}`, \"utf-8\");\n  }\n\n  const manifestFiles = [...files, \"manifest.json\"].sort((a, b) => a.localeCompare(b));\n  const manifest: ArtifactManifest = {\n    status,\n    outputDir,\n    files: manifestFiles,\n    trace,\n    check: {\n      status: check.status,\n      findings: check.findings.length,\n      diagnostics: check.diagnostics.length,\n    },\n    diff: {\n      status: diff?.status ?? \"not_requested\",\n      findings: diff?.findings.length ?? 0,\n      diagnostics: diff?.diagnostics.length ?? 0,\n    },\n    ...(summaryTarget !== undefined && summaryTarget.trim() !== \"\"\n      ? { githubSummary: path.resolve(summaryTarget) }\n      : {}),\n    note: NOTE,\n  };\n  await writeFile(path.join(outputDir, \"manifest.json\"), writeJson(manifest), \"utf-8\");\n\n  if (options.json === true) {\n    console.log(writeJson(manifest).trimEnd());\n  } else {\n    console.log(`Wrote AgentInspect artifacts to ${outputDir}`);\n    console.log(`Status: ${manifest.status}`);\n    for (const file of manifest.files) {\n      console.log(`- ${file}`);\n    }\n  }\n}\n","import { mkdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport {\n  buildBundleMetadata,\n  buildBundleSummaryMarkdown,\n  buildEvidenceCausalFailureViewHtml,\n  buildEvidenceCircuitViewHtml,\n  buildEvidenceContractsViewHtml,\n  buildEvidenceDiffViewHtml,\n  buildEvidenceHtmlShell,\n  buildEvidenceManifest,\n  buildEvidenceOutcomesViewHtml,\n  buildEvidenceProvenanceViewHtml,\n  buildEvidenceSafetyViewHtml,\n  buildEvidenceTimelineViewHtml,\n  buildEvidenceToolsLlmViewHtml,\n  buildEvidenceTreeViewHtml,\n  buildPlaceholderArtifact,\n  buildSessionIndex,\n  buildZipArchive,\n  bundleFailsOnSafety,\n  collectTraceSchemaVersions,\n  defaultBundleOutputPath,\n  getTraceFilePath,\n  inferEvidenceFileRole,\n  normalizeBundleOutputPath,\n  parseDuration,\n  resolveBundleRunIds,\n  resolveTraceDir,\n  aggregateBundleSafeStatus,\n  sanitizeBundleRunId,\n  serializeEvidenceManifest,\n  sha256Hex,\n  bundleRunAssetRelativePath,\n  assertBundlePathContained,\n  assertEvidenceRelativePath,\n  EVIDENCE_FORMAT_VERSION,\n  EVIDENCE_HTML_FILENAME,\n  EVIDENCE_MANIFEST_FILENAME,\n  type BundleCheckResults,\n  type BundleRedactionProfile,\n  type BundleRedactionReport,\n  type BundleSafeStatus,\n  type EvidenceCheckFindingSummary,\n  type EvidencePackagedFile,\n  type EvidenceSourceHash,\n  type InspectRunTree,\n} from \"@agent-inspect/core/advanced\";\nimport { exportRunTree } from \"@agent-inspect/core/exporters\";\nimport { openTrace } from \"@agent-inspect/core/readers\";\nimport type { PersistedInspectEvent } from \"@agent-inspect/core/persisted\";\nimport { readWorkspaceManifestFile, resolveInsideWorkspace, resolveWorkspaceLocation } from \"@agent-inspect/core/workspace\";\nimport type { RedactionProfile } from \"@agent-inspect/redact\";\n\nimport { version as packageVersion } from \"../../../package.json\";\nimport {\n  resolveOutputOption,\n  resolveRedactionProfileOption,\n} from \"./cli-option-aliases.js\";\nimport { redactTraceContent } from \"./redact.js\";\nimport { assessOpenedTrace } from \"./safety.js\";\nimport { loadSessionRuns } from \"./sessions-load.js\";\n\nexport type BundleOutputFormat = \"directory\" | \"html\" | \"zip\";\n\nexport interface BundleCommandOptions {\n  dir?: string;\n  session?: string;\n  since?: string;\n  /** Canonical alias of `--profile`. */\n  redactionProfile?: string;\n  profile?: string;\n  /** Canonical alias of `--out`. */\n  output?: string;\n  out?: string;\n  /** Output mode: directory (default), html (+ sidecar), or zip. */\n  format?: BundleOutputFormat;\n  allowUnsafe?: boolean;\n  json?: boolean;\n  correlateGroup?: boolean;\n  staleAfter?: string;\n}\n\nconst BUNDLE_NOTE =\n  \"Generated locally by AgentInspect. Bundles are derived copies for review — not compliance or security certification.\";\n\nfunction stable(value: unknown): unknown {\n  if (Array.isArray(value)) return value.map(stable);\n  if (value === null || typeof value !== \"object\") return value;\n  const record = value as Record<string, unknown>;\n  return Object.fromEntries(\n    Object.keys(record)\n      .sort((a, b) => a.localeCompare(b))\n      .map((key) => [key, stable(record[key])]),\n  );\n}\n\nfunction writeJson(value: unknown): string {\n  return `${JSON.stringify(stable(value), null, 2)}\\n`;\n}\n\nfunction parseBundleProfile(value: string | undefined): BundleRedactionProfile {\n  if (value === undefined || value === \"local\" || value === \"share\" || value === \"strict\") {\n    return value ?? \"share\";\n  }\n  throw new Error(`Unsupported --profile \"${value}\". Use local, share, or strict.`);\n}\n\nfunction toReportProfile(profile: BundleRedactionProfile): RedactionProfile {\n  return profile;\n}\n\nfunction escapeHtml(value: string): string {\n  return value\n    .replaceAll(\"&\", \"&amp;\")\n    .replaceAll(\"<\", \"&lt;\")\n    .replaceAll(\">\", \"&gt;\")\n    .replaceAll('\"', \"&quot;\");\n}\n\nfunction safetyStatusFromAssess(status: string): BundleSafeStatus {\n  if (\n    status === \"SAFE\" ||\n    status === \"SAFE WITH WARNINGS\" ||\n    status === \"UNSAFE\" ||\n    status === \"UNKNOWN\"\n  ) {\n    return status;\n  }\n  return \"UNKNOWN\";\n}\n\nfunction parseBundleFormat(value: string | undefined): BundleOutputFormat {\n  if (value === undefined || value === \"directory\" || value === \"html\" || value === \"zip\") {\n    return value ?? \"directory\";\n  }\n  throw new Error(`Unsupported --format \"${value}\". Use directory, html, or zip.`);\n}\n\nasync function resolveOutputDir(\n  options: BundleCommandOptions,\n  runIds: readonly string[],\n  cwd: string,\n  format: BundleOutputFormat,\n): Promise<string> {\n  const out = resolveOutputOption(options);\n  if (out !== undefined) {\n    const normalized = normalizeBundleOutputPath(out, {\n      preserveZipExtension: format === \"zip\",\n    });\n    try {\n      const location = resolveWorkspaceLocation(cwd);\n      const manifest = await readWorkspaceManifestFile(location);\n      if (manifest.ok && manifest.manifest) {\n        const rel = path.relative(location.workspaceDir, normalized);\n        if (!rel.startsWith(\"..\") && !path.isAbsolute(rel)) {\n          return resolveInsideWorkspace(location.workspaceDir, rel);\n        }\n      }\n    } catch {\n      // not a workspace-relative path — use normalized absolute path\n    }\n    return normalized;\n  }\n\n  try {\n    const location = resolveWorkspaceLocation(cwd);\n    const manifest = await readWorkspaceManifestFile(location);\n    if (manifest.ok && manifest.manifest) {\n      const stamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n      const label =\n        runIds.length === 1 ? sanitizeBundleRunId(runIds[0]!) : `multi-${runIds.length}`;\n      const base = resolveInsideWorkspace(\n        location.workspaceDir,\n        path.join(manifest.manifest.bundlesDir, `bundle-${label}-${stamp}`),\n      );\n      return format === \"zip\" ? `${base}.zip` : base;\n    }\n  } catch {\n    // fall through\n  }\n\n  const base = defaultBundleOutputPath(runIds);\n  return format === \"zip\" ? `${base}.zip` : base;\n}\n\nfunction stageBundleFile(\n  relativePath: string,\n  content: string,\n  files: string[],\n  packaged: Map<string, string>,\n): void {\n  const safe = assertEvidenceRelativePath(relativePath);\n  if (!files.includes(safe)) files.push(safe);\n  packaged.set(safe, content);\n}\n\nfunction renderBundleIndexHtml(parts: {\n  runIds: readonly string[];\n  reports: ReadonlyMap<string, string>;\n}): string {\n  const links = parts.runIds\n    .map(\n      (runId) =>\n        `<li><a href=\"${escapeHtml(bundleRunAssetRelativePath(runId, \".html\"))}\">${escapeHtml(runId)}</a></li>`,\n    )\n    .join(\"\");\n  const sections = parts.runIds\n    .map((runId) => {\n      const html = parts.reports.get(runId) ?? \"\";\n      return `<section id=\"run-${escapeHtml(runId)}\"><h2>${escapeHtml(runId)}</h2>${html}</section>`;\n    })\n    .join(\"\\n\");\n  return `<!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 Bundle</title>\n<style>\nbody{font-family:system-ui,sans-serif;line-height:1.5;margin:1.5rem;max-width:960px;color:#111}\na{color:#0366d6}\nsection{border-top:1px solid #ddd;margin-top:1.5rem;padding-top:1rem}\n</style>\n</head>\n<body>\n<h1>AgentInspect trace bundle</h1>\n<p>${escapeHtml(BUNDLE_NOTE)}</p>\n<h2>Runs</h2>\n<ul>${links}</ul>\n${sections}\n</body>\n</html>\n`;\n}\n\nfunction extractHtmlBody(content: string): string {\n  const match = content.match(/<body[^>]*>([\\s\\S]*)<\\/body>/i);\n  return match?.[1]?.trim() ?? content;\n}\n\nexport async function bundleCommand(\n  runIdArg: string | undefined,\n  options: BundleCommandOptions = {},\n): Promise<void> {\n  const profile = parseBundleProfile(resolveRedactionProfileOption(options));\n  const format = parseBundleFormat(options.format);\n  const traceDir = resolveTraceDir({ dir: options.dir });\n  const cwd = process.cwd();\n\n  let resolveResult;\n  try {\n    const { runs } = await loadSessionRuns(traceDir);\n    const staleThresholdMs =\n      options.staleAfter && options.staleAfter.trim() !== \"\"\n        ? parseDuration(options.staleAfter.trim())\n        : undefined;\n    const index = buildSessionIndex(runs, {\n      correlateByGroupId: options.correlateGroup === true,\n      staleThresholdMs,\n    });\n    resolveResult = resolveBundleRunIds(index, runs, {\n      ...(runIdArg !== undefined && runIdArg.trim() !== \"\" ? { runId: runIdArg.trim() } : {}),\n      ...(options.session ? { sessionId: options.session } : {}),\n      ...(options.since ? { since: options.since } : {}),\n    });\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    if (options.json) {\n      console.log(writeJson({ ok: false, error: message }).trimEnd());\n    } else {\n      console.error(`[AgentInspect] bundle failed: ${message}`);\n    }\n    process.exitCode = 1;\n    return;\n  }\n\n  const outputDir = await resolveOutputDir(options, resolveResult.runIds, cwd, format);\n  const files: string[] = [];\n  const packaged = new Map<string, string>();\n  const checkRuns: BundleCheckResults[\"runs\"] = [];\n  const redactionRuns: BundleRedactionReport[\"runs\"] = [];\n  const htmlByRun = new Map<string, string>();\n  const redactedJsonlByRun = new Map<string, string>();\n  const artifactTrees: InspectRunTree[] = [];\n  const artifactEventsByRun = new Map<string, PersistedInspectEvent[]>();\n  const findingSummaries: EvidenceCheckFindingSummary[] = [];\n  const sourceHashes: EvidenceSourceHash[] = [];\n  const schemaVersions = new Set<string>();\n  let combinedJsonl = \"\";\n\n  for (const runId of resolveResult.runIds) {\n    const tracePath = getTraceFilePath(runId, traceDir);\n    let rawContent: string;\n    let sourceMtimeMs: number;\n    try {\n      rawContent = await readFile(tracePath, \"utf-8\");\n      sourceMtimeMs = (await stat(tracePath)).mtimeMs;\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      if (options.json) {\n        console.log(writeJson({ ok: false, error: message, runId }).trimEnd());\n      } else {\n        console.error(`[AgentInspect] bundle failed: ${message}`);\n      }\n      process.exitCode = 1;\n      return;\n    }\n\n    let read;\n    try {\n      read = await openTrace(\n        { type: \"file\", path: tracePath },\n        { format: \"agent-inspect-jsonl\" },\n      );\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      if (options.json) {\n        console.log(writeJson({ ok: false, error: message, runId }).trimEnd());\n      } else {\n        console.error(`[AgentInspect] bundle failed: ${message}`);\n      }\n      process.exitCode = 1;\n      return;\n    }\n\n    const sourceSafety = assessOpenedTrace(read, { run: runId });\n    const sourceStatus = safetyStatusFromAssess(sourceSafety.status);\n\n    sourceHashes.push({\n      runId,\n      algorithm: \"sha256\",\n      hash: sha256Hex(rawContent),\n    });\n    for (const version of collectTraceSchemaVersions(rawContent)) {\n      schemaVersions.add(version);\n    }\n\n    const redacted = redactTraceContent(rawContent, toReportProfile(profile));\n    redactedJsonlByRun.set(runId, redacted.content);\n    combinedJsonl += redacted.content.endsWith(\"\\n\") ? redacted.content : `${redacted.content}\\n`;\n\n    const detectors = [\n      ...new Set(redacted.findings.map((finding) => finding.detector)),\n    ].sort((a, b) => a.localeCompare(b));\n    redactionRuns.push({\n      runId,\n      findings: redacted.findings.length,\n      detectors,\n    });\n\n    let artifactSafety = sourceSafety;\n    let artifactTree: InspectRunTree | undefined;\n    try {\n      const artifactRead = await openTrace(\n        { type: \"string\", content: redacted.content },\n        { format: \"agent-inspect-jsonl\" },\n      );\n      artifactSafety = assessOpenedTrace(artifactRead, { run: runId });\n      artifactTree =\n        artifactRead.runs.find((run) => run.runId === runId) ?? artifactRead.runs[0];\n      artifactEventsByRun.set(\n        runId,\n        artifactRead.events.filter((event) => event.runId === runId),\n      );\n    } catch {\n      // If the redacted artifact cannot be re-read, fail closed on UNKNOWN.\n      artifactSafety = {\n        ...sourceSafety,\n        status: \"UNKNOWN\",\n        ok: false,\n        summary: {\n          findings: sourceSafety.summary.findings,\n          warnings: sourceSafety.summary.warnings,\n          errors: Math.max(1, sourceSafety.summary.errors),\n        },\n      };\n    }\n\n    for (const finding of artifactSafety.findings) {\n      findingSummaries.push({\n        runId,\n        ruleId: finding.ruleId,\n        severity: finding.severity,\n        message: finding.message,\n        ...(finding.category !== undefined ? { category: finding.category } : {}),\n        ...(finding.detector !== undefined ? { detector: finding.detector } : {}),\n        ...(finding.confidence !== undefined ? { confidence: finding.confidence } : {}),\n        ...(finding.action !== undefined ? { action: finding.action } : {}),\n      });\n    }\n\n    if (artifactTree) {\n      artifactTrees.push(artifactTree);\n    } else {\n      const selected = read.runs.find((run) => run.runId === runId);\n      if (selected) artifactTrees.push(selected);\n    }\n\n    const status = safetyStatusFromAssess(artifactSafety.status);\n    checkRuns.push({\n      runId,\n      status,\n      sourceStatus,\n      errors: artifactSafety.summary.errors,\n      warnings: artifactSafety.summary.warnings,\n      findings: artifactSafety.summary.findings,\n    });\n\n    const selected = read.runs.find((run) => run.runId === runId);\n    const runReport = exportRunTree(selected ?? read.runs[0]!, {\n      format: \"html\",\n      redacted: true,\n      redactionProfile: toReportProfile(profile),\n    });\n    htmlByRun.set(runId, extractHtmlBody(runReport.content));\n\n    // Verify source file was not mutated\n    const afterMtime = (await stat(tracePath)).mtimeMs;\n    if (afterMtime !== sourceMtimeMs) {\n      const message = `Source trace \"${runId}\" was modified during bundle creation.`;\n      if (options.json) {\n        console.log(writeJson({ ok: false, error: message }).trimEnd());\n      } else {\n        console.error(`[AgentInspect] bundle failed: ${message}`);\n      }\n      process.exitCode = 1;\n      return;\n    }\n  }\n\n  const checks: BundleCheckResults = {\n    aggregateStatus: aggregateBundleSafeStatus(checkRuns.map((run) => run.status)),\n    runs: checkRuns,\n  };\n\n  if (bundleFailsOnSafety(checks.aggregateStatus, options.allowUnsafe === true)) {\n    if (options.json) {\n      console.log(\n        writeJson({\n          ok: false,\n          error: `Bundle artifact safety status is ${checks.aggregateStatus}. Pass --allow-unsafe to override.`,\n          checks,\n        }).trimEnd(),\n      );\n    } else {\n      console.error(\n        `[AgentInspect] bundle refused: artifact safety status is ${checks.aggregateStatus}. Pass --allow-unsafe to override.`,\n      );\n    }\n    process.exitCode = 1;\n    return;\n  }\n\n  const redactionReport: BundleRedactionReport = {\n    profile,\n    totalFindings: redactionRuns.reduce((sum, run) => sum + run.findings, 0),\n    runs: redactionRuns,\n  };\n\n  for (const runId of resolveResult.runIds) {\n    const jsonl = redactedJsonlByRun.get(runId) ?? \"\";\n    stageBundleFile(\n      bundleRunAssetRelativePath(runId, \".jsonl\"),\n      jsonl,\n      files,\n      packaged,\n    );\n    const html = htmlByRun.get(runId) ?? \"\";\n    stageBundleFile(\n      bundleRunAssetRelativePath(runId, \".html\"),\n      runReportWrap(html, runId),\n      files,\n      packaged,\n    );\n  }\n\n  const primaryRunId = resolveResult.runIds[0]!;\n  const traceHtml =\n    resolveResult.runIds.length === 1\n      ? runReportWrap(htmlByRun.get(primaryRunId) ?? \"\", primaryRunId)\n      : renderBundleIndexHtml({ runIds: resolveResult.runIds, reports: htmlByRun });\n\n  stageBundleFile(\"trace.jsonl\", combinedJsonl, files, packaged);\n  stageBundleFile(\"trace.html\", traceHtml, files, packaged);\n  stageBundleFile(\"check-results.json\", writeJson(checks), files, packaged);\n  stageBundleFile(\n    \"eval-results.json\",\n    writeJson(buildPlaceholderArtifact()),\n    files,\n    packaged,\n  );\n  stageBundleFile(\n    \"redaction-report.json\",\n    writeJson(redactionReport),\n    files,\n    packaged,\n  );\n  stageBundleFile(\n    \"performance-summary.json\",\n    writeJson(buildPlaceholderArtifact()),\n    files,\n    packaged,\n  );\n\n  const summaryPath = \"summary.md\";\n  const metadataPath = \"metadata.json\";\n\n  const aggregateSourceStatus = aggregateBundleSafeStatus(\n    checkRuns.map((run) => run.sourceStatus ?? run.status),\n  );\n\n  // Known packaged names before writing summary/html/manifest so summary + metadata agree.\n  const metadataFileList = [\n    ...files,\n    summaryPath,\n    EVIDENCE_HTML_FILENAME,\n    metadataPath,\n    EVIDENCE_MANIFEST_FILENAME,\n  ]\n    .filter((name, index, all) => all.indexOf(name) === index)\n    .sort((a, b) => a.localeCompare(b));\n\n  const metadata = buildBundleMetadata({\n    agentInspectVersion: packageVersion,\n    profile,\n    resolve: resolveResult,\n    checks,\n    files: metadataFileList,\n  });\n  const summaryMd = buildBundleSummaryMarkdown({\n    metadata,\n    checks,\n    redaction: redactionReport,\n  });\n  const evidenceHtml = buildEvidenceHtmlShell({\n    title: \"AgentInspect evidence\",\n    runIds: resolveResult.runIds,\n    assessmentStatus: checks.aggregateStatus,\n    sourceStatus: aggregateSourceStatus,\n    redactionProfile: profile,\n    verificationPolicy: profile,\n    generatorName: \"agent-inspect\",\n    generatorVersion: packageVersion,\n    createdAt: metadata.createdAt,\n    summaryText: summaryMd,\n    checkSummary: {\n      aggregateStatus: checks.aggregateStatus,\n      runs: checkRuns,\n    },\n    viewBodies: {\n      tree: buildEvidenceTreeViewHtml(artifactTrees),\n      timeline: buildEvidenceTimelineViewHtml(artifactTrees),\n      causal: buildEvidenceCausalFailureViewHtml(artifactTrees),\n      \"tools-llm\": buildEvidenceToolsLlmViewHtml(artifactTrees),\n      contracts: buildEvidenceContractsViewHtml({\n        aggregateStatus: checks.aggregateStatus,\n        runs: checkRuns,\n        findingSummaries,\n      }),\n      outcomes: buildEvidenceOutcomesViewHtml(\n        resolveResult.runIds.map((id) => ({\n          runId: id,\n          events: artifactEventsByRun.get(id) ?? [],\n        })),\n      ),\n      circuit: buildEvidenceCircuitViewHtml(),\n      diff:\n        resolveResult.runIds.length >= 2\n          ? buildEvidenceDiffViewHtml({\n              leftRunId: resolveResult.runIds[0]!,\n              rightRunId: resolveResult.runIds[1]!,\n              leftEvents: artifactEventsByRun.get(resolveResult.runIds[0]!) ?? [],\n              rightEvents: artifactEventsByRun.get(resolveResult.runIds[1]!) ?? [],\n            })\n          : buildEvidenceDiffViewHtml(),\n      safety: buildEvidenceSafetyViewHtml({\n        artifactStatus: checks.aggregateStatus,\n        sourceStatus: aggregateSourceStatus,\n        redactionProfile: profile,\n        verificationPolicy: profile,\n        redaction: redactionReport,\n        findingSummaries,\n      }),\n      provenance: buildEvidenceProvenanceViewHtml({\n        generatorName: \"agent-inspect\",\n        generatorVersion: packageVersion,\n        evidenceFormatVersion: EVIDENCE_FORMAT_VERSION,\n        createdAt: metadata.createdAt,\n        runIds: resolveResult.runIds,\n        traceSchemaVersions: [...schemaVersions].sort((a, b) => a.localeCompare(b)),\n        sourceHashes,\n        packagedFiles: metadataFileList\n          .filter((name) => name !== EVIDENCE_MANIFEST_FILENAME)\n          .map((name) => ({ path: name, role: inferEvidenceFileRole(name) })),\n      }),\n    },\n  });\n\n  stageBundleFile(EVIDENCE_HTML_FILENAME, evidenceHtml, files, packaged);\n  stageBundleFile(summaryPath, summaryMd, files, packaged);\n\n  const metadataJson = writeJson(metadata);\n  packaged.set(metadataPath, metadataJson);\n  if (!files.includes(metadataPath)) {\n    files.push(metadataPath);\n  }\n\n  const evidenceFiles: EvidencePackagedFile[] = [...packaged.entries()].map(\n    ([relativePath, content]) => ({ path: relativePath, content }),\n  );\n\n  const evidence = buildEvidenceManifest({\n    generatorVersion: packageVersion,\n    runIds: resolveResult.runIds,\n    traceSchemaVersions: [...schemaVersions].sort((a, b) => a.localeCompare(b)),\n    sourceHashes,\n    redactionProfile: profile,\n    verificationPolicy: profile,\n    assessmentStatus: checks.aggregateStatus,\n    sourceStatus: aggregateSourceStatus,\n    files: evidenceFiles,\n    createdAt: metadata.createdAt,\n  });\n  let evidenceJson = serializeEvidenceManifest(evidence);\n  let outputPath = outputDir;\n\n  if (format === \"html\") {\n    const htmlContent = packaged.get(EVIDENCE_HTML_FILENAME) ?? evidenceHtml;\n    const htmlEvidence = buildEvidenceManifest({\n      generatorVersion: packageVersion,\n      runIds: resolveResult.runIds,\n      traceSchemaVersions: [...schemaVersions].sort((a, b) => a.localeCompare(b)),\n      sourceHashes,\n      redactionProfile: profile,\n      verificationPolicy: profile,\n      assessmentStatus: checks.aggregateStatus,\n      sourceStatus: aggregateSourceStatus,\n      files: [{ path: EVIDENCE_HTML_FILENAME, content: htmlContent }],\n      createdAt: metadata.createdAt,\n    });\n    evidenceJson = serializeEvidenceManifest(htmlEvidence);\n\n    let htmlPath = outputDir;\n    let sidecarDir = outputDir;\n    if (outputDir.toLowerCase().endsWith(\".html\")) {\n      htmlPath = outputDir;\n      sidecarDir = path.dirname(outputDir);\n    } else {\n      await mkdir(outputDir, { recursive: true });\n      htmlPath = path.join(outputDir, EVIDENCE_HTML_FILENAME);\n      sidecarDir = outputDir;\n    }\n    await mkdir(sidecarDir, { recursive: true });\n    await writeFile(htmlPath, htmlContent, \"utf-8\");\n    await writeFile(path.join(sidecarDir, EVIDENCE_MANIFEST_FILENAME), evidenceJson, \"utf-8\");\n    outputPath = htmlPath;\n  } else if (format === \"zip\") {\n    const zipPath = outputDir.toLowerCase().endsWith(\".zip\")\n      ? outputDir\n      : `${outputDir}.zip`;\n    const zipParent = path.dirname(zipPath);\n    await mkdir(zipParent, { recursive: true });\n    const entries = [\n      ...[...packaged.entries()].map(([relativePath, content]) => ({\n        path: relativePath,\n        content,\n      })),\n      { path: EVIDENCE_MANIFEST_FILENAME, content: evidenceJson },\n    ];\n    const archive = buildZipArchive(entries);\n    await writeFile(zipPath, archive);\n    outputPath = zipPath;\n  } else {\n    await mkdir(outputDir, { recursive: true });\n    for (const [relativePath, content] of packaged.entries()) {\n      const outPath = assertBundlePathContained(outputDir, relativePath);\n      await mkdir(path.dirname(outPath), { recursive: true });\n      await writeFile(outPath, content, \"utf-8\");\n    }\n    await writeFile(path.join(outputDir, EVIDENCE_MANIFEST_FILENAME), evidenceJson, \"utf-8\");\n    if (!files.includes(EVIDENCE_MANIFEST_FILENAME)) {\n      files.push(EVIDENCE_MANIFEST_FILENAME);\n    }\n    outputPath = outputDir;\n  }\n\n  if (options.json) {\n    console.log(\n      writeJson({\n        ok: true,\n        format,\n        outputDir: outputPath,\n        metadata,\n        evidence: format === \"html\" ? JSON.parse(evidenceJson) : evidence,\n        checks,\n        redaction: redactionReport,\n      }).trimEnd(),\n    );\n    return;\n  }\n\n  console.log(`Bundle written to ${outputPath}`);\n  console.log(`Format: ${format}`);\n  console.log(`Safe status: ${metadata.safeStatus}`);\n  console.log(`Runs: ${resolveResult.runIds.join(\", \")}`);\n  console.log(`Files: ${metadata.files.length}`);\n}\n\nfunction runReportWrap(body: string, runId: string): string {\n  return `<!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 — ${escapeHtml(runId)}</title>\n<style>body{font-family:system-ui,sans-serif;line-height:1.5;margin:1.5rem;max-width:960px;color:#111}</style>\n</head>\n<body>\n${body}\n</body>\n</html>\n`;\n}\n","import path from \"node:path\";\n\nimport { verifyEvidenceDirectory } from \"@agent-inspect/core/advanced\";\n\nexport interface BundleVerifyCommandOptions {\n  json?: boolean;\n  unexpected?: \"fail\" | \"warn\" | \"ignore\";\n}\n\nfunction writeJson(value: unknown): string {\n  return `${JSON.stringify(value, null, 2)}\\n`;\n}\n\n/**\n * `agent-inspect bundle verify <path>` — integrity check for Evidence v2 directories.\n */\nexport async function bundleVerifyCommand(\n  targetPath: string,\n  options: BundleVerifyCommandOptions = {},\n): Promise<void> {\n  const root = path.resolve(targetPath.trim() || \".\");\n  const result = await verifyEvidenceDirectory(root, {\n    unexpectedFiles: options.unexpected ?? \"fail\",\n  });\n\n  if (options.json) {\n    console.log(\n      writeJson({\n        ok: result.ok,\n        status: result.status,\n        root: result.root,\n        checkedFiles: result.checkedFiles,\n        issues: result.issues,\n        assessment: result.manifest?.assessment,\n        generator: result.manifest?.generator,\n      }).trimEnd(),\n    );\n  } else if (result.ok) {\n    console.log(`Evidence verify: pass (${result.checkedFiles} file(s) checked)`);\n    console.log(`Root: ${result.root}`);\n    if (result.manifest?.assessment?.status) {\n      console.log(`Assessment: ${result.manifest.assessment.status}`);\n    }\n  } else {\n    console.error(`Evidence verify: fail (${result.issues.length} issue(s))`);\n    console.error(`Root: ${result.root}`);\n    for (const issue of result.issues) {\n      console.error(`- [${issue.severity}] ${issue.code}: ${issue.message}`);\n    }\n  }\n\n  if (!result.ok) {\n    process.exitCode = 1;\n  }\n}\n","import { access, readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport { verifyEvidenceDirectory } from \"@agent-inspect/core/advanced\";\n\nimport { openInDefaultBrowser } from \"./browser-open.js\";\n\nexport interface BundleOpenCommandOptions {\n  json?: boolean;\n  skipVerify?: boolean;\n}\n\nfunction writeJson(value: unknown): string {\n  return `${JSON.stringify(value, null, 2)}\\n`;\n}\n\nasync function resolveHtmlPath(root: string): Promise<string> {\n  const candidates = [\n    path.join(root, \"evidence.html\"),\n    root.toLowerCase().endsWith(\".html\") ? root : \"\",\n  ].filter(Boolean);\n  for (const candidate of candidates) {\n    try {\n      const info = await stat(candidate);\n      if (info.isFile()) return candidate;\n    } catch {\n      // try next\n    }\n  }\n  throw new Error(\n    `No evidence.html found under ${root}. Pass a bundle directory or .html path.`,\n  );\n}\n\n/**\n * `agent-inspect bundle open <path>` — verify then open local Evidence HTML (no network).\n */\nexport async function bundleOpenCommand(\n  targetPath: string,\n  options: BundleOpenCommandOptions = {},\n): Promise<void> {\n  const root = path.resolve(targetPath.trim() || \".\");\n  try {\n    await access(root);\n  } catch {\n    const message = `Evidence path not found: ${root}`;\n    if (options.json) {\n      console.log(writeJson({ ok: false, error: message }).trimEnd());\n    } else {\n      console.error(`[AgentInspect] ${message}`);\n    }\n    process.exitCode = 1;\n    return;\n  }\n\n  let verifyRoot = root;\n  try {\n    const info = await stat(root);\n    if (info.isFile() && root.toLowerCase().endsWith(\".html\")) {\n      verifyRoot = path.dirname(root);\n    }\n  } catch {\n    // handled above\n  }\n\n  if (options.skipVerify !== true) {\n    const result = await verifyEvidenceDirectory(verifyRoot, {\n      unexpectedFiles: \"fail\",\n    });\n    if (!result.ok) {\n      if (options.json) {\n        console.log(\n          writeJson({\n            ok: false,\n            error: \"Evidence verify failed\",\n            root: result.root,\n            issues: result.issues,\n          }).trimEnd(),\n        );\n      } else {\n        console.error(`Evidence verify: fail (${result.issues.length} issue(s))`);\n        for (const issue of result.issues) {\n          console.error(`- [${issue.severity}] ${issue.code}: ${issue.message}`);\n        }\n        console.error(\"Fix integrity issues or pass --skip-verify (not recommended).\");\n      }\n      process.exitCode = 1;\n      return;\n    }\n  }\n\n  let htmlPath: string;\n  try {\n    htmlPath = await resolveHtmlPath(\n      root.toLowerCase().endsWith(\".html\") ? path.dirname(root) : root,\n    );\n    if (root.toLowerCase().endsWith(\".html\")) {\n      htmlPath = root;\n    }\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    if (options.json) {\n      console.log(writeJson({ ok: false, error: message }).trimEnd());\n    } else {\n      console.error(`[AgentInspect] ${message}`);\n    }\n    process.exitCode = 1;\n    return;\n  }\n\n  // Touch manifest when present so open stays evidence-aware without network.\n  try {\n    await readFile(path.join(path.dirname(htmlPath), \"evidence.json\"), \"utf-8\");\n  } catch {\n    // html-only open still allowed after verify when sidecar exists elsewhere\n  }\n\n  const fileUrl = pathToFileURL(htmlPath).href;\n  const opened = await openInDefaultBrowser(fileUrl);\n  if (options.json) {\n    console.log(\n      writeJson({\n        ok: opened.ok,\n        path: htmlPath,\n        opened: opened.ok,\n        detail: opened.ok ? fileUrl : `${opened.detail ?? \"unknown error\"}; open manually: ${fileUrl}`,\n      }).trimEnd(),\n    );\n  } else if (opened.ok) {\n    console.log(`Opened local Evidence: ${htmlPath}`);\n    console.log(`URL: ${fileUrl}`);\n  } else {\n    console.error(`[AgentInspect] Could not open browser automatically.`);\n    console.error(`Open this file locally: ${htmlPath}`);\n    console.error(`${opened.detail ?? \"unknown error\"}; open manually: ${fileUrl}`);\n  }\n\n  if (!opened.ok) {\n    process.exitCode = 0; // artifact is valid; open failure is non-fatal\n  }\n}\n","/**\n * Generate MCP client config snippets for coding agents (dry-run by default).\n */\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport type McpConfigureClient = \"cursor\" | \"claude-code\" | \"codex\" | \"gemini\";\n\nexport interface McpConfigureOptions {\n  client: McpConfigureClient;\n  dir?: string;\n  projectLocal?: boolean;\n  write?: boolean;\n  yes?: boolean;\n  json?: boolean;\n}\n\nexport interface McpConfigureResult {\n  client: McpConfigureClient;\n  dryRun: boolean;\n  wrote: boolean;\n  targetPath: string | null;\n  config: Record<string, unknown>;\n  notes: string[];\n}\n\nconst CLIENTS: readonly McpConfigureClient[] = [\n  \"cursor\",\n  \"claude-code\",\n  \"codex\",\n  \"gemini\",\n];\n\nexport function isMcpConfigureClient(value: string): value is McpConfigureClient {\n  return (CLIENTS as readonly string[]).includes(value);\n}\n\nfunction buildServerBlock(traceDir: string): Record<string, unknown> {\n  return {\n    command: \"npx\",\n    args: [\"-y\", \"@agent-inspect/mcp-server\", \"--dir\", traceDir],\n    env: {\n      AGENT_INSPECT_TRACE_DIR: traceDir,\n      AGENT_INSPECT_MCP_REDACTION_PROFILE: \"share\",\n    },\n  };\n}\n\nexport function buildMcpClientConfig(\n  client: McpConfigureClient,\n  traceDir: string,\n): Record<string, unknown> {\n  const server = buildServerBlock(traceDir);\n  switch (client) {\n    case \"cursor\":\n      return {\n        mcpServers: {\n          \"agent-inspect\": server,\n        },\n      };\n    case \"claude-code\":\n      return {\n        mcpServers: {\n          \"agent-inspect\": server,\n        },\n      };\n    case \"codex\":\n      return {\n        mcp_servers: {\n          \"agent-inspect\": {\n            command: server.command,\n            args: server.args,\n            env: server.env,\n          },\n        },\n      };\n    case \"gemini\":\n      return {\n        mcpServers: {\n          \"agent-inspect\": server,\n        },\n      };\n    default: {\n      const _exhaustive: never = client;\n      return _exhaustive;\n    }\n  }\n}\n\nfunction resolveTargetPath(\n  client: McpConfigureClient,\n  projectLocal: boolean,\n): string {\n  if (projectLocal) {\n    switch (client) {\n      case \"cursor\":\n        return path.join(\".cursor\", \"mcp.json\");\n      case \"claude-code\":\n        return path.join(\".mcp.json\");\n      case \"codex\":\n        return path.join(\".codex\", \"config.toml.json\");\n      case \"gemini\":\n        return path.join(\".gemini\", \"settings.json\");\n    }\n  }\n  // User-level paths are reported but never written without --yes --write\n  switch (client) {\n    case \"cursor\":\n      return path.join(\"~\", \".cursor\", \"mcp.json\");\n    case \"claude-code\":\n      return path.join(\"~\", \".claude.json\");\n    case \"codex\":\n      return path.join(\"~\", \".codex\", \"config.toml\");\n    case \"gemini\":\n      return path.join(\"~\", \".gemini\", \"settings.json\");\n  }\n}\n\nexport async function mcpConfigureCommand(\n  options: McpConfigureOptions,\n): Promise<McpConfigureResult> {\n  if (!isMcpConfigureClient(options.client)) {\n    throw new Error(\n      `Unsupported client \"${String(options.client)}\". Use: ${CLIENTS.join(\", \")}`,\n    );\n  }\n  const traceDir = options.dir?.trim() || \".agent-inspect\";\n  const projectLocal = Boolean(options.projectLocal);\n  const write = Boolean(options.write);\n  const yes = Boolean(options.yes);\n  const dryRun = !(write && yes && projectLocal);\n  const config = buildMcpClientConfig(options.client, traceDir);\n  const targetPath = resolveTargetPath(options.client, projectLocal);\n  const notes = [\n    \"Read-only MCP server; no network upload; share redaction by default.\",\n    \"Dry-run by default. Pass --project-local --write --yes to write a project file.\",\n    \"User-level paths are never auto-written by this command.\",\n    \"Remove the agent-inspect server block to uninstall.\",\n  ];\n\n  let wrote = false;\n  if (!dryRun && projectLocal) {\n    const abs = path.resolve(targetPath);\n    await mkdir(path.dirname(abs), { recursive: true });\n    await writeFile(abs, `${JSON.stringify(config, null, 2)}\\n`, \"utf8\");\n    wrote = true;\n  }\n\n  const result: McpConfigureResult = {\n    client: options.client,\n    dryRun,\n    wrote,\n    targetPath,\n    config,\n    notes,\n  };\n\n  if (options.json) {\n    process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n  } else {\n    process.stdout.write(\n      [\n        `Client: ${result.client}`,\n        `Mode: ${result.dryRun ? \"dry-run\" : \"write\"}`,\n        `Target: ${result.targetPath}`,\n        `Wrote: ${result.wrote}`,\n        \"\",\n        JSON.stringify(result.config, null, 2),\n        \"\",\n        ...result.notes.map((note) => `- ${note}`),\n        \"\",\n      ].join(\"\\n\"),\n    );\n  }\n  return result;\n}\n","import { appendFile, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport {\n  validateReporterArtifactPath,\n  type TraceArtifact,\n  type TraceReporterFramework,\n  type TraceTestStatus,\n} from \"@agent-inspect/core/reporters\";\n\nexport interface CiSummaryCommandOptions {\n  output?: string;\n  githubSummary?: string;\n  json?: boolean;\n}\n\ninterface ReporterManifestDocument {\n  packageName?: string;\n  manifest: NormalizedReporterManifest;\n  diagnostics: number;\n}\n\ninterface NormalizedReporterManifest {\n  framework: TraceReporterFramework;\n  generatedAt: string;\n  results: CiSummaryTestResult[];\n  artifacts: CiSummaryArtifact[];\n}\n\ninterface CiSummaryManifest {\n  packageName?: string;\n  manifestFile: string;\n  framework: TraceReporterFramework;\n  generatedAt: string;\n  results: CiSummaryTestResult[];\n  artifacts: CiSummaryArtifact[];\n  diagnostics: number;\n}\n\ninterface CiSummaryTestResult {\n  testId: string;\n  name: string;\n  file?: string;\n  status: TraceTestStatus;\n  tracePath?: string;\n  artifacts: CiSummaryArtifact[];\n  diagnostics: number;\n}\n\ninterface CiSummaryArtifact {\n  kind: TraceArtifact[\"kind\"];\n  path: string;\n  format: TraceArtifact[\"format\"];\n  redactionProfile: TraceArtifact[\"redactionProfile\"];\n}\n\ninterface CiSummaryResult {\n  status: \"ok\" | \"failed\" | \"warning\";\n  manifests: CiSummaryManifest[];\n  summary: {\n    manifests: number;\n    tests: number;\n    failed: number;\n    passed: number;\n    skipped: number;\n    todo: number;\n    artifacts: number;\n    diagnostics: number;\n  };\n  note: string;\n}\n\nconst NOTE =\n  \"Generated locally by AgentInspect from reporter artifact manifests. Trace contents are not embedded.\";\nconst MAX_TEXT = 180;\nconst FRAMEWORKS = new Set([\"vitest\", \"jest\", \"manual\"]);\nconst STATUSES = new Set([\"passed\", \"failed\", \"skipped\", \"todo\"]);\nconst ARTIFACT_KINDS = new Set([\"trace\", \"report\", \"eval\", \"redaction\", \"summary\"]);\nconst ARTIFACT_FORMATS = new Set([\"json\", \"jsonl\", \"md\", \"html\"]);\nconst REDACTION_PROFILES = new Set([\"local\", \"share\", \"strict\"]);\n\nfunction stable(value: unknown): unknown {\n  if (Array.isArray(value)) return value.map(stable);\n  if (value === null || typeof value !== \"object\") return value;\n  const record = value as Record<string, unknown>;\n  return Object.fromEntries(\n    Object.keys(record)\n      .sort((a, b) => a.localeCompare(b))\n      .map((key) => [key, stable(record[key])]),\n  );\n}\n\nfunction writeJson(value: unknown): string {\n  return `${JSON.stringify(stable(value), null, 2)}\\n`;\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readString(value: unknown, label: string): string {\n  if (typeof value !== \"string\" || value.trim() === \"\") {\n    throw new Error(`${label} must be a non-empty string.`);\n  }\n  return safeText(value);\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.trim() !== \"\" ? safeText(value) : undefined;\n}\n\nfunction readFramework(value: unknown): TraceReporterFramework {\n  const framework = readString(value, \"manifest.framework\");\n  if (!FRAMEWORKS.has(framework)) {\n    throw new Error(`Unsupported reporter framework: ${framework}.`);\n  }\n  return framework as TraceReporterFramework;\n}\n\nfunction readStatus(value: unknown): TraceTestStatus {\n  const status = readString(value, \"result.status\");\n  if (!STATUSES.has(status)) {\n    throw new Error(`Unsupported reporter test status: ${status}.`);\n  }\n  return status as TraceTestStatus;\n}\n\nfunction readArtifact(value: unknown, index: number): CiSummaryArtifact {\n  if (!isObject(value)) throw new Error(`manifest.artifacts[${index}] must be an object.`);\n  const kind = readString(value.kind, `manifest.artifacts[${index}].kind`);\n  const format = readString(value.format, `manifest.artifacts[${index}].format`);\n  const redactionProfile = readString(\n    value.redactionProfile,\n    `manifest.artifacts[${index}].redactionProfile`,\n  );\n  if (!ARTIFACT_KINDS.has(kind)) throw new Error(`Unsupported artifact kind: ${kind}.`);\n  if (!ARTIFACT_FORMATS.has(format)) throw new Error(`Unsupported artifact format: ${format}.`);\n  if (!REDACTION_PROFILES.has(redactionProfile)) {\n    throw new Error(`Unsupported artifact redaction profile: ${redactionProfile}.`);\n  }\n  const artifactPath = readString(value.path, `manifest.artifacts[${index}].path`);\n  const pathCheck = validateReporterArtifactPath({\n    outputDir: process.cwd(),\n    relativePath: artifactPath,\n  });\n  if (!pathCheck.ok || pathCheck.relativePath === undefined) {\n    throw new Error(`Unsafe reporter artifact path: ${artifactPath}.`);\n  }\n  return {\n    kind: kind as TraceArtifact[\"kind\"],\n    path: pathCheck.relativePath,\n    format: format as TraceArtifact[\"format\"],\n    redactionProfile: redactionProfile as TraceArtifact[\"redactionProfile\"],\n  };\n}\n\nfunction readArtifacts(value: unknown, label: string): CiSummaryArtifact[] {\n  if (value === undefined) return [];\n  if (!Array.isArray(value)) throw new Error(`${label} must be an array.`);\n  return value.map((item, index) => readArtifact(item, index));\n}\n\nfunction readDiagnosticsCount(value: unknown, label: string): number {\n  if (value === undefined) return 0;\n  if (!Array.isArray(value)) throw new Error(`${label} must be an array.`);\n  return value.length;\n}\n\nfunction readResult(value: unknown, index: number): CiSummaryTestResult {\n  if (!isObject(value)) throw new Error(`manifest.results[${index}] must be an object.`);\n  const file = readOptionalString(value.file);\n  const tracePath = readOptionalString(value.tracePath);\n  return {\n    testId: readString(value.testId, `manifest.results[${index}].testId`),\n    name: readString(value.name, `manifest.results[${index}].name`),\n    ...(file === undefined ? {} : { file }),\n    status: readStatus(value.status),\n    ...(tracePath === undefined ? {} : { tracePath }),\n    artifacts: readArtifacts(value.artifacts, `manifest.results[${index}].artifacts`),\n    diagnostics: readDiagnosticsCount(\n      value.diagnostics,\n      `manifest.results[${index}].diagnostics`,\n    ),\n  };\n}\n\nfunction readManifestDocument(value: unknown): ReporterManifestDocument {\n  if (!isObject(value)) throw new Error(\"Reporter manifest file must contain a JSON object.\");\n  const candidate = isObject(value.manifest) ? value.manifest : value;\n  if (!isObject(candidate)) throw new Error(\"Reporter manifest must be a JSON object.\");\n  const schemaVersion = readString(candidate.schemaVersion, \"manifest.schemaVersion\");\n  if (schemaVersion !== \"0.1\") {\n    throw new Error(`Unsupported reporter manifest schemaVersion: ${schemaVersion}.`);\n  }\n  if (!Array.isArray(candidate.results)) {\n    throw new Error(\"manifest.results must be an array.\");\n  }\n  const artifacts = readArtifacts(candidate.artifacts, \"manifest.artifacts\");\n  const results = candidate.results.map((item, index) => readResult(item, index));\n  const diagnostics = readDiagnosticsCount(candidate.diagnostics, \"manifest.diagnostics\");\n  const manifest: NormalizedReporterManifest = {\n    framework: readFramework(candidate.framework),\n    generatedAt: readString(candidate.generatedAt, \"manifest.generatedAt\"),\n    results,\n    artifacts,\n  };\n  return {\n    packageName: readOptionalString(value.package),\n    manifest,\n    diagnostics,\n  };\n}\n\nfunction cwdRelative(filePath: string): string {\n  const relative = path.relative(process.cwd(), path.resolve(filePath)).replace(/\\\\/g, \"/\");\n  if (relative === \"\" || relative.startsWith(\"../\") || path.isAbsolute(relative)) {\n    return path.basename(filePath);\n  }\n  return relative;\n}\n\nasync function readReporterManifest(filePath: string): Promise<CiSummaryManifest> {\n  const absolute = path.resolve(filePath);\n  const raw = await readFile(absolute, \"utf-8\");\n  const document = readManifestDocument(JSON.parse(raw));\n  const manifest = document.manifest;\n  const results = manifest.results.map((result) => ({\n    testId: safeText(result.testId),\n    name: safeText(result.name),\n    ...(result.file === undefined ? {} : { file: safeText(path.basename(result.file)) }),\n    status: result.status,\n    ...(result.tracePath === undefined ? {} : { tracePath: safeText(path.basename(result.tracePath)) }),\n    artifacts: result.artifacts,\n    diagnostics: result.diagnostics,\n  }));\n  return {\n    ...(document.packageName === undefined ? {} : { packageName: document.packageName }),\n    manifestFile: cwdRelative(absolute),\n    framework: manifest.framework,\n    generatedAt: manifest.generatedAt,\n    results,\n    artifacts: manifest.artifacts,\n    diagnostics: document.diagnostics,\n  };\n}\n\nfunction summarize(manifests: CiSummaryManifest[]): CiSummaryResult {\n  const summary = {\n    manifests: manifests.length,\n    tests: 0,\n    failed: 0,\n    passed: 0,\n    skipped: 0,\n    todo: 0,\n    artifacts: 0,\n    diagnostics: 0,\n  };\n  for (const manifest of manifests) {\n    summary.artifacts += manifest.artifacts.length;\n    summary.diagnostics += manifest.diagnostics;\n    for (const result of manifest.results) {\n      summary.tests += 1;\n      if (result.status === \"failed\") summary.failed += 1;\n      else if (result.status === \"passed\") summary.passed += 1;\n      else if (result.status === \"skipped\") summary.skipped += 1;\n      else summary.todo += 1;\n      summary.artifacts += result.artifacts.length;\n      summary.diagnostics += result.diagnostics;\n    }\n  }\n  return {\n    status: summary.failed > 0 ? \"failed\" : summary.diagnostics > 0 ? \"warning\" : \"ok\",\n    manifests,\n    summary,\n    note: NOTE,\n  };\n}\n\nfunction markdownCell(value: string | number | undefined): string {\n  return safeText(String(value ?? \"unknown\"))\n    .replaceAll(\"|\", \"\\\\|\")\n    .replace(/\\r?\\n/g, \" \");\n}\n\nfunction renderMarkdown(result: CiSummaryResult): string {\n  const lines = [\n    \"# AgentInspect CI Summary\",\n    \"\",\n    NOTE,\n    \"\",\n    \"| Field | Value |\",\n    \"| --- | --- |\",\n    `| Status | ${result.status} |`,\n    `| Manifests | ${result.summary.manifests} |`,\n    `| Tests | ${result.summary.tests} |`,\n    `| Failed | ${result.summary.failed} |`,\n    `| Passed | ${result.summary.passed} |`,\n    `| Skipped | ${result.summary.skipped} |`,\n    `| Todo | ${result.summary.todo} |`,\n    `| Artifacts | ${result.summary.artifacts} |`,\n    `| Diagnostics | ${result.summary.diagnostics} |`,\n    \"\",\n    \"## Tests\",\n    \"\",\n    \"| Framework | Status | Test | File | Trace | Artifacts |\",\n    \"| --- | --- | --- | --- | --- | --- |\",\n  ];\n  const rows = result.manifests.flatMap((manifest) =>\n    manifest.results.map((test) => ({\n      framework: manifest.framework,\n      test,\n    })),\n  );\n  if (rows.length === 0) {\n    lines.push(\"| unknown | unknown | No tests found | unknown | unknown | 0 |\");\n  } else {\n    for (const row of rows) {\n      lines.push(\n        `| ${markdownCell(row.framework)} | ${markdownCell(row.test.status)} | ${markdownCell(row.test.name)} | ${markdownCell(row.test.file)} | ${markdownCell(row.test.tracePath)} | ${row.test.artifacts.length} |`,\n      );\n    }\n  }\n  lines.push(\"\", \"## Manifests\", \"\", \"| Framework | File | Generated | Artifacts |\", \"| --- | --- | --- | --- |\");\n  for (const manifest of result.manifests) {\n    lines.push(\n      `| ${markdownCell(manifest.framework)} | ${markdownCell(manifest.manifestFile)} | ${markdownCell(manifest.generatedAt)} | ${manifest.artifacts.length} |`,\n    );\n  }\n  lines.push(\"\", \"## Artifacts\", \"\", \"| Framework | Kind | Path | Format | Profile |\", \"| --- | --- | --- | --- | --- |\");\n  const artifacts = result.manifests.flatMap((manifest) =>\n    manifest.artifacts.map((artifact) => ({ framework: manifest.framework, artifact })),\n  );\n  if (artifacts.length === 0) {\n    lines.push(\"| unknown | unknown | No artifacts found | unknown | unknown |\");\n  } else {\n    for (const row of artifacts) {\n      lines.push(\n        `| ${markdownCell(row.framework)} | ${markdownCell(row.artifact.kind)} | ${markdownCell(row.artifact.path)} | ${markdownCell(row.artifact.format)} | ${markdownCell(row.artifact.redactionProfile)} |`,\n      );\n    }\n  }\n  lines.push(\"\");\n  return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction safeText(value: string): string {\n  const compact = value.replace(/\\s+/g, \" \").trim();\n  const redacted = compact\n    .replace(/\\bsk-[A-Za-z0-9_-]{8,}\\b/g, \"[REDACTED]\")\n    .replace(\n      /\\b(?:api[_-]?key|authorization|token|secret|password)\\s*[:=]\\s*[^,\\s]+/gi,\n      \"$1=[REDACTED]\",\n    );\n  if (redacted.length <= MAX_TEXT) return redacted;\n  return `${redacted.slice(0, MAX_TEXT - 12)}...[truncated]`;\n}\n\nexport async function ciSummaryCommand(\n  manifestPaths: string[],\n  options: CiSummaryCommandOptions = {},\n): Promise<void> {\n  if (manifestPaths.length === 0) {\n    console.error(\"At least one reporter manifest path is required.\");\n    process.exitCode = 1;\n    return;\n  }\n\n  let result: CiSummaryResult;\n  try {\n    const manifests = [];\n    for (const manifestPath of manifestPaths) {\n      manifests.push(await readReporterManifest(manifestPath));\n    }\n    manifests.sort((a, b) => a.manifestFile.localeCompare(b.manifestFile));\n    result = summarize(manifests);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    console.error(`[AgentInspect] ci-summary failed: ${message}`);\n    process.exitCode = 1;\n    return;\n  }\n\n  const markdown = renderMarkdown(result);\n  const outputPath =\n    options.output !== undefined && options.output.trim() !== \"\"\n      ? path.resolve(options.output.trim())\n      : undefined;\n  if (outputPath !== undefined) {\n    await mkdir(path.dirname(outputPath), { recursive: true });\n    await writeFile(outputPath, markdown, \"utf-8\");\n  }\n\n  const summaryTarget = options.githubSummary ?? process.env.GITHUB_STEP_SUMMARY;\n  if (summaryTarget !== undefined && summaryTarget.trim() !== \"\") {\n    const summaryPath = path.resolve(summaryTarget);\n    await mkdir(path.dirname(summaryPath), { recursive: true });\n    await appendFile(summaryPath, `\\n${markdown}`, \"utf-8\");\n  }\n\n  if (options.json === true) {\n    console.log(writeJson(result).trimEnd());\n  } else if (outputPath !== undefined) {\n    console.log(`Wrote AgentInspect CI summary to ${outputPath}`);\n    console.log(`Status: ${result.status}`);\n  } else {\n    console.log(markdown.trimEnd());\n  }\n}\n","import { access, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { version as packageVersion } from \"../../../package.json\";\n\nexport type InitFramework =\n  | \"ai-sdk\"\n  | \"openai-agents\"\n  | \"langchain\"\n  | \"langgraph\"\n  | \"custom\";\n\nexport interface InitCommandOptions {\n  /** Framework id or alias (`observe` / `manual` → `custom`). */\n  framework?: string;\n  ci?: \"github\";\n  dryRun?: boolean;\n  yes?: boolean;\n  json?: boolean;\n  cwd?: string;\n}\n\nexport interface InitPlannedFile {\n  path: string;\n  action: \"create\" | \"skip\";\n  reason?: string;\n}\n\nexport interface InitPlan {\n  framework: InitFramework;\n  ci?: \"github\";\n  files: InitPlannedFile[];\n}\n\nconst CONFIG_FILE = \"agent-inspect.config.ts\";\nconst TRACE_DIR = \".agent-inspect\";\nconst GITKEEP = \".agent-inspect/.gitkeep\";\n\nfunction normalizeFramework(value: string | undefined): InitFramework {\n  const raw = (value ?? \"custom\").trim();\n  if (raw === \"observe\" || raw === \"manual\") {\n    return \"custom\";\n  }\n  if (\n    raw === \"ai-sdk\" ||\n    raw === \"openai-agents\" ||\n    raw === \"langchain\" ||\n    raw === \"langgraph\" ||\n    raw === \"custom\"\n  ) {\n    return raw;\n  }\n  throw new Error(\n    \"Unsupported --framework value. Use ai-sdk, openai-agents, langchain, langgraph, custom, observe, or manual.\",\n  );\n}\n\nfunction configTemplate(framework: InitFramework): string {\n  const base = `/**\n * AgentInspect local config (metadata-only capture by default).\n * See https://github.com/rajudandigam/agent-inspect/blob/main/docs/SAFE-TRACE-SHARING.md\n */\nexport const agentInspectConfig = {\n  traceDir: \".agent-inspect\",\n  enabled: process.env.AGENT_INSPECT !== \"0\",\n  redactionProfile: \"local\" as const,\n};\n`;\n  if (framework === \"custom\") return base;\n  return `${base}\nexport const framework = \"${framework}\" as const;\n`;\n}\n\nfunction demoTemplate(framework: InitFramework): string {\n  switch (framework) {\n    case \"ai-sdk\":\n      return `/**\n * AI SDK starter — keyless MockLanguageModelV3 + @agent-inspect/ai-sdk telemetry.\n * Install: npm install agent-inspect @agent-inspect/ai-sdk ai@6.0.210 zod\n */\nimport { generateText, stepCountIs, tool } from \"ai\";\nimport { MockLanguageModelV3 } from \"ai/test\";\nimport { agentInspect } from \"@agent-inspect/ai-sdk\";\nimport { z } from \"zod\";\nimport { readdirSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\nconst TRACE_DIR = \".agent-inspect\";\nconst ANSWER = \"You have 2 orders\";\nconst CORRECT_RUN = \"ai-sdk-demo-correct\";\nconst WRONG_RUN = \"ai-sdk-demo-wrong\";\n\nconst usage = {\n  inputTokens: { total: 4, noCache: 4, cacheRead: 0, cacheWrite: 0 },\n  outputTokens: { total: 3, text: 3, reasoning: 0 },\n};\n\nconst lookupOrders = tool({\n  description: \"Look up orders for a user\",\n  inputSchema: z.object({ userId: z.string() }),\n  execute: async () => ({ orders: 2 }),\n});\n\nconst deleteOrders = tool({\n  description: \"Delete orders for a user (wrong path)\",\n  inputSchema: z.object({ userId: z.string() }),\n  execute: async () => ({ orders: 2 }),\n});\n\nasync function runPath(runName, toolName) {\n  const integration = agentInspect({\n    traceDir: TRACE_DIR,\n    runName,\n    capture: \"metadata-only\",\n  });\n  let step = 0;\n  try {\n    const result = await generateText({\n      model: new MockLanguageModelV3({\n        provider: \"fixture-provider\",\n        modelId: \"fixture-tools\",\n        doGenerate: async () => {\n          step += 1;\n          if (step === 1) {\n            return {\n              content: [\n                {\n                  type: \"tool-call\",\n                  toolCallId: \\`call-\\${toolName}\\`,\n                  toolName,\n                  input: { userId: \"u1\" },\n                },\n              ],\n              finishReason: { unified: \"tool-calls\", raw: \"tool-calls\" },\n              usage,\n              warnings: [],\n            };\n          }\n          return {\n            content: [{ type: \"text\", text: ANSWER }],\n            finishReason: { unified: \"stop\", raw: \"stop\" },\n            usage,\n            warnings: [],\n          };\n        },\n      }),\n      tools: { lookup_orders: lookupOrders, delete_orders: deleteOrders },\n      prompt: \"How many orders do I have?\",\n      stopWhen: stepCountIs(5),\n      experimental_telemetry: {\n        isEnabled: true,\n        recordInputs: false,\n        recordOutputs: false,\n        integrations: [integration],\n      },\n    });\n    if (result.text !== ANSWER) {\n      throw new Error(\\`unexpected answer for \\${runName}: \\${result.text}\\`);\n    }\n  } finally {\n    await integration.flush();\n    await integration.close();\n  }\n}\n\nfunction selectRunIdByName(runName) {\n  const files = readdirSync(TRACE_DIR).filter((f) => f.endsWith(\".jsonl\"));\n  const matches = [];\n  for (const file of files) {\n    const text = readFileSync(path.join(TRACE_DIR, file), \"utf8\");\n    if (text.includes(\\`\"name\":\"\\${runName}\"\\`) || text.includes(\\`\"name\": \"\\${runName}\"\\`)) {\n      matches.push(file.replace(/\\\\.jsonl$/, \"\"));\n    }\n  }\n  if (matches.length !== 1) {\n    throw new Error(\n      \\`expected exactly one run named \\${runName}, found \\${matches.length}\\`,\n    );\n  }\n  return matches[0];\n}\n\nasync function main() {\n  await runPath(CORRECT_RUN, \"lookup_orders\");\n  await runPath(WRONG_RUN, \"delete_orders\");\n  const correctId = selectRunIdByName(CORRECT_RUN);\n  const wrongId = selectRunIdByName(WRONG_RUN);\n  console.log(\"Trace written to .agent-inspect/\");\n  console.log(\\`Correct path runId: \\${correctId}\\`);\n  console.log(\\`Wrong path runId:   \\${wrongId}\\`);\n  console.log(\\`Next: npx agent-inspect check \\${correctId} --required-tool lookup_orders\\`);\n}\n\nmain().catch((error) => {\n  console.error(error);\n  process.exitCode = 1;\n});\n`;\n    case \"openai-agents\":\n      return `/**\n * OpenAI Agents starter — use @agent-inspect/openai-agents for local-only processors.\n * This demo uses manual steps (no API keys).\n */\nimport { inspectRun, step } from \"agent-inspect\";\n\nasync function main() {\n  await inspectRun(\"openai-agents-demo\", async () => {\n    await step.tool(\"mock-agent-run\", async () => \"ok\");\n  }, { traceDir: \".agent-inspect\", silent: true });\n  console.log(\"Trace written to .agent-inspect/\");\n}\n\nmain().catch((error) => {\n  console.error(error);\n  process.exitCode = 1;\n});\n`;\n    case \"langchain\":\n      return `/**\n * LangChain starter — wire @agent-inspect/langchain callbacks in your app.\n * This demo uses manual steps (no API keys).\n */\nimport { inspectRun, step } from \"agent-inspect\";\n\nasync function main() {\n  await inspectRun(\"langchain-demo\", async () => {\n    await step.tool(\"mock-chain\", async () => \"ok\");\n  }, { traceDir: \".agent-inspect\", silent: true });\n  console.log(\"Trace written to .agent-inspect/\");\n}\n\nmain().catch((error) => {\n  console.error(error);\n  process.exitCode = 1;\n});\n`;\n    case \"langgraph\":\n      return `/**\n * LangGraph onboarding starter — no provider keys.\n * Prefer @agent-inspect/langchain callbacks with your StateGraph in app code.\n * This demo writes a bridged tool lifecycle you can check/gate locally.\n */\nimport { inspectRun, step } from \"agent-inspect\";\n\nasync function main() {\n  await inspectRun(\"langgraph-demo\", async () => {\n    await step(\"chain:agent\", async () => {\n      await step.tool(\"lookup_orders\", async () => ({ orders: 0 }));\n      return { ok: true };\n    });\n  }, { traceDir: \".agent-inspect\", silent: true });\n  console.log(\"Trace written to .agent-inspect/\");\n  console.log(\"Next: npx agent-inspect check <run-id> --required-tool lookup_orders\");\n}\n\nmain().catch((error) => {\n  console.error(error);\n  process.exitCode = 1;\n});\n`;\n    default:\n      return `import { observe } from \"agent-inspect\";\n\nclass DemoAgent {\n  async run(input) {\n    return { answer: \\`Echo: \\${input.question}\\` };\n  }\n}\n\nconst agent = observe(new DemoAgent(), {\n  traceDir: \".agent-inspect\",\n  silent: true,\n});\n\nawait agent.run({ question: \"hello\" });\nconsole.log(\"Trace written to .agent-inspect/\");\n`;\n  }\n}\n\nfunction githubWorkflowTemplate(demoPath: string): string {\n  return `name: AgentInspect artifacts\n\non:\n  workflow_dispatch:\n  push:\n    branches: [main]\n\njobs:\n  trace-artifacts:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: \"22\"\n      - run: npm ci\n      - name: Run deterministic agent fixture\n        run: node ${demoPath}\n      - name: Trajectory check with Evidence on failure\n        run: >\n          npx --yes agent-inspect check --dir .agent-inspect\n          --preset trajectory\n          --evidence-on fail\n          --evidence-profile share\n          --evidence-format directory\n      - name: Verify share safety\n        if: always()\n        run: npx --yes agent-inspect verify-safe . --dir .agent-inspect\n      - name: Upload AgentInspect traces and Evidence\n        if: always()\n        uses: actions/upload-artifact@v4\n        with:\n          name: agent-inspect-traces\n          path: |\n            .agent-inspect/**/*.jsonl\n            .agent-inspect/evidence/**\n          if-no-files-found: ignore\n`;\n}\n\n\nexport async function planInit(options: InitCommandOptions = {}): Promise<InitPlan> {\n  const framework = normalizeFramework(options.framework);\n  const cwd = path.resolve(options.cwd ?? process.cwd());\n  // Planned-file paths are a display/JSON contract; keep them POSIX-style on\n  // every platform like the other candidates (filesystem access still goes\n  // through path.join(cwd, rel), which accepts forward slashes on Windows).\n  const demoPath =\n    framework === \"custom\"\n      ? \"examples/agent-inspect-demo.mjs\"\n      : `examples/agent-inspect-${framework}-demo.mjs`;\n\n  const candidates: Array<{ rel: string; content: string }> = [\n    { rel: CONFIG_FILE, content: configTemplate(framework) },\n    { rel: GITKEEP, content: \"\" },\n    { rel: demoPath, content: demoTemplate(framework) },\n  ];\n\n  if (options.ci === \"github\") {\n    candidates.push({\n      rel: \".github/workflows/agent-inspect-artifacts.yml\",\n      content: githubWorkflowTemplate(demoPath),\n    });\n  }\n\n  const files: InitPlannedFile[] = [];\n  for (const candidate of candidates) {\n    const abs = path.join(cwd, candidate.rel);\n    try {\n      await access(abs);\n      files.push({\n        path: candidate.rel,\n        action: \"skip\",\n        reason: \"file already exists\",\n      });\n    } catch (error) {\n      if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n      files.push({ path: candidate.rel, action: \"create\" });\n    }\n  }\n\n  return { framework, ...(options.ci ? { ci: options.ci } : {}), files };\n}\n\nasync function writePlannedFiles(\n  plan: InitPlan,\n  cwd: string,\n  options: InitCommandOptions,\n): Promise<string[]> {\n  const written: string[] = [];\n  for (const entry of plan.files) {\n    if (entry.action === \"skip\") {\n      continue;\n    }\n\n    const abs = path.join(cwd, entry.path);\n    if (options.dryRun) {\n      written.push(entry.path);\n      continue;\n    }\n\n    await mkdir(path.dirname(abs), { recursive: true });\n    const demoPath =\n      plan.framework === \"custom\"\n        ? \"examples/agent-inspect-demo.mjs\"\n        : `examples/agent-inspect-${plan.framework}-demo.mjs`;\n    const content =\n      entry.path === CONFIG_FILE\n        ? configTemplate(plan.framework)\n        : entry.path === GITKEEP\n          ? \"\"\n          : entry.path.endsWith(\".yml\")\n            ? githubWorkflowTemplate(demoPath)\n            : demoTemplate(plan.framework);\n    await writeFile(abs, content, \"utf-8\");\n    written.push(entry.path);\n  }\n  return written;\n}\n\nexport async function initCommand(options: InitCommandOptions = {}): Promise<void> {\n  const cwd = path.resolve(options.cwd ?? process.cwd());\n\n  try {\n    const plan = await planInit({ ...options, cwd });\n    const toWrite = plan.files.filter((file) => file.action === \"create\").map((f) => f.path);\n    const skipped = plan.files.filter((file) => file.action === \"skip\");\n\n    if (options.json) {\n      const payload = {\n        ok: true,\n        version: packageVersion,\n        framework: plan.framework,\n        ci: plan.ci ?? null,\n        dryRun: options.dryRun === true,\n        planned: plan.files,\n        wouldWrite: options.dryRun ? toWrite : undefined,\n      };\n      console.log(JSON.stringify(payload, null, 2));\n      if (options.dryRun) return;\n    }\n\n    const written = await writePlannedFiles(plan, cwd, options);\n\n    if (!options.json) {\n      console.log(\"AgentInspect init\");\n      console.log(`Framework: ${plan.framework}`);\n      console.log(`Trace directory: ${TRACE_DIR}/`);\n      if (options.dryRun) {\n        console.log(\"Dry run — would create:\");\n        for (const file of toWrite) console.log(`- ${file}`);\n        for (const file of skipped) {\n          console.log(`- ${file.path} (skip: ${file.reason ?? \"exists\"})`);\n        }\n        return;\n      }\n      console.log(\"Created:\");\n      for (const file of written) console.log(`- ${file}`);\n      for (const file of skipped) {\n        console.log(`- ${file.path} (skipped: ${file.reason ?? \"exists\"})`);\n      }\n      console.log(\"\\nNext: run your demo, then `npx agent-inspect list --dir .agent-inspect`\");\n      console.log(\"No dependencies were installed. Add packages manually when ready.\");\n    }\n  } catch (error) {\n    const msg = error instanceof Error ? error.message : String(error);\n    if (options.json) {\n      console.log(JSON.stringify({ ok: false, error: msg }, null, 2));\n    } else {\n      console.error(`[AgentInspect] init failed: ${msg}`);\n    }\n    process.exitCode = 1;\n  }\n}\n\nexport async function readInitConfig(cwd: string): Promise<string | undefined> {\n  try {\n    return await readFile(path.join(cwd, CONFIG_FILE), \"utf8\");\n  } catch {\n    return undefined;\n  }\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { access, constants, mkdir, stat } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport process from \"node:process\";\n\nimport { version as packageVersion } from \"../../../package.json\";\n\nexport type DoctorStatus = \"pass\" | \"warn\" | \"fail\" | \"skipped\";\n\nexport type InitFramework =\n  | \"ai-sdk\"\n  | \"openai-agents\"\n  | \"langchain\"\n  | \"langgraph\"\n  | \"custom\";\n\nexport interface DoctorCheckResult {\n  id: string;\n  status: DoctorStatus;\n  message: string;\n  remediation?: string;\n  evidence?: string;\n}\n\nexport interface DoctorCommandOptions {\n  json?: boolean;\n  traceDir?: string;\n  checkImports?: boolean;\n  framework?: InitFramework;\n  cwd?: string;\n}\n\n/** Current docs base for actionable remediation links (resolves for packed consumers). */\nexport const DOCS_BASE = \"https://github.com/rajudandigam/agent-inspect/blob/main/docs\";\n\n/** Message shown when agent-inspect cannot be resolved from the current project. */\nexport const AGENT_INSPECT_NOT_RESOLVABLE_MESSAGE =\n  \"agent-inspect does not resolve from this project. A global CLI install is not enough — the package must be a dependency here.\";\n\n/** Remediation for the not-resolvable case (common packed-consumer mistake). */\nexport const AGENT_INSPECT_NOT_RESOLVABLE_REMEDIATION = `Install it in this project: npm install agent-inspect (or pnpm add agent-inspect). See ${DOCS_BASE}/FIRST-TRACE-IN-5-MINUTES.md`;\n\nconst OPTIONAL_PACKAGES: Record<InitFramework, string[]> = {\n  custom: [],\n  \"ai-sdk\": [\"@agent-inspect/ai-sdk\"],\n  \"openai-agents\": [\"@agent-inspect/openai-agents\"],\n  langchain: [\"@agent-inspect/langchain\"],\n  langgraph: [\"@agent-inspect/langchain\"],\n};\n\nfunction nodeVersionCheck(): DoctorCheckResult {\n  const major = Number(process.versions.node.split(\".\")[0]);\n  if (Number.isNaN(major) || major < 20) {\n    return {\n      id: \"node-version\",\n      status: \"fail\",\n      message: `Node ${process.versions.node} is below the supported minimum (20).`,\n      remediation: `Upgrade to Node 20 LTS or newer, then reinstall. See ${DOCS_BASE}/GETTING-STARTED.md`,\n      evidence: process.versions.node,\n    };\n  }\n  return {\n    id: \"node-version\",\n    status: \"pass\",\n    message: `Node ${process.versions.node} meets the minimum (>=20).`,\n    evidence: process.versions.node,\n  };\n}\n\nfunction envCheck(name: string, optional = true): DoctorCheckResult {\n  const value = process.env[name];\n  if (value === undefined || value.trim() === \"\") {\n    return {\n      id: `env-${name.toLowerCase()}`,\n      status: optional ? \"skipped\" : \"warn\",\n      message: `${name} is not set.`,\n      remediation: optional ? undefined : `Set ${name}=1 to enable tracing.`,\n    };\n  }\n  return {\n    id: `env-${name.toLowerCase()}`,\n    status: \"pass\",\n    message: `${name} is set.`,\n    evidence: value,\n  };\n}\n\nasync function traceDirWritable(traceDir: string): Promise<DoctorCheckResult> {\n  const resolved = path.resolve(traceDir);\n  try {\n    // Request restrictive create-time mode; existing directories are not rewritten.\n    await mkdir(resolved, { recursive: true, mode: 0o700 });\n    await access(resolved, constants.W_OK);\n    return {\n      id: \"trace-dir-writable\",\n      status: \"pass\",\n      message: `Trace directory is writable: ${resolved}`,\n      evidence: resolved,\n    };\n  } catch (error) {\n    return {\n      id: \"trace-dir-writable\",\n      status: \"fail\",\n      message: `Trace directory is not writable: ${resolved}`,\n      remediation: `Create the directory or set AGENT_INSPECT_TRACE_DIR to a writable path. See ${DOCS_BASE}/GETTING-STARTED.md`,\n      evidence: error instanceof Error ? error.message : String(error),\n    };\n  }\n}\n\nasync function traceDirPermissions(traceDir: string): Promise<DoctorCheckResult> {\n  const resolved = path.resolve(traceDir);\n  if (process.platform === \"win32\") {\n    return {\n      id: \"trace-dir-permissions\",\n      status: \"skipped\",\n      message: \"POSIX confidentiality mode check skipped on Windows.\",\n      evidence: resolved,\n    };\n  }\n\n  try {\n    const st = await stat(resolved);\n    const mode = st.mode & 0o777;\n    const octal = mode.toString(8).padStart(3, \"0\");\n    if ((mode & 0o077) !== 0) {\n      return {\n        id: \"trace-dir-permissions\",\n        status: \"warn\",\n        message: `Trace directory allows group/other access (mode ${octal}): ${resolved}`,\n        remediation: `Restrict with chmod 700 on the directory and review existing JSONL files with chmod 600. AgentInspect does not rewrite existing modes. See ${DOCS_BASE}/GETTING-STARTED.md`,\n        evidence: `mode=${octal}`,\n      };\n    }\n    return {\n      id: \"trace-dir-permissions\",\n      status: \"pass\",\n      message: `Trace directory mode is restrictive (${octal}): ${resolved}`,\n      evidence: `mode=${octal}`,\n    };\n  } catch (error) {\n    return {\n      id: \"trace-dir-permissions\",\n      status: \"skipped\",\n      message: `Could not inspect trace directory permissions: ${resolved}`,\n      evidence: error instanceof Error ? error.message : String(error),\n    };\n  }\n}\n\n/**\n * Locate package metadata by walking from a resolved entry file to the nearest\n * package.json whose `name` matches. Does not require `./package.json` in exports.\n */\nfunction readPackageVersionNearEntry(entryPath: string, packageName: string): string | undefined {\n  let dir = path.dirname(path.resolve(entryPath));\n  const { root } = path.parse(dir);\n  while (true) {\n    const candidate = path.join(dir, \"package.json\");\n    if (existsSync(candidate)) {\n      try {\n        const pkg = JSON.parse(readFileSync(candidate, \"utf8\")) as {\n          name?: string;\n          version?: string;\n        };\n        if (pkg.name === packageName && typeof pkg.version === \"string\") {\n          return pkg.version;\n        }\n      } catch {\n        /* continue walking past unreadable manifests */\n      }\n    }\n    if (dir === root) break;\n    const parent = path.dirname(dir);\n    if (parent === dir) break;\n    dir = parent;\n  }\n  return undefined;\n}\n\n/** Resolve a package entry and version without requiring `./package.json` exports. */\nexport function resolveInstalledPackage(\n  cwd: string,\n  name: string,\n): { ok: boolean; version?: string; entry?: string } {\n  const require = createRequire(path.join(cwd, \"package.json\"));\n  try {\n    const entry = require.resolve(name);\n    let version: string | undefined;\n    try {\n      const pkgPath = require.resolve(`${name}/package.json`);\n      const pkg = require(pkgPath) as { version?: string };\n      if (typeof pkg.version === \"string\") version = pkg.version;\n    } catch {\n      version = readPackageVersionNearEntry(entry, name);\n    }\n    return { ok: true, version, entry };\n  } catch {\n    return { ok: false };\n  }\n}\n\nfunction importSmoke(cwd: string): DoctorCheckResult[] {\n  const results: DoctorCheckResult[] = [];\n  const resolved = resolveInstalledPackage(cwd, \"agent-inspect\");\n\n  if (resolved.ok) {\n    results.push({\n      id: \"import-agent-inspect\",\n      status: \"pass\",\n      message: \"agent-inspect resolves from the current project.\",\n      evidence: resolved.entry,\n    });\n    // createRequire.resolve is the CJS resolver; entry success means require() can load it.\n    results.push({\n      id: \"import-agent-inspect-cjs\",\n      status: \"pass\",\n      message: \"CJS resolution for agent-inspect succeeded.\",\n      evidence: resolved.entry,\n    });\n  } else {\n    results.push({\n      id: \"import-agent-inspect\",\n      status: \"warn\",\n      message: AGENT_INSPECT_NOT_RESOLVABLE_MESSAGE,\n      remediation: AGENT_INSPECT_NOT_RESOLVABLE_REMEDIATION,\n    });\n    results.push({\n      id: \"import-agent-inspect-cjs\",\n      status: \"skipped\",\n      message: \"CJS resolution check skipped (package not installed locally).\",\n    });\n  }\n\n  return results;\n}\n\nfunction optionalPackageChecks(cwd: string, framework?: InitFramework): DoctorCheckResult[] {\n  const packages =\n    framework !== undefined\n      ? OPTIONAL_PACKAGES[framework]\n      : [\n          \"@agent-inspect/ai-sdk\",\n          \"@agent-inspect/openai-agents\",\n          \"@agent-inspect/langchain\",\n          \"@agent-inspect/redact\",\n          \"@agent-inspect/eval\",\n        ];\n\n  return packages.map((name) => {\n    const resolved = resolveInstalledPackage(cwd, name);\n    if (!resolved.ok) {\n      return {\n        id: `optional-package-${name}`,\n        status: framework !== undefined ? \"warn\" : \"skipped\",\n        message: `${name} is not installed.`,\n        remediation: framework !== undefined ? `npm install ${name}` : undefined,\n      };\n    }\n    return {\n      id: `optional-package-${name}`,\n      status: \"pass\",\n      message: `${name} is available.`,\n      evidence: resolved.version,\n    };\n  });\n}\n\nfunction versionMismatchCheck(cwd: string): DoctorCheckResult {\n  const root = resolveInstalledPackage(cwd, \"agent-inspect\");\n  if (!root.ok || root.version === undefined) {\n    return {\n      id: \"version-alignment\",\n      status: \"skipped\",\n      message: \"Skipped version alignment — agent-inspect not installed locally.\",\n    };\n  }\n  if (root.version !== packageVersion) {\n    return {\n      id: \"version-alignment\",\n      status: \"warn\",\n      message: `CLI version ${packageVersion} differs from local agent-inspect@${root.version}. A packed consumer can hit this when npx uses a cached global CLI.`,\n      remediation: `Align versions with npm install agent-inspect@${packageVersion}, or run via the local binary. See ${DOCS_BASE}/KNOWN-ISSUES.md`,\n      evidence: `cli=${packageVersion};local=${root.version}`,\n    };\n  }\n  return {\n    id: \"version-alignment\",\n    status: \"pass\",\n    message: `CLI and local agent-inspect are aligned at ${packageVersion}.`,\n  };\n}\n\nexport async function runDoctorChecks(\n  options: DoctorCommandOptions = {},\n): Promise<DoctorCheckResult[]> {\n  const cwd = path.resolve(options.cwd ?? process.cwd());\n  const traceDir =\n    options.traceDir?.trim() ||\n    process.env.AGENT_INSPECT_TRACE_DIR?.trim() ||\n    \".agent-inspect\";\n\n  const checks: DoctorCheckResult[] = [\n    nodeVersionCheck(),\n    {\n      id: \"cli-version\",\n      status: \"pass\",\n      message: `agent-inspect CLI ${packageVersion}`,\n      evidence: packageVersion,\n    },\n    await traceDirWritable(traceDir),\n    await traceDirPermissions(traceDir),\n    envCheck(\"AGENT_INSPECT\"),\n    envCheck(\"AGENT_INSPECT_TRACE_DIR\"),\n    versionMismatchCheck(cwd),\n  ];\n\n  if (options.checkImports !== false) {\n    checks.push(...importSmoke(cwd));\n  }\n  checks.push(...optionalPackageChecks(cwd, options.framework));\n\n  return checks.sort((a, b) => a.id.localeCompare(b.id));\n}\n\nexport async function doctorCommand(options: DoctorCommandOptions = {}): Promise<void> {\n  const checks = await runDoctorChecks(options);\n  const failed = checks.filter((check) => check.status === \"fail\").length;\n  const warned = checks.filter((check) => check.status === \"warn\").length;\n\n  if (options.json) {\n    console.log(\n      JSON.stringify(\n        {\n          ok: failed === 0,\n          version: packageVersion,\n          summary: { pass: checks.filter((c) => c.status === \"pass\").length, warn: warned, fail: failed },\n          checks,\n        },\n        null,\n        2,\n      ),\n    );\n    if (failed > 0) process.exitCode = 1;\n    return;\n  }\n\n  console.log(\"AgentInspect doctor\");\n  for (const check of checks) {\n    const tag = check.status.toUpperCase();\n    console.log(`[${tag}] ${check.id}: ${check.message}`);\n    if (check.remediation) console.log(`  → ${check.remediation}`);\n  }\n  console.log(`\\nSummary: ${failed} failed, ${warned} warnings`);\n  if (failed > 0) process.exitCode = 1;\n}\n","import type {\n  ConformanceCheck,\n  PrivacyChecklistInput,\n  PrivacyChecklistItem,\n  PrivacyChecklistResult,\n} from \"./types.js\";\n\nexport const PRIVACY_CHECKLIST_ITEMS: readonly PrivacyChecklistItem[] = [\n  {\n    id: \"capture-metadata-only-default\",\n    label: \"Default capture is metadata-only (no full prompts/outputs on disk)\",\n    required: true,\n  },\n  {\n    id: \"no-network-by-default\",\n    label: \"Adapter tests and defaults do not call external networks\",\n    required: true,\n  },\n  {\n    id: \"no-upload\",\n    label: \"Adapter does not upload traces or logs to vendors by default\",\n    required: true,\n  },\n  {\n    id: \"redaction-documented\",\n    label: \"Redaction/capture modes are documented for adapter users\",\n    required: true,\n  },\n  {\n    id: \"framework-deps-scoped\",\n    label: \"Framework SDK dependencies stay in the optional adapter package\",\n    required: true,\n  },\n] as const;\n\nexport function runPrivacyChecklist(input: PrivacyChecklistInput = {}): PrivacyChecklistResult {\n  const captureMode = input.captureMode ?? \"metadata-only\";\n  const items: ConformanceCheck[] = [\n    {\n      id: \"capture-metadata-only-default\",\n      ok: captureMode === \"metadata-only\",\n      detail:\n        captureMode === \"metadata-only\"\n          ? undefined\n          : `captureMode is ${captureMode}; metadata-only is required by default`,\n    },\n    {\n      id: \"no-network-by-default\",\n      ok: input.networkAllowed !== true,\n      detail: input.networkAllowed ? \"network must be disabled in adapter defaults\" : undefined,\n    },\n    {\n      id: \"no-upload\",\n      ok: input.uploadAllowed !== true,\n      detail: input.uploadAllowed ? \"upload must not be enabled by default\" : undefined,\n    },\n    {\n      id: \"redaction-documented\",\n      ok: input.redactionDocumented !== false,\n      detail:\n        input.redactionDocumented === false\n          ? \"document capture/redaction behavior in adapter README\"\n          : undefined,\n    },\n    {\n      id: \"framework-deps-scoped\",\n      ok: input.frameworkDepsPackageScoped !== false,\n      detail:\n        input.frameworkDepsPackageScoped === false\n          ? \"keep framework SDK deps out of agent-inspect root/core\"\n          : undefined,\n    },\n  ];\n\n  const requiredFailed = items.some(\n    (item) =>\n      PRIVACY_CHECKLIST_ITEMS.find((def) => def.id === item.id)?.required && !item.ok,\n  );\n\n  return { ok: !requiredFailed, items };\n}\n","import { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { runPrivacyChecklist } from \"./privacy.js\";\nimport type { PrivacyChecklistInput } from \"./types.js\";\n\nexport const PLUGIN_MANIFEST_FILENAME = \"agent-inspect-plugin.manifest.json\";\nexport const PLUGIN_NAME_PREFIXES = [\n  \"agent-inspect-plugin-\",\n  \"agent-inspect-adapter-\",\n  \"agent-inspect-renderer-\",\n  \"agent-inspect-check-\",\n  \"agent-inspect-importer-\",\n] as const;\n\nexport type PluginManifestType =\n  | \"plugin\"\n  | \"adapter\"\n  | \"renderer\"\n  | \"check\"\n  | \"importer\";\n\nexport interface PluginManifest {\n  schemaVersion: \"1.0\";\n  id: string;\n  type: PluginManifestType;\n  name: string;\n  version: string;\n  privacy?: PrivacyChecklistInput;\n}\n\nexport interface PluginManifestParseResult {\n  ok: boolean;\n  manifest?: PluginManifest;\n  errors: string[];\n  warnings: string[];\n}\n\nconst CAPTURE_MODES = new Set([\"metadata-only\", \"preview\", \"full\"]);\n\nfunction parseStrictBoolean(\n  value: unknown,\n  label: string,\n  errors: string[],\n): boolean | undefined {\n  if (value === undefined) return undefined;\n  if (value === true) return true;\n  if (value === false) return false;\n  errors.push(`${label} must be a boolean true or false, not ${JSON.stringify(value)}`);\n  return undefined;\n}\n\nfunction parseCaptureMode(\n  value: unknown,\n  errors: string[],\n): PrivacyChecklistInput[\"captureMode\"] | undefined {\n  if (value === undefined) return undefined;\n  const mode = String(value);\n  if (!CAPTURE_MODES.has(mode)) {\n    errors.push(`privacy.captureMode must be one of: metadata-only, preview, full`);\n    return undefined;\n  }\n  return mode as PrivacyChecklistInput[\"captureMode\"];\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isPluginPackageName(name: string): boolean {\n  return PLUGIN_NAME_PREFIXES.some((prefix) => name.startsWith(prefix));\n}\n\nexport function inferPluginTypeFromName(name: string): PluginManifestType | undefined {\n  if (name.startsWith(\"agent-inspect-adapter-\")) return \"adapter\";\n  if (name.startsWith(\"agent-inspect-renderer-\")) return \"renderer\";\n  if (name.startsWith(\"agent-inspect-check-\")) return \"check\";\n  if (name.startsWith(\"agent-inspect-importer-\")) return \"importer\";\n  if (name.startsWith(\"agent-inspect-plugin-\")) return \"plugin\";\n  return undefined;\n}\n\nexport function parsePluginManifest(input: unknown): PluginManifestParseResult {\n  const errors: string[] = [];\n  const warnings: string[] = [];\n  if (!isPlainObject(input)) {\n    return { ok: false, errors: [\"manifest must be a JSON object\"], warnings };\n  }\n  if (input.schemaVersion !== \"1.0\") {\n    errors.push('schemaVersion must be \"1.0\"');\n  }\n  const id = typeof input.id === \"string\" ? input.id.trim() : \"\";\n  if (!id || !isPluginPackageName(id)) {\n    errors.push(\"id must use an agent-inspect plugin naming prefix\");\n  }\n  const type = typeof input.type === \"string\" ? input.type.trim() : \"\";\n  const allowedTypes: PluginManifestType[] = [\n    \"plugin\",\n    \"adapter\",\n    \"renderer\",\n    \"check\",\n    \"importer\",\n  ];\n  if (!allowedTypes.includes(type as PluginManifestType)) {\n    errors.push(`type must be one of: ${allowedTypes.join(\", \")}`);\n  }\n  const name = typeof input.name === \"string\" ? input.name.trim() : \"\";\n  if (!name) errors.push(\"name must be a non-empty string\");\n  const version = typeof input.version === \"string\" ? input.version.trim() : \"\";\n  if (!version) errors.push(\"version must be a non-empty string\");\n\n  let privacy: PrivacyChecklistInput | undefined;\n  if (input.privacy !== undefined) {\n    if (!isPlainObject(input.privacy)) {\n      errors.push(\"privacy must be an object\");\n    } else {\n      privacy = {};\n      const captureMode = parseCaptureMode(input.privacy.captureMode, errors);\n      if (captureMode !== undefined) privacy.captureMode = captureMode;\n      const networkAllowed = parseStrictBoolean(\n        input.privacy.networkAllowed,\n        \"privacy.networkAllowed\",\n        errors,\n      );\n      if (networkAllowed !== undefined) privacy.networkAllowed = networkAllowed;\n      const uploadAllowed = parseStrictBoolean(\n        input.privacy.uploadAllowed,\n        \"privacy.uploadAllowed\",\n        errors,\n      );\n      if (uploadAllowed !== undefined) privacy.uploadAllowed = uploadAllowed;\n      const redactionDocumented = parseStrictBoolean(\n        input.privacy.redactionDocumented,\n        \"privacy.redactionDocumented\",\n        errors,\n      );\n      if (redactionDocumented !== undefined) {\n        privacy.redactionDocumented = redactionDocumented;\n      }\n      const frameworkDepsPackageScoped = parseStrictBoolean(\n        input.privacy.frameworkDepsPackageScoped,\n        \"privacy.frameworkDepsPackageScoped\",\n        errors,\n      );\n      if (frameworkDepsPackageScoped !== undefined) {\n        privacy.frameworkDepsPackageScoped = frameworkDepsPackageScoped;\n      }\n      if (privacy.networkAllowed === true || privacy.uploadAllowed === true) {\n        warnings.push(\"plugin declares network or upload — review before install\");\n      }\n    }\n  } else {\n    warnings.push(\"privacy block missing; plugins doctor will assume conservative defaults\");\n  }\n\n  if (errors.length > 0) return { ok: false, errors, warnings };\n\n  return {\n    ok: true,\n    manifest: {\n      schemaVersion: \"1.0\",\n      id,\n      type: type as PluginManifestType,\n      name,\n      version,\n      ...(privacy ? { privacy } : {}),\n    },\n    errors: [],\n    warnings,\n  };\n}\n\nexport async function readPluginManifestFile(\n  packageDir: string,\n): Promise<PluginManifestParseResult & { path: string }> {\n  const manifestPath = path.join(packageDir, PLUGIN_MANIFEST_FILENAME);\n  try {\n    const raw = await readFile(manifestPath, \"utf8\");\n    const parsed = parsePluginManifest(JSON.parse(raw) as unknown);\n    return { ...parsed, path: manifestPath };\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return { ok: false, path: manifestPath, errors: [message], warnings: [] };\n  }\n}\n\nexport function validatePluginPrivacy(manifest: PluginManifest) {\n  return runPrivacyChecklist(manifest.privacy ?? {});\n}\n","import { loadTraceMetadataList, TraceDirectory } from \"agent-inspect/advanced\";\n\nexport interface TraceIndexEntry {\n  runId: string;\n  path: string;\n  name?: string;\n  startedAt?: number;\n  status?: string;\n}\n\nexport interface TraceIndexSnapshot {\n  traceDir: string;\n  builtAt: string;\n  entries: TraceIndexEntry[];\n  warnings: string[];\n}\n\nexport interface TraceIndexOptions {\n  maxEntries?: number;\n  /** Rebuild when snapshot `builtAt` is older than this ISO timestamp. */\n  invalidateBefore?: string;\n  [key: string]: unknown;\n}\n\nexport interface TraceIndexer {\n  readonly id: string;\n  rebuild(traceDir: string, options?: TraceIndexOptions): Promise<TraceIndexSnapshot>;\n}\n\nexport function defineIndexer(indexer: TraceIndexer): TraceIndexer {\n  if (!indexer.id.trim()) throw new Error(\"indexer id is required\");\n  return indexer;\n}\n\nexport function shouldInvalidateIndex(\n  snapshot: TraceIndexSnapshot,\n  options: TraceIndexOptions = {},\n): boolean {\n  if (!options.invalidateBefore) return false;\n  const cutoff = Date.parse(options.invalidateBefore);\n  const builtAt = Date.parse(snapshot.builtAt);\n  if (Number.isNaN(cutoff) || Number.isNaN(builtAt)) return true;\n  return builtAt < cutoff;\n}\n\nexport async function indexIsStale(\n  snapshot: TraceIndexSnapshot,\n  traceDir: string,\n): Promise<boolean> {\n  const builtMs = Date.parse(snapshot.builtAt);\n  if (Number.isNaN(builtMs)) return true;\n\n  const td = new TraceDirectory({ dir: traceDir });\n  const files = await td.list();\n  for (const file of files) {\n    const stats = await td.getFileStats(file);\n    // Floor sub-ms filesystem mtimes: Node `mtimeMs` is often fractional while\n    // `builtAt` is millisecond-resolution ISO, so same-ms writes can look \"newer\".\n    if (Math.floor(stats.mtimeMs) > builtMs) return true;\n  }\n  return false;\n}\n\nexport function createTraceDirectoryIndexer(): TraceIndexer {\n  return defineIndexer({\n    id: \"trace-directory-metadata\",\n    async rebuild(traceDir, options = {}) {\n      const warnings: string[] = [];\n      const td = new TraceDirectory({ dir: traceDir });\n      const files = await td.list();\n      const maxEntries = options.maxEntries ?? 10_000;\n\n      if (files.length > maxEntries) {\n        warnings.push(\n          `indexer.truncated: trace directory has ${files.length} files; indexing first ${maxEntries}`,\n        );\n      }\n\n      const slice = files.slice(0, maxEntries);\n      const metas = await loadTraceMetadataList(traceDir, slice, (fileName) =>\n        td.getPath(fileName),\n      );\n\n      const entries: TraceIndexEntry[] = metas\n        .map((meta) => ({\n          runId: meta.runId,\n          path: meta.filePath,\n          name: meta.name,\n          startedAt: meta.startedAt,\n          status: meta.status,\n        }))\n        .sort((a, b) => a.runId.localeCompare(b.runId));\n\n      if (entries.length < slice.length) {\n        warnings.push(\n          `indexer.partial: indexed ${entries.length} of ${slice.length} trace files`,\n        );\n      }\n\n      return {\n        traceDir,\n        builtAt: new Date().toISOString(),\n        entries,\n        warnings,\n      };\n    },\n  });\n}\n","import { readdir, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport {\n  inferPluginTypeFromName,\n  isPluginPackageName,\n  PLUGIN_MANIFEST_FILENAME,\n  readPluginManifestFile,\n  validatePluginPrivacy,\n  type PluginManifest,\n} from \"@agent-inspect/adapter-sdk\";\n\nexport interface DiscoveredPlugin {\n  packageName: string;\n  packageDir: string;\n  manifest?: PluginManifest;\n  manifestErrors: string[];\n  warnings: string[];\n}\n\nasync function readPackageName(packageDir: string): Promise<string | undefined> {\n  try {\n    const raw = await readFile(path.join(packageDir, \"package.json\"), \"utf8\");\n    const parsed = JSON.parse(raw) as { name?: string };\n    return typeof parsed.name === \"string\" ? parsed.name : undefined;\n  } catch {\n    return undefined;\n  }\n}\n\nexport async function discoverPlugins(cwd = process.cwd()): Promise<DiscoveredPlugin[]> {\n  const nodeModules = path.join(cwd, \"node_modules\");\n  const found: DiscoveredPlugin[] = [];\n  let entries: string[];\n  try {\n    entries = await readdir(nodeModules);\n  } catch {\n    return found;\n  }\n\n  for (const entry of entries.sort()) {\n    if (entry.startsWith(\"@\")) continue;\n    if (!isPluginPackageName(entry)) continue;\n    const packageDir = path.join(nodeModules, entry);\n    const manifestRead = await readPluginManifestFile(packageDir);\n    found.push({\n      packageName: entry,\n      packageDir,\n      ...(manifestRead.manifest ? { manifest: manifestRead.manifest } : {}),\n      manifestErrors: manifestRead.errors,\n      warnings: manifestRead.warnings,\n    });\n  }\n\n  return found;\n}\n\nexport async function validatePluginPackage(packageRef: string, cwd = process.cwd()) {\n  const packageDir = path.isAbsolute(packageRef)\n    ? packageRef\n    : path.join(cwd, \"node_modules\", packageRef);\n  const packageName = (await readPackageName(packageDir)) ?? packageRef;\n  const errors: string[] = [];\n  const warnings: string[] = [];\n\n  if (!isPluginPackageName(packageName)) {\n    errors.push(`package name ${packageName} does not match plugin naming convention`);\n  }\n\n  const manifestRead = await readPluginManifestFile(packageDir);\n  errors.push(...manifestRead.errors);\n  warnings.push(...manifestRead.warnings);\n\n  if (manifestRead.manifest) {\n    const inferred = inferPluginTypeFromName(packageName);\n    if (inferred && inferred !== manifestRead.manifest.type) {\n      warnings.push(`manifest type ${manifestRead.manifest.type} differs from name prefix (${inferred})`);\n    }\n    const privacy = validatePluginPrivacy(manifestRead.manifest);\n    if (!privacy.ok) {\n      errors.push(\n        ...privacy.items.filter((item) => !item.ok).map((item) => item.detail ?? item.id),\n      );\n    }\n  } else if (manifestRead.errors.some((e) => e.includes(\"ENOENT\"))) {\n    warnings.push(`missing ${PLUGIN_MANIFEST_FILENAME}; add manifest for doctor/validate`);\n  }\n\n  return {\n    ok: errors.length === 0,\n    packageName,\n    packageDir,\n    errors,\n    warnings,\n    manifest: manifestRead.manifest,\n  };\n}\n\nexport async function pluginsListCommand(cwd?: string): Promise<void> {\n  const plugins = await discoverPlugins(cwd);\n  if (plugins.length === 0) {\n    console.log(\"No agent-inspect plugins found in node_modules.\");\n    return;\n  }\n  for (const plugin of plugins) {\n    const type = plugin.manifest?.type ?? inferPluginTypeFromName(plugin.packageName) ?? \"unknown\";\n    console.log(`${plugin.packageName} (${type})`);\n  }\n}\n\nexport async function pluginsDoctorCommand(cwd?: string): Promise<void> {\n  const plugins = await discoverPlugins(cwd);\n  if (plugins.length === 0) {\n    console.log(\"No agent-inspect plugins found.\");\n    return;\n  }\n  let issues = 0;\n  for (const plugin of plugins) {\n    const result = await validatePluginPackage(plugin.packageName, cwd);\n    if (result.ok && result.warnings.length === 0) {\n      console.log(`OK  ${plugin.packageName}`);\n      continue;\n    }\n    issues += 1;\n    console.log(`WARN ${plugin.packageName}`);\n    for (const warning of result.warnings) console.log(`  - ${warning}`);\n    for (const error of result.errors) console.log(`  ! ${error}`);\n  }\n  if (issues > 0) process.exitCode = 1;\n}\n\nexport async function pluginsValidateCommand(packageRef: string, cwd?: string): Promise<void> {\n  const result = await validatePluginPackage(packageRef, cwd);\n  for (const warning of result.warnings) console.warn(`warning: ${warning}`);\n  if (!result.ok) {\n    for (const error of result.errors) console.error(`error: ${error}`);\n    process.exitCode = 1;\n    return;\n  }\n  console.log(`Valid: ${result.packageName}`);\n}\n","import { mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { createTraceDirectoryIndexer, indexIsStale } from \"@agent-inspect/adapter-sdk\";\nimport type { TraceIndexSnapshot } from \"@agent-inspect/adapter-sdk\";\nimport { resolveTraceDir } from \"@agent-inspect/core/advanced\";\n\nconst INDEX_FILENAME = \".agent-inspect-index.json\";\n\nexport function traceIndexPath(traceDir: string): string {\n  return path.join(traceDir, INDEX_FILENAME);\n}\n\nexport interface IndexCommandOptions {\n  dir?: string;\n  json?: boolean;\n  maxEntries?: string;\n}\n\nfunction parseMaxEntries(raw?: string): number | undefined {\n  if (raw === undefined || raw.trim() === \"\") return undefined;\n  const parsed = Number.parseInt(raw, 10);\n  if (!Number.isFinite(parsed) || parsed <= 0) {\n    throw new Error(\"--max-entries must be a positive integer.\");\n  }\n  return parsed;\n}\n\nasync function readSnapshot(indexPath: string): Promise<TraceIndexSnapshot | undefined> {\n  try {\n    const raw = await readFile(indexPath, \"utf8\");\n    return JSON.parse(raw) as TraceIndexSnapshot;\n  } catch (error) {\n    if (\n      typeof error === \"object\" &&\n      error !== null &&\n      \"code\" in error &&\n      error.code === \"ENOENT\"\n    ) {\n      return undefined;\n    }\n\n    throw error;\n  }\n}\n\nexport async function indexBuildCommand(options: IndexCommandOptions = {}): Promise<void> {\n  try {\n    const traceDir = resolveTraceDir({ dir: options.dir });\n    await mkdir(traceDir, { recursive: true });\n    const indexer = createTraceDirectoryIndexer();\n    const snapshot = await indexer.rebuild(traceDir, {\n      maxEntries: parseMaxEntries(options.maxEntries),\n    });\n    const indexPath = traceIndexPath(traceDir);\n    await writeFile(indexPath, `${JSON.stringify(snapshot, null, 2)}\\n`, \"utf8\");\n\n    if (options.json) {\n      console.log(JSON.stringify({ ok: true, indexPath, ...snapshot }, null, 2));\n      return;\n    }\n\n    console.log(`Built trace index: ${indexPath}`);\n    console.log(`Entries: ${snapshot.entries.length}`);\n    if (snapshot.warnings.length > 0) {\n      for (const warning of snapshot.warnings) {\n        console.log(`warning: ${warning}`);\n      }\n    }\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] index build failed: ${msg}`);\n    process.exitCode = 1;\n  }\n}\n\nexport async function indexStatusCommand(options: IndexCommandOptions = {}): Promise<void> {\n  try {\n    const traceDir = resolveTraceDir({ dir: options.dir });\n    const indexPath = traceIndexPath(traceDir);\n    const snapshot = await readSnapshot(indexPath);\n    if (!snapshot) {\n      const payload = { ok: true, exists: false, indexPath, traceDir, stale: true };\n      if (options.json) {\n        console.log(JSON.stringify(payload, null, 2));\n      } else {\n        console.log(`No index at ${indexPath}`);\n        console.log(\"Run: agent-inspect index build\");\n      }\n      return;\n    }\n\n    const stale = await indexIsStale(snapshot, traceDir);\n    const payload = {\n      ok: true,\n      exists: true,\n      indexPath,\n      traceDir,\n      stale,\n      builtAt: snapshot.builtAt,\n      entries: snapshot.entries.length,\n      warnings: snapshot.warnings,\n    };\n\n    if (options.json) {\n      console.log(JSON.stringify(payload, null, 2));\n      return;\n    }\n\n    console.log(`Index: ${indexPath}`);\n    console.log(`Built: ${snapshot.builtAt}`);\n    console.log(`Entries: ${snapshot.entries.length}`);\n    console.log(`Stale: ${stale ? \"yes\" : \"no\"}`);\n    if (snapshot.warnings.length > 0) {\n      for (const warning of snapshot.warnings) {\n        console.log(`warning: ${warning}`);\n      }\n    }\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] index status failed: ${msg}`);\n    process.exitCode = 1;\n  }\n}\n\nexport async function indexCleanCommand(options: IndexCommandOptions = {}): Promise<void> {\n  try {\n    const traceDir = resolveTraceDir({ dir: options.dir });\n    const indexPath = traceIndexPath(traceDir);\n    await rm(indexPath, { force: true });\n    if (options.json) {\n      console.log(JSON.stringify({ ok: true, removed: indexPath }, null, 2));\n      return;\n    }\n    console.log(`Removed index: ${indexPath}`);\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] index clean failed: ${msg}`);\n    process.exitCode = 1;\n  }\n}\n","import { readdir, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { resolveTraceDir } from \"@agent-inspect/core/advanced\";\nimport type * as IndexSqlite from \"@agent-inspect/index-sqlite\";\n\nconst PACKAGE = \"@agent-inspect/index-sqlite\";\n\nexport interface IndexSqliteCommandOptions {\n  dir?: string;\n  json?: boolean;\n  maxRuns?: string;\n  status?: string;\n  session?: string;\n  name?: string;\n  kind?: string;\n  tool?: string;\n  limit?: string;\n}\n\nfunction isModuleNotFound(e: unknown): boolean {\n  return (\n    e !== null &&\n    typeof e === \"object\" &&\n    \"code\" in e &&\n    ((e as NodeJS.ErrnoException).code === \"ERR_MODULE_NOT_FOUND\" ||\n      (e as NodeJS.ErrnoException).code === \"MODULE_NOT_FOUND\")\n  );\n}\n\nasync function loadIndexSqlite(): Promise<typeof IndexSqlite | null> {\n  try {\n    return (await import(\"@agent-inspect/index-sqlite\")) as typeof IndexSqlite;\n  } catch (e) {\n    if (isModuleNotFound(e)) {\n      console.error(\n        `The optional SQLite index is not installed. Run: npm install ${PACKAGE}`,\n      );\n      process.exitCode = 1;\n      return null;\n    }\n    const msg = e instanceof Error ? e.message : String(e);\n    console.error(`[AgentInspect] failed to load ${PACKAGE}: ${msg}`);\n    process.exitCode = 1;\n    return null;\n  }\n}\n\nfunction parsePositiveInt(raw: string | undefined, flag: string): number | undefined {\n  if (raw === undefined || raw.trim() === \"\") return undefined;\n  const parsed = Number.parseInt(raw, 10);\n  if (!Number.isFinite(parsed) || parsed <= 0) {\n    throw new Error(`${flag} must be a positive integer.`);\n  }\n  return parsed;\n}\n\nasync function newestTraceMtimeMs(traceDir: string): Promise<number> {\n  let newest = 0;\n  try {\n    const files = await readdir(traceDir);\n    for (const file of files) {\n      if (!file.endsWith(\".jsonl\")) continue;\n      try {\n        const s = await stat(path.join(traceDir, file));\n        if (s.mtimeMs > newest) newest = s.mtimeMs;\n      } catch {\n        // ignore unreadable entries\n      }\n    }\n  } catch {\n    // missing directory -> newest stays 0\n  }\n  return newest;\n}\n\nexport async function indexSqliteBuildCommand(\n  options: IndexSqliteCommandOptions = {},\n): Promise<void> {\n  const mod = await loadIndexSqlite();\n  if (!mod) return;\n  const result = await mod.buildIndex({\n    traceDir: options.dir,\n    maxRuns: parsePositiveInt(options.maxRuns, \"--max-runs\"),\n  });\n  if (options.json) {\n    console.log(JSON.stringify({ ok: true, ...result }, null, 2));\n    return;\n  }\n  console.log(`Built SQLite index: ${result.dbPath}`);\n  console.log(`Runs: ${result.runs}  Steps: ${result.steps}  Errors: ${result.errors}`);\n  for (const warning of result.warnings) console.log(`warning: ${warning}`);\n}\n\nexport async function indexSqliteStatusCommand(\n  options: IndexSqliteCommandOptions = {},\n): Promise<void> {\n  const mod = await loadIndexSqlite();\n  if (!mod) return;\n  const traceDir = resolveTraceDir({ dir: options.dir });\n  const dbPath = mod.resolveIndexDbPath(traceDir);\n  const status = mod.indexStatus(dbPath);\n  const stale = mod.isIndexStale(dbPath, await newestTraceMtimeMs(traceDir));\n  if (options.json) {\n    console.log(JSON.stringify({ ok: true, traceDir, stale, ...status }, null, 2));\n    return;\n  }\n  if (!status.exists) {\n    console.log(`No SQLite index at ${dbPath}`);\n    console.log(\"Run: agent-inspect index sqlite build\");\n    return;\n  }\n  console.log(`Index: ${status.dbPath}`);\n  console.log(`Healthy: ${status.healthy ? \"yes\" : \"no\"}`);\n  console.log(`Built: ${status.builtAt ?? \"unknown\"}`);\n  console.log(`Runs: ${status.runs}  Steps: ${status.steps}`);\n  console.log(`Stale: ${stale ? \"yes\" : \"no\"}`);\n}\n\nexport async function indexSqliteQueryCommand(\n  options: IndexSqliteCommandOptions = {},\n): Promise<void> {\n  const mod = await loadIndexSqlite();\n  if (!mod) return;\n  const traceDir = resolveTraceDir({ dir: options.dir });\n  const dbPath = mod.resolveIndexDbPath(traceDir);\n  const status = mod.indexStatus(dbPath);\n  if (!status.exists || !status.healthy) {\n    if (options.json) {\n      console.log(JSON.stringify({ ok: false, reason: \"index-missing\", dbPath }, null, 2));\n    } else {\n      console.log(\"No usable SQLite index. Run: agent-inspect index sqlite build\");\n    }\n    process.exitCode = 1;\n    return;\n  }\n  const rows = mod.queryRuns(dbPath, {\n    status: options.status,\n    sessionId: options.session,\n    name: options.name,\n    kind: options.kind,\n    tool: options.tool,\n    limit: parsePositiveInt(options.limit, \"--limit\"),\n  });\n  if (options.json) {\n    console.log(JSON.stringify({ ok: true, count: rows.length, runs: rows }, null, 2));\n    return;\n  }\n  if (rows.length === 0) {\n    console.log(\"No matching runs.\");\n    return;\n  }\n  for (const run of rows) {\n    const parts = [\n      run.runId,\n      run.status ?? \"unknown\",\n      run.name ?? \"\",\n      run.durationMs != null ? `${run.durationMs}ms` : \"\",\n    ].filter((p) => p !== \"\");\n    console.log(parts.join(\"  \"));\n  }\n}\n\nexport async function indexSqliteCleanCommand(\n  options: IndexSqliteCommandOptions = {},\n): Promise<void> {\n  const mod = await loadIndexSqlite();\n  if (!mod) return;\n  const traceDir = resolveTraceDir({ dir: options.dir });\n  const dbPath = mod.resolveIndexDbPath(traceDir);\n  await mod.cleanIndex(dbPath);\n  if (options.json) {\n    console.log(JSON.stringify({ ok: true, removed: dbPath }, null, 2));\n    return;\n  }\n  console.log(`Removed SQLite index: ${dbPath}`);\n}\n","import {\n  cleanWorkspace,\n  createWorkspace,\n  doctorWorkspace,\n  getWorkspaceStatus,\n  readWorkspaceManifestFile,\n  resolveWorkspaceLocation,\n} from \"@agent-inspect/core/workspace\";\nimport type { WorkspaceRedactionProfile } from \"@agent-inspect/core/workspace\";\n\nimport { version as packageVersion } from \"../../../package.json\";\n\nexport interface WorkspaceCommandOptions {\n  cwd?: string;\n  json?: boolean;\n}\n\nexport interface WorkspaceInitOptions extends WorkspaceCommandOptions {\n  project?: string;\n  redactionProfile?: WorkspaceRedactionProfile;\n  dryRun?: boolean;\n}\n\nexport interface WorkspaceCleanOptions extends WorkspaceCommandOptions {\n  yes?: boolean;\n}\n\nfunction printJson(payload: unknown): void {\n  console.log(JSON.stringify(payload, null, 2));\n}\n\nfunction fail(json: boolean | undefined, message: string): void {\n  if (json) {\n    printJson({ ok: false, error: message });\n  } else {\n    console.error(`[AgentInspect] workspace: ${message}`);\n  }\n  process.exitCode = 1;\n}\n\nexport async function workspaceInitCommand(\n  options: WorkspaceInitOptions = {},\n): Promise<void> {\n  try {\n    const result = await createWorkspace({\n      ...(options.cwd ? { cwd: options.cwd } : {}),\n      ...(options.project ? { project: options.project } : {}),\n      ...(options.redactionProfile ? { redactionProfile: options.redactionProfile } : {}),\n      dryRun: options.dryRun === true,\n    });\n\n    if (options.json) {\n      printJson({\n        ok: true,\n        version: packageVersion,\n        dryRun: result.dryRun,\n        created: result.created,\n        adopted: result.adopted,\n        detectedExistingTraces: result.detectedExistingTraces,\n        workspaceDir: result.location.workspaceDir,\n        manifestPath: result.location.manifestPath,\n        createdDirs: result.createdDirs,\n        project: result.manifest.project,\n      });\n      return;\n    }\n\n    console.log(\"AgentInspect workspace\");\n    console.log(`Project: ${result.manifest.project}`);\n    console.log(`Directory: ${result.location.workspaceDir}`);\n    if (result.dryRun) {\n      console.log(\"Dry run — would create:\");\n      for (const dir of result.createdDirs) console.log(`- ${dir}/`);\n      if (result.created) console.log(`- ${result.location.manifestPath}`);\n      return;\n    }\n    if (result.adopted && !result.created) {\n      console.log(\"Adopted existing workspace.json (left unchanged).\");\n    } else if (result.created) {\n      console.log(\"Created workspace.json\");\n    }\n    if (result.detectedExistingTraces) {\n      console.log(\"Detected existing traces — preserved without changes.\");\n    }\n    for (const dir of result.createdDirs) console.log(`Created ${dir}/`);\n    console.log(\"\\nNext: `agent-inspect workspace status`\");\n  } catch (error) {\n    fail(options.json, error instanceof Error ? error.message : String(error));\n  }\n}\n\nexport async function workspaceStatusCommand(\n  options: WorkspaceCommandOptions = {},\n): Promise<void> {\n  const location = resolveWorkspaceLocation(options.cwd);\n  const manifestResult = await readWorkspaceManifestFile(location);\n  if (!manifestResult.ok || !manifestResult.manifest) {\n    fail(\n      options.json,\n      manifestResult.exists\n        ? `invalid workspace.json: ${manifestResult.errors.join(\"; \")}`\n        : \"no workspace found (run `agent-inspect workspace init`)\",\n    );\n    return;\n  }\n\n  try {\n    const status = await getWorkspaceStatus(location, manifestResult.manifest);\n    if (options.json) {\n      printJson({ ok: true, ...status });\n      return;\n    }\n    console.log(`Project: ${status.project}`);\n    console.log(`Traces:    ${status.traceFiles}`);\n    console.log(`Reports:   ${status.reports}`);\n    console.log(`Artifacts: ${status.artifacts}`);\n    console.log(`Bundles:   ${status.bundles}`);\n    console.log(`Notes:     ${status.notes}`);\n    console.log(\n      `Index:     ${status.index.enabled ? status.index.type : \"disabled\"}${\n        status.index.exists ? \" (present)\" : \"\"\n      }`,\n    );\n  } catch (error) {\n    fail(options.json, error instanceof Error ? error.message : String(error));\n  }\n}\n\nexport async function workspaceDoctorCommand(\n  options: WorkspaceCommandOptions = {},\n): Promise<void> {\n  const location = resolveWorkspaceLocation(options.cwd);\n  const result = await doctorWorkspace(location);\n\n  if (options.json) {\n    printJson({ ok: result.ok, checks: result.checks });\n  } else {\n    console.log(\"AgentInspect workspace doctor\");\n    for (const check of result.checks) {\n      const mark = check.status === \"pass\" ? \"✓\" : check.status === \"warn\" ? \"!\" : \"✗\";\n      console.log(`${mark} ${check.id}: ${check.message}`);\n    }\n    console.log(result.ok ? \"\\nWorkspace looks healthy.\" : \"\\nWorkspace has problems.\");\n  }\n\n  if (!result.ok) process.exitCode = 1;\n}\n\nexport async function workspaceCleanCommand(\n  options: WorkspaceCleanOptions = {},\n): Promise<void> {\n  const location = resolveWorkspaceLocation(options.cwd);\n  const manifestResult = await readWorkspaceManifestFile(location);\n  if (!manifestResult.ok || !manifestResult.manifest) {\n    fail(\n      options.json,\n      manifestResult.exists\n        ? `invalid workspace.json: ${manifestResult.errors.join(\"; \")}`\n        : \"no workspace found (run `agent-inspect workspace init`)\",\n    );\n    return;\n  }\n\n  try {\n    const result = await cleanWorkspace(location, manifestResult.manifest, {\n      confirm: options.yes === true,\n    });\n    if (options.json) {\n      printJson({ ok: true, dryRun: result.dryRun, removed: result.removed });\n      return;\n    }\n    if (result.dryRun) {\n      console.log(\"Dry run — would remove (traces are never deleted):\");\n      if (result.removed.length === 0) console.log(\"- (nothing)\");\n      for (const item of result.removed) console.log(`- ${item}`);\n      console.log(\"\\nRe-run with --yes to delete.\");\n      return;\n    }\n    console.log(\"Removed generated workspace content (traces preserved):\");\n    if (result.removed.length === 0) console.log(\"- (nothing)\");\n    for (const item of result.removed) console.log(`- ${item}`);\n  } catch (error) {\n    fail(options.json, error instanceof Error ? error.message : String(error));\n  }\n}\n\nexport async function workspacePathCommand(\n  options: WorkspaceCommandOptions = {},\n): Promise<void> {\n  const location = resolveWorkspaceLocation(options.cwd);\n  if (options.json) {\n    printJson({\n      ok: true,\n      projectRoot: location.projectRoot,\n      workspaceDir: location.workspaceDir,\n      manifestPath: location.manifestPath,\n    });\n    return;\n  }\n  console.log(location.workspaceDir);\n}\n","import { lstat, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport {\n  DEFAULT_SUITE_ARTIFACTS_DIR,\n  defaultSuiteConfigTemplate,\n  loadSuiteConfig,\n  renderSuiteReport,\n  resolveSuiteTemplate,\n  runSuite,\n  validateSuiteConfig,\n  type SuiteRunResult,\n} from \"@agent-inspect/core/advanced\";\n\nexport interface SuiteCommandOptions {\n  config?: string;\n  template?: string;\n  json?: boolean;\n  markdown?: boolean;\n  output?: string;\n  cwd?: string;\n  dryRun?: boolean;\n  yes?: boolean;\n}\n\nexport interface SuiteReportCommandOptions {\n  input?: string;\n  format?: \"markdown\" | \"json\";\n  json?: boolean;\n  cwd?: string;\n}\n\nconst DEFAULT_CONFIG_FILENAME = \"agent-inspect.suite.json\";\nconst CONFIG_EXISTS_ERROR = `${DEFAULT_CONFIG_FILENAME} already exists; refusing to overwrite it.`;\n\nfunction printJson(value: unknown): void {\n  console.log(JSON.stringify(value, null, 2));\n}\n\nfunction resolveCwd(options: { cwd?: string }): string {\n  return path.resolve(options.cwd ?? process.cwd());\n}\n\nfunction getErrorCode(error: unknown): string | undefined {\n  if (typeof error !== \"object\" || error === null || !(\"code\" in error)) {\n    return undefined;\n  }\n  return typeof error.code === \"string\" ? error.code : undefined;\n}\n\nfunction getErrorMessage(error: unknown): string {\n  return error instanceof Error ? error.message : String(error);\n}\n\nfunction failInit(options: SuiteCommandOptions, message: string): void {\n  if (options.json) {\n    printJson({ ok: false, error: message });\n  } else {\n    console.error(`[AgentInspect] suite init failed: ${message}`);\n  }\n  process.exitCode = 1;\n}\n\nasync function pathExists(filePath: string): Promise<boolean> {\n  try {\n    await lstat(filePath);\n    return true;\n  } catch (error) {\n    if (getErrorCode(error) === \"ENOENT\") return false;\n    throw error;\n  }\n}\n\nexport async function suiteInitCommand(options: SuiteCommandOptions = {}): Promise<void> {\n  const cwd = resolveCwd(options);\n  const configPath = path.join(cwd, DEFAULT_CONFIG_FILENAME);\n  const template = options.template?.trim();\n  const suiteConfig =\n    template !== undefined && template !== \"\"\n      ? resolveSuiteTemplate(template)\n      : defaultSuiteConfigTemplate();\n  const content = `${JSON.stringify(suiteConfig, null, 2)}\\n`;\n\n  if (options.dryRun) {\n    try {\n      if (await pathExists(configPath)) {\n        failInit(options, CONFIG_EXISTS_ERROR);\n        return;\n      }\n    } catch (error) {\n      failInit(options, getErrorMessage(error));\n      return;\n    }\n\n    if (options.json) {\n      printJson({\n        ok: true,\n        dryRun: true,\n        wouldWrite: [DEFAULT_CONFIG_FILENAME],\n        config: suiteConfig,\n        ...(template ? { template } : {}),\n      });\n      return;\n    }\n    console.log(\"Dry run — would create:\");\n    console.log(`- ${DEFAULT_CONFIG_FILENAME}`);\n    if (template) console.log(`  template: ${template}`);\n    return;\n  }\n\n  try {\n    await writeFile(configPath, content, {\n      encoding: \"utf-8\",\n      flag: \"wx\",\n    });\n    if (options.json) {\n      printJson({\n        ok: true,\n        created: [DEFAULT_CONFIG_FILENAME],\n        configPath,\n        ...(template ? { template } : {}),\n      });\n      return;\n    }\n    console.log(\"Created suite config:\");\n    console.log(`- ${DEFAULT_CONFIG_FILENAME}`);\n    if (template) console.log(`  template: ${template}`);\n    console.log(\"\\nNext:\");\n    console.log(\"  npx agent-inspect suite validate\");\n    console.log(\"  npx agent-inspect suite run --json\");\n  } catch (error) {\n    const message =\n      getErrorCode(error) === \"EEXIST\"\n        ? CONFIG_EXISTS_ERROR\n        : getErrorMessage(error);\n    failInit(options, message);\n  }\n}\n\nexport async function suiteValidateCommand(options: SuiteCommandOptions = {}): Promise<void> {\n  try {\n    const { config, configPath, configDir } = await loadSuiteConfig({\n      configPath: options.config,\n      cwd: options.cwd,\n    });\n    const validation = await validateSuiteConfig(config, { configDir });\n    const payload = {\n      ok: validation.ok,\n      configPath,\n      suiteName: config.name,\n      cases: config.cases.length,\n      diagnostics: validation.diagnostics,\n    };\n    if (options.json) {\n      printJson(payload);\n    } else if (validation.ok) {\n      console.log(`Suite \"${config.name}\" is valid (${config.cases.length} cases).`);\n      console.log(`Config: ${configPath}`);\n    } else {\n      console.error(`Suite \"${config.name}\" has validation errors.`);\n      for (const item of validation.diagnostics) {\n        console.error(`- [${item.severity}] ${item.message}`);\n      }\n    }\n    if (!validation.ok) process.exitCode = 1;\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    if (options.json) {\n      printJson({ ok: false, error: message });\n    } else {\n      console.error(`[AgentInspect] suite validate failed: ${message}`);\n    }\n    process.exitCode = 1;\n  }\n}\n\nexport async function suiteListCommand(options: SuiteCommandOptions = {}): Promise<void> {\n  try {\n    const { config, configPath } = await loadSuiteConfig({\n      configPath: options.config,\n      cwd: options.cwd,\n    });\n    if (options.json) {\n      printJson({\n        ok: true,\n        suiteName: config.name,\n        configPath,\n        traces: config.traces,\n        cases: config.cases,\n      });\n      return;\n    }\n    console.log(`Suite: ${config.name}`);\n    console.log(`Config: ${configPath}`);\n    console.log(`Traces: ${config.traces}`);\n    console.log(\"Cases:\");\n    for (const suiteCase of config.cases) {\n      const target = suiteCase.trace ?? suiteCase.runId ?? suiteCase.id;\n      console.log(`  ${suiteCase.id} -> ${target}`);\n    }\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    if (options.json) {\n      printJson({ ok: false, error: message });\n    } else {\n      console.error(`[AgentInspect] suite list failed: ${message}`);\n    }\n    process.exitCode = 1;\n  }\n}\n\nasync function writeSuiteArtifact(\n  result: SuiteRunResult,\n  configOutputDir: string | undefined,\n  options: SuiteCommandOptions,\n): Promise<string | undefined> {\n  const cwd = resolveCwd(options);\n  const outputDir = path.resolve(\n    cwd,\n    options.output ?? configOutputDir ?? DEFAULT_SUITE_ARTIFACTS_DIR,\n  );\n  await mkdir(outputDir, { recursive: true });\n  const stamp = result.startedAt.replace(/[:.]/g, \"-\");\n  const filePath = path.join(outputDir, `${result.suiteName}-${stamp}.json`);\n  await writeFile(filePath, `${JSON.stringify(result, null, 2)}\\n`, \"utf-8\");\n  return filePath;\n}\n\nexport async function suiteRunCommand(options: SuiteCommandOptions = {}): Promise<void> {\n  try {\n    const { config } = await loadSuiteConfig({\n      configPath: options.config,\n      cwd: options.cwd,\n    });\n    const result = await runSuite({\n      configPath: options.config,\n      cwd: options.cwd,\n    });\n    const artifactPath = await writeSuiteArtifact(\n      result,\n      config.artifacts?.outputDir,\n      options,\n    );\n\n    if (options.json) {\n      printJson({ ...result, artifactPath: artifactPath ?? null });\n    } else if (options.markdown) {\n      console.log(renderSuiteReport(result, { format: \"markdown\" }));\n      if (artifactPath !== undefined) {\n        console.log(\"\");\n        console.log(`Artifact: ${artifactPath}`);\n      }\n    } else {\n      console.log(`Suite: ${result.suiteName}`);\n      console.log(`Status: ${result.status}`);\n      console.log(\n        `Cases: ${result.summary.passed} passed, ${result.summary.failed} failed, ${result.summary.errors} errors, ${result.summary.skipped} skipped`,\n      );\n      for (const suiteCase of result.cases) {\n        const suffix = suiteCase.message ? ` — ${suiteCase.message}` : \"\";\n        console.log(`  ${suiteCase.id}: ${suiteCase.status}${suffix}`);\n      }\n      if (artifactPath !== undefined) {\n        console.log(`Artifact: ${artifactPath}`);\n      }\n    }\n\n    if (!result.ok) process.exitCode = 1;\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    if (options.json) {\n      printJson({ ok: false, error: message });\n    } else {\n      console.error(`[AgentInspect] suite run failed: ${message}`);\n    }\n    process.exitCode = 1;\n  }\n}\n\nasync function loadSuiteResultFromInput(\n  options: SuiteReportCommandOptions,\n): Promise<SuiteRunResult> {\n  const cwd = resolveCwd(options);\n  if (options.input === undefined || options.input.trim() === \"\") {\n    throw new Error(\"Pass --input <suite-run.json> from a prior suite run.\");\n  }\n  const inputPath = path.resolve(cwd, options.input.trim());\n  const raw = await readFile(inputPath, \"utf-8\");\n  return JSON.parse(raw) as SuiteRunResult;\n}\n\nexport async function suiteReportCommand(\n  options: SuiteReportCommandOptions = {},\n): Promise<void> {\n  try {\n    const result = await loadSuiteResultFromInput(options);\n    const format = options.format ?? (options.json ? \"json\" : \"markdown\");\n    const content = renderSuiteReport(result, { format });\n    if (format === \"json\" || options.json) {\n      printJson(JSON.parse(content));\n    } else {\n      console.log(content);\n    }\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    if (options.json) {\n      printJson({ ok: false, error: message });\n    } else {\n      console.error(`[AgentInspect] suite report failed: ${message}`);\n    }\n    process.exitCode = 1;\n  }\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport {\n  COHORT_METRIC_IDS,\n  analyzeCohort,\n  parseCohortMetricList,\n  renderCohortReport,\n  resolveTraceDir,\n  type CohortMetricId,\n} from \"@agent-inspect/core/advanced\";\n\nimport { loadSessionRuns } from \"./sessions-load.js\";\n\nexport interface CohortCommandOptions {\n  dir?: string;\n  baseline?: string;\n  candidate?: string;\n  cohortKey?: string;\n  groupBy?: string;\n  metric?: string;\n  json?: boolean;\n  format?: \"markdown\" | \"json\" | \"html\";\n  output?: string;\n}\n\nfunction normalizeMetrics(raw: string | undefined): CohortMetricId[] | undefined {\n  const parsed = parseCohortMetricList(raw);\n  if (parsed.length === 0) return undefined;\n  const allowed = new Set<string>(COHORT_METRIC_IDS);\n  const invalid = parsed.filter((metric) => !allowed.has(metric));\n  if (invalid.length > 0) {\n    const valueLabel = invalid.length === 1 ? \"value\" : \"values\";\n    const invalidList = invalid.map((metric) => `\"${metric}\"`).join(\", \");\n    throw new Error(\n        `Unsupported cohort --metric ${valueLabel}: ${invalidList}. Valid metrics: ${COHORT_METRIC_IDS.join(\", \")}.`,\n    );\n  }\n\n  return parsed as CohortMetricId[];\n}\n\nasync function writeArtifacts(\n  result: Awaited<ReturnType<typeof analyzeCohort>>,\n  outputDir: string,\n): Promise<{ jsonPath: string; markdownPath: string; htmlPath: string }> {\n  await mkdir(outputDir, { recursive: true });\n  const jsonPath = path.join(outputDir, \"cohort-results.json\");\n  const markdownPath = path.join(outputDir, \"cohort-summary.md\");\n  const htmlPath = path.join(outputDir, \"cohort-report.html\");\n  await writeFile(jsonPath, `${renderCohortReport(result, { format: \"json\" })}\\n`, \"utf-8\");\n  await writeFile(\n    markdownPath,\n    `${renderCohortReport(result, { format: \"markdown\" })}\\n`,\n    \"utf-8\",\n  );\n  await writeFile(htmlPath, `${renderCohortReport(result, { format: \"html\" })}\\n`, \"utf-8\");\n  return { jsonPath, markdownPath, htmlPath };\n}\n\nexport async function cohortCommand(options: CohortCommandOptions = {}): Promise<void> {\n  try {\n    const metrics = normalizeMetrics(options.metric);\n    const traceDir = resolveTraceDir({ dir: options.dir });\n    const { runs } = await loadSessionRuns(traceDir);\n    const result = await analyzeCohort(runs, {\n      traceDir,\n      baseline: options.baseline,\n      candidate: options.candidate,\n      cohortKey: options.cohortKey,\n      groupBy: options.groupBy,\n      metrics,\n    });\n\n    const format = options.format ?? (options.json ? \"json\" : \"markdown\");\n    let artifacts: { jsonPath: string; markdownPath: string; htmlPath: string } | undefined;\n    if (options.output !== undefined && options.output.trim() !== \"\") {\n      artifacts = await writeArtifacts(result, path.resolve(options.output.trim()));\n    }\n\n    if (options.json || format === \"json\") {\n      console.log(\n        JSON.stringify(\n          {\n            ...result,\n            artifacts: artifacts ?? null,\n          },\n          null,\n          2,\n        ),\n      );\n    } else if (format === \"html\") {\n      console.log(renderCohortReport(result, { format: \"html\" }));\n      if (artifacts !== undefined) {\n        console.error(`Artifacts written to ${options.output}`);\n      }\n    } else {\n      console.log(renderCohortReport(result, { format: \"markdown\" }));\n      if (artifacts !== undefined) {\n        console.log(\"\");\n        console.log(`Artifacts:`);\n        console.log(`- ${artifacts.jsonPath}`);\n        console.log(`- ${artifacts.markdownPath}`);\n        console.log(`- ${artifacts.htmlPath}`);\n      }\n    }\n\n    if (!result.ok) process.exitCode = 1;\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    if (options.json) {\n      console.log(JSON.stringify({ ok: false, error: message }, null, 2));\n    } else {\n      console.error(`[AgentInspect] cohort failed: ${message}`);\n    }\n    process.exitCode = 1;\n  }\n}\n","import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport {\n  gateHasThresholds,\n  parseGateList,\n  renderGateReport,\n  resolveTraceDir,\n  runGate,\n} from \"@agent-inspect/core/advanced\";\n\nimport {\n  parseEvidenceFormat,\n  parseEvidenceProfile,\n  resolveEvidenceOutputDir,\n  shouldEmitEvidence,\n  writeLocalEvidence,\n  type EvidenceOnMode,\n} from \"./evidence-on.js\";\nimport { loadSessionRuns } from \"./sessions-load.js\";\n\nexport interface GateCommandOptions {\n  dir?: string;\n  suite?: string;\n  maxErrorRate?: string;\n  maxP95Duration?: string;\n  forbidTool?: string | string[];\n  requireObservation?: string | string[];\n  json?: boolean;\n  format?:\n    | \"markdown\"\n    | \"json\"\n    | \"json-compact\"\n    | \"html\"\n    | \"junit\"\n    | \"github\"\n    | \"github-annotations\";\n  output?: string;\n  cwd?: string;\n  /** Local Evidence v2 emit mode: fail | always | never. */\n  evidenceOn?: EvidenceOnMode;\n  evidenceDir?: string;\n  evidenceProfile?: string;\n  evidenceFormat?: string;\n}\n\nconst SUPPORTED_FORMATS = new Set([\n  \"markdown\",\n  \"json\",\n  \"json-compact\",\n  \"html\",\n  \"junit\",\n  \"github\",\n  \"github-annotations\",\n]);\n\nfunction collectList(value: string | string[] | undefined): string[] {\n  if (value === undefined) return [];\n  const items = Array.isArray(value) ? value : [value];\n  return items.flatMap((item) => parseGateList(item));\n}\n\nfunction parseRate(value: string | undefined): number | undefined {\n  if (value === undefined || value.trim() === \"\") return undefined;\n  const parsed = Number(value);\n  if (!Number.isFinite(parsed)) {\n    throw new Error(`Invalid --max-error-rate: ${value}`);\n  }\n  if (parsed < 0) {\n    throw new Error(\"--max-error-rate must be a non-negative percentage.\");\n  }\n  if (parsed > 100) {\n    throw new Error(\"--max-error-rate must be at most 100.\");\n  }\n  return parsed;\n}\n\nfunction parseDuration(value: string | undefined): number | undefined {\n  if (value === undefined || value.trim() === \"\") return undefined;\n  const parsed = Number(value);\n  if (!Number.isFinite(parsed)) {\n    throw new Error(`Invalid --max-p95-duration: ${value}`);\n  }\n  return parsed;\n}\n\nasync function writeArtifacts(\n  result: Awaited<ReturnType<typeof runGate>>,\n  outputDir: string,\n): Promise<Record<string, string>> {\n  await mkdir(outputDir, { recursive: true });\n  const paths = {\n    jsonPath: path.join(outputDir, \"gate-results.json\"),\n    markdownPath: path.join(outputDir, \"gate-summary.md\"),\n    htmlPath: path.join(outputDir, \"gate-report.html\"),\n    junitPath: path.join(outputDir, \"junit.xml\"),\n    githubPath: path.join(outputDir, \"github-step-summary.md\"),\n    annotationsPath: path.join(outputDir, \"github-annotations.txt\"),\n  };\n  await writeFile(\n    paths.jsonPath,\n    `${renderGateReport(result, { format: \"json\" })}\\n`,\n    \"utf-8\",\n  );\n  await writeFile(\n    paths.markdownPath,\n    `${renderGateReport(result, { format: \"markdown\" })}\\n`,\n    \"utf-8\",\n  );\n  await writeFile(\n    paths.htmlPath,\n    `${renderGateReport(result, { format: \"html\" })}\\n`,\n    \"utf-8\",\n  );\n  await writeFile(\n    paths.junitPath,\n    `${renderGateReport(result, { format: \"junit\" })}\\n`,\n    \"utf-8\",\n  );\n  await writeFile(\n    paths.githubPath,\n    `${renderGateReport(result, { format: \"github\" })}\\n`,\n    \"utf-8\",\n  );\n  await writeFile(\n    paths.annotationsPath,\n    `${renderGateReport(result, { format: \"github-annotations\" })}\\n`,\n    \"utf-8\",\n  );\n  return paths;\n}\n\nexport async function gateCommand(options: GateCommandOptions = {}): Promise<void> {\n  try {\n    const format = options.format ?? (options.json ? \"json\" : \"markdown\");\n    if (!SUPPORTED_FORMATS.has(format)) {\n      if (options.json) {\n        console.log(\n          JSON.stringify({ ok: false, exitCode: 4, error: `Unsupported format: ${format}` }, null, 2),\n        );\n      } else {\n        console.error(`[AgentInspect] Unsupported format: ${format}`);\n      }\n      process.exitCode = 4;\n      return;\n    }\n\n    const gateOptions: import(\"@agent-inspect/core/advanced\").RunGateOptions = {\n      ...(options.dir !== undefined ? { traceDir: resolveTraceDir({ dir: options.dir }) } : {}),\n      ...(options.suite !== undefined ? { suitePath: options.suite } : {}),\n      ...(options.cwd !== undefined ? { cwd: options.cwd } : {}),\n      ...(parseRate(options.maxErrorRate) !== undefined\n        ? { maxErrorRate: parseRate(options.maxErrorRate) }\n        : {}),\n      ...(parseDuration(options.maxP95Duration) !== undefined\n        ? { maxP95DurationMs: parseDuration(options.maxP95Duration) }\n        : {}),\n      forbidTools: collectList(options.forbidTool),\n      requireObservations: collectList(options.requireObservation),\n    };\n\n    let runs: Awaited<ReturnType<typeof loadSessionRuns>>[\"runs\"] = [];\n    const needsRuns =\n      gateHasThresholds(gateOptions) ||\n      (gateOptions.traceDir !== undefined && gateOptions.suitePath === undefined);\n    if (needsRuns) {\n      const traceDir = gateOptions.traceDir ?? resolveTraceDir({ dir: options.dir });\n      const loaded = await loadSessionRuns(traceDir);\n      runs = loaded.runs;\n      gateOptions.traceDir = traceDir;\n    }\n\n    const result = await runGate(runs, gateOptions);\n\n    let artifacts: Record<string, string> | undefined;\n    if (options.output !== undefined && options.output.trim() !== \"\") {\n      artifacts = await writeArtifacts(result, path.resolve(options.output.trim()));\n    }\n\n    const failed = !result.ok;\n    if (shouldEmitEvidence(options.evidenceOn, failed)) {\n      try {\n        const runIds =\n          runs.length > 0\n            ? runs.map((run) => run.runId)\n            : (result.suiteResult?.cases\n                .map((item) => item.runId)\n                .filter((id): id is string => typeof id === \"string\" && id.length > 0) ??\n              [\"gate\"]);\n        const sourceContents = new Map<string, string>();\n        for (const run of runs) {\n          if (run.filePath) {\n            try {\n              sourceContents.set(run.runId, await readFile(run.filePath, \"utf-8\"));\n            } catch {\n              sourceContents.set(run.runId, \"\");\n            }\n          }\n        }\n        const label = runIds[0] ?? \"gate\";\n        const outputDir = resolveEvidenceOutputDir(\n          options.evidenceDir,\n          `gate-${label}`,\n        );\n        const written = await writeLocalEvidence({\n          outputDir,\n          runIds: runIds.length > 0 ? runIds : [\"gate\"],\n          sourceContents,\n          ...(gateOptions.traceDir !== undefined ? { dir: gateOptions.traceDir } : {}),\n          failed,\n          checkResultsJson: `${JSON.stringify(\n            {\n              aggregateStatus: failed ? \"UNSAFE\" : \"SAFE\",\n              gate: result,\n            },\n            null,\n            2,\n          )}\\n`,\n          summaryText: renderGateReport(result, { format: \"markdown\" }),\n          redactionProfile: parseEvidenceProfile(options.evidenceProfile),\n          format: parseEvidenceFormat(options.evidenceFormat),\n        });\n        if (!options.json && format !== \"json\") {\n          console.log(`Evidence: ${written}`);\n        }\n        if (artifacts !== undefined) {\n          artifacts = { ...artifacts, evidence: written };\n        }\n      } catch (error) {\n        console.error(\n          `[AgentInspect] evidence package skipped: ${error instanceof Error ? error.message : String(error)}`,\n        );\n      }\n    }\n\n    if (options.json || format === \"json\") {\n      console.log(JSON.stringify({ ...result, artifacts: artifacts ?? null }, null, 2));\n    } else if (format === \"html\") {\n      console.log(renderGateReport(result, { format: \"html\" }));\n    } else if (format === \"junit\") {\n      console.log(renderGateReport(result, { format: \"junit\" }));\n    } else if (format === \"github\") {\n      console.log(renderGateReport(result, { format: \"github\" }));\n    } else {\n      console.log(renderGateReport(result, { format: \"markdown\" }));\n      if (artifacts !== undefined) {\n        console.log(\"\");\n        console.log(\"Artifacts:\");\n        for (const value of Object.values(artifacts)) console.log(`- ${value}`);\n      }\n    }\n\n    process.exitCode = result.exitCode;\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    if (options.json) {\n      console.log(JSON.stringify({ ok: false, exitCode: 2, error: message }, null, 2));\n    } else {\n      console.error(`[AgentInspect] gate failed: ${message}`);\n    }\n    process.exitCode = 2;\n  }\n}\n","#!/usr/bin/env node\nimport { realpathSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { Command, Option } from \"commander\";\nimport { version as packageVersion } from \"../../../package.json\";\n\nimport type { ListOptions } from \"./list.js\";\nimport { list } from \"./list.js\";\nimport type { CleanOptions } from \"./clean.js\";\nimport { clean } from \"./clean.js\";\nimport type { ViewOptions } from \"./view.js\";\nimport { view } from \"./view.js\";\nimport type { LogsOptions } from \"./logs.js\";\nimport { logs } from \"./logs.js\";\nimport type { TailOptions } from \"./tail.js\";\nimport { tail } from \"./tail.js\";\nimport type { ExportCommandOptions } from \"./export.js\";\nimport { exportCommand } from \"./export.js\";\nimport type { DiffCommandOptions } from \"./diff.js\";\nimport { diffCommand } from \"./diff.js\";\nimport type { TimelineCommandOptions } from \"./timeline.js\";\nimport { timelineCommand } from \"./timeline.js\";\nimport type { StatsCommandOptions } from \"./stats.js\";\nimport { statsCommand } from \"./stats.js\";\nimport type { SearchCommandOptions } from \"./search.js\";\nimport { searchCommand } from \"./search.js\";\nimport type { SessionsCommandOptions, SessionCommandOptions } from \"./sessions.js\";\nimport {\n  sessionCommand,\n  sessionsActivityCommand,\n  sessionsCommand,\n  sessionsErrorsCommand,\n  sessionsHandoffsCommand,\n  sessionsLatestCommand,\n  sessionsShowCommand,\n} from \"./sessions.js\";\nimport type { WhatCommandOptions } from \"./what.js\";\nimport { whatCommand } from \"./what.js\";\nimport type { ReportCommandOptions } from \"./report.js\";\nimport { reportCommand } from \"./report.js\";\nimport type { RedactCommandOptions } from \"./redact.js\";\nimport { redactCommand } from \"./redact.js\";\nimport type { ExplainCommandOptions } from \"./explain.js\";\nimport { explainCommand } from \"./explain.js\";\nimport type { OpenCommandOptions } from \"./open.js\";\nimport { openCommand } from \"./open.js\";\nimport type { MigrateCommandOptions } from \"./migrate.js\";\nimport { migrateCommand } from \"./migrate.js\";\nimport type { CheckCommandOptions } from \"./check.js\";\nimport type { ServeCommandOptions } from \"./serve.js\";\nimport { checkCommand } from \"./check.js\";\nimport { serveCommand } from \"./serve.js\";\nimport type { StudioCommandOptions, StudioImportBundleOptions, StudioImportDropOptions, StudioImportGitHubOptions } from \"./studio-cmd.js\";\nimport { studioCommand, studioImportBundleCommand, studioImportDropCommand, studioImportGitHubCommand } from \"./studio-cmd.js\";\nimport type { EvalCommandOptions } from \"./eval.js\";\nimport { evalCommand } from \"./eval.js\";\nimport type { SafetyCommandOptions } from \"./safety.js\";\nimport { scanCommand, verifySafeCommand } from \"./safety.js\";\nimport type { ArtifactsCommandOptions } from \"./artifacts.js\";\nimport { artifactsCommand } from \"./artifacts.js\";\nimport type { BundleCommandOptions } from \"./bundle.js\";\nimport { bundleCommand } from \"./bundle.js\";\nimport type { BundleVerifyCommandOptions } from \"./bundle-verify.js\";\nimport { bundleVerifyCommand } from \"./bundle-verify.js\";\nimport type { BundleOpenCommandOptions } from \"./bundle-open.js\";\nimport { bundleOpenCommand } from \"./bundle-open.js\";\nimport type { McpConfigureOptions } from \"./mcp-configure.js\";\nimport { isMcpConfigureClient, mcpConfigureCommand } from \"./mcp-configure.js\";\nimport type { CiSummaryCommandOptions } from \"./ci-summary.js\";\nimport { ciSummaryCommand } from \"./ci-summary.js\";\nimport type { InitCommandOptions } from \"./init.js\";\nimport { initCommand } from \"./init.js\";\nimport type { DoctorCommandOptions } from \"./doctor.js\";\nimport { doctorCommand } from \"./doctor.js\";\nimport {\n  pluginsDoctorCommand,\n  pluginsListCommand,\n  pluginsValidateCommand,\n} from \"./plugins.js\";\nimport type { IndexCommandOptions } from \"./index-cmd.js\";\nimport {\n  indexBuildCommand,\n  indexCleanCommand,\n  indexStatusCommand,\n} from \"./index-cmd.js\";\nimport type { IndexSqliteCommandOptions } from \"./index-sqlite-cmd.js\";\nimport {\n  indexSqliteBuildCommand,\n  indexSqliteCleanCommand,\n  indexSqliteQueryCommand,\n  indexSqliteStatusCommand,\n} from \"./index-sqlite-cmd.js\";\nimport type {\n  WorkspaceCommandOptions,\n  WorkspaceInitOptions,\n  WorkspaceCleanOptions,\n} from \"./workspace.js\";\nimport {\n  workspaceInitCommand,\n  workspaceStatusCommand,\n  workspaceDoctorCommand,\n  workspaceCleanCommand,\n  workspacePathCommand,\n} from \"./workspace.js\";\nimport type {\n  SuiteCommandOptions,\n  SuiteReportCommandOptions,\n} from \"./suite.js\";\nimport {\n  suiteInitCommand,\n  suiteListCommand,\n  suiteReportCommand,\n  suiteRunCommand,\n  suiteValidateCommand,\n} from \"./suite.js\";\nimport type { CohortCommandOptions } from \"./cohort.js\";\nimport { cohortCommand } from \"./cohort.js\";\nimport type { GateCommandOptions } from \"./gate.js\";\nimport { gateCommand } from \"./gate.js\";\n\nexport function runCommand(action: () => Promise<void>): void {\n  void action().catch((error: unknown) => {\n    const msg = error instanceof Error ? error.message : String(error);\n    console.error(`[AgentInspect] ${msg}`);\n    process.exitCode = 1;\n  });\n}\n\nexport function createCliProgram(): Command {\n  const program = new Command(\"agent-inspect\")\n    .description(\"Local-first execution-tree debugger for AI agents\")\n    .version(packageVersion);\n\n  program\n    .command(\"list\")\n    .description(\"List recent AgentInspect runs\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--limit <number>\", \"max runs to show (default 20, max 100)\")\n    .addOption(\n      new Option(\"--status <status>\", \"filter by run status\").choices([\n        \"running\",\n        \"success\",\n        \"error\",\n        \"unknown\",\n      ]),\n    )\n    .option(\"--name <query>\", \"filter by run name or id (substring match)\")\n    .option(\n      \"--since <duration>\",\n      \"only include runs since a duration (e.g. 30s, 5m, 2h, 7d)\",\n    )\n    .option(\"--json\", \"print runs as JSON\")\n    .action(\n      (opts: {\n        dir?: string;\n        limit?: string;\n        status?: ListOptions[\"status\"];\n        name?: string;\n        since?: string;\n        json?: boolean;\n      }) => {\n        runCommand(() => list(opts));\n      },\n    );\n\n  program\n    .command(\"view\")\n    .description(\"View a single run trace\")\n    .argument(\"<run-id>\", \"run id (e.g. from list output)\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--summary\", \"print a run summary (counts, duration, max depth)\")\n    .option(\"--metadata\", \"print trace metadata (file path/size, timestamps)\")\n    .option(\"--errors-only\", \"show only error events / failed steps\")\n    .option(\"--verbose\", \"show extra detail (types, metadata, error stacks)\")\n    .option(\"--json\", \"print raw trace events as JSON\")\n    .option(\n      \"--tui\",\n      \"open optional interactive TUI viewer (requires @agent-inspect/tui)\",\n    )\n    .action(\n      (\n        runId: string,\n        opts: ViewOptions,\n      ) => {\n        runCommand(() => view(runId, opts));\n      },\n    );\n\n  program\n    .command(\"clean\")\n    .description(\"Safely delete old AgentInspect run traces\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\n      \"--older-than <duration>\",\n      \"delete runs older than a duration (e.g. 30s, 5m, 2h, 7d)\",\n    )\n    .option(\"--keep <count>\", \"keep N most recent runs (delete the rest)\")\n    .option(\"--dry-run\", \"print what would be deleted (no changes)\")\n    .option(\"--yes\", \"skip confirmation prompt\")\n    .action(\n      (opts: {\n        dir?: string;\n        olderThan?: string;\n        keep?: string;\n        dryRun?: boolean;\n        yes?: boolean;\n      }) => {\n        runCommand(() => clean(opts satisfies CleanOptions));\n      },\n    );\n\n  program\n    .command(\"logs\")\n    .description(\"Parse structured logs into execution trees\")\n    .argument(\"<file>\", \"path to log file\")\n    .addOption(\n      new Option(\"--format <format>\", \"log format\").choices([\n        \"auto\",\n        \"json\",\n        \"log4js\",\n      ]),\n    )\n    .option(\"--config <path>\", \"path to log ingest config (JSON)\")\n    .option(\n      \"--run-id-key <keys>\",\n      \"override run id keys (comma-separated, e.g. decisionId,requestId,jobId)\",\n    )\n    .option(\"--event-key <key>\", \"override event key\")\n    .option(\"--timestamp-key <key>\", \"override timestamp key\")\n    .option(\"--message-key <key>\", \"override message key\")\n    .option(\"--level-key <key>\", \"override level key\")\n    .option(\"--parent-id-key <key>\", \"override parent id key\")\n    .option(\"--duration-key <key>\", \"override duration key\")\n    .option(\"--status-key <key>\", \"override status key\")\n    .option(\"--json\", \"print result as JSON\")\n    .option(\"--summary\", \"include summary section in human output\")\n    .addOption(\n      new Option(\"--warnings <mode>\", \"warning output mode\").choices([\n        \"summary\",\n        \"all\",\n        \"none\",\n      ]),\n    )\n    .option(\"--verbose\", \"show more detail (reserved for future)\")\n    .option(\"--no-color\", \"disable color output\")\n    .action((file: string, opts: LogsOptions) => {\n      runCommand(() => logs(file, opts));\n    });\n\n  program\n    .command(\"tail\")\n    .description(\"Live tail structured logs into execution trees\")\n    .option(\"--file <path>\", \"tail a log file (default: read from stdin)\")\n    .addOption(\n      new Option(\"--format <format>\", \"log format\").choices([\n        \"auto\",\n        \"json\",\n        \"log4js\",\n      ]),\n    )\n    .option(\"--config <path>\", \"path to log ingest config (JSON)\")\n    .option(\n      \"--run-id-key <keys>\",\n      \"override run id keys (comma-separated, e.g. decisionId,requestId,jobId)\",\n    )\n    .option(\"--event-key <key>\", \"override event key\")\n    .option(\"--timestamp-key <key>\", \"override timestamp key\")\n    .option(\"--message-key <key>\", \"override message key\")\n    .option(\"--level-key <key>\", \"override level key\")\n    .option(\"--parent-id-key <key>\", \"override parent id key\")\n    .option(\"--duration-key <key>\", \"override duration key\")\n    .option(\"--status-key <key>\", \"override status key\")\n    .addOption(\n      new Option(\"--warnings <mode>\", \"warning output mode\").choices([\n        \"summary\",\n        \"all\",\n        \"none\",\n      ]),\n    )\n    .option(\"--refresh <ms>\", \"minimum time between renders (ms)\")\n    .option(\"--once\", \"read once and exit (for --file)\")\n    .option(\"--json\", \"print newline-delimited JSON updates\")\n    .option(\"--no-clear\", \"do not clear screen between renders\")\n    .option(\"--verbose\", \"show more detail (reserved for future)\")\n    .option(\"--no-color\", \"disable color output\")\n    .action((opts: TailOptions) => {\n      runCommand(() => tail(opts));\n    });\n\n  program\n    .command(\"export\")\n    .description(\"Export a manual trace run (Markdown, HTML, OpenInference-compatible JSON, OTLP JSON)\")\n    .argument(\"<run-id>\", \"run id (e.g. from list output)\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .addOption(\n      new Option(\"--format <format>\", \"export format (default: markdown)\").choices([\n        \"markdown\",\n        \"html\",\n        \"openinference\",\n        \"otlp-json\",\n      ]),\n    )\n    .option(\"-o, --output <path>\", \"write export to file (creates parent dirs)\")\n    .option(\"--out <path>\", \"alias for --output\")\n    .option(\"--json\", \"emit JSON wrapper about the export (includes content when writing to stdout)\")\n    .option(\"--validate\", \"validate exported payload shape after generation\")\n    .option(\"--include-attributes\", \"include bounded attributes (review before sharing)\")\n    .option(\"--no-metadata\", \"omit summary / metadata sections\")\n    .option(\"--no-errors\", \"omit error sections\")\n    .addOption(\n      new Option(\n        \"--redaction-profile <profile>\",\n        \"redaction profile for exported copies: local, share, strict (default: local)\",\n      ).choices([\"local\", \"share\", \"strict\"]),\n    )\n    .addOption(\n      new Option(\"--profile <profile>\", \"alias for --redaction-profile\").choices([\n        \"local\",\n        \"share\",\n        \"strict\",\n      ]),\n    )\n    .action((runId: string, opts: ExportCommandOptions) => {\n      runCommand(() => exportCommand(runId, opts));\n    });\n\n  program\n    .command(\"open\")\n    .description(\"Open any supported local trace through the reader pipeline\")\n    .argument(\"[input]\", \"trace file, directory, or - for stdin\")\n    .addOption(\n      new Option(\"--format <format>\", \"trace input format\").choices([\n        \"agent-inspect-jsonl\",\n        \"openinference-json\",\n        \"otlp-json\",\n      ]),\n    )\n    .option(\"--json\", \"print result as JSON\")\n    .option(\"--diagnostics\", \"print reader warnings and unsupported fields\")\n    .option(\"--run <run-id>\", \"select a run when the trace contains multiple runs\")\n    .action((input: string | undefined, opts: OpenCommandOptions) => {\n      runCommand(() => openCommand(input, opts));\n    });\n\n  program\n    .command(\"migrate\")\n    .description(\"Migrate a local AgentInspect JSONL trace to a newer schema\")\n    .argument(\"<input>\", \"AgentInspect JSONL trace file\")\n    .addOption(\n      new Option(\"--to <version>\", \"target schema version\").choices([\"1.0\"]),\n    )\n    .option(\"--dry-run\", \"summarize migration without writing files\")\n    .option(\"-o, --output <path>\", \"write migrated JSONL to a separate file\")\n    .option(\"--force\", \"replace an existing output file\")\n    .action((input: string, opts: MigrateCommandOptions) => {\n      runCommand(() => migrateCommand(input, opts));\n    });\n\n  program\n    .command(\"check\")\n    .description(\"Run deterministic checks against a local trace\")\n    .argument(\"<trace-path-or-run-id>\", \"trace file, directory, stdin -, or run id\")\n    .option(\"--dir <path>\", \"trace directory for run-id lookup\")\n    .addOption(\n      new Option(\"--format <format>\", \"trace input format\").choices([\n        \"agent-inspect-jsonl\",\n        \"openinference-json\",\n        \"otlp-json\",\n      ]),\n    )\n    .option(\"--run <run-id>\", \"select a run when the trace contains multiple runs\")\n    .option(\"--config <path>\", \"path to check config (.json, .js, .mjs, .cjs)\")\n    .option(\"--json\", \"print deterministic JSON check result\")\n    .option(\"--rule <id>\", \"select a rule id (repeatable)\", (value, previous: string[] = []) => [\n      ...previous,\n      value,\n    ])\n    .option(\"--max-duration-ms <number>\", \"add run.duration with a max duration\")\n    .option(\"--required-tool <name>\", \"require a tool name (repeatable)\", (value, previous: string[] = []) => [\n      ...previous,\n      value,\n    ])\n    .option(\"--forbidden-tool <name>\", \"forbid a tool name (repeatable)\", (value, previous: string[] = []) => [\n      ...previous,\n      value,\n    ])\n    .option(\"--forbid-tool <name>\", \"alias for --forbidden-tool (repeatable)\", (value, previous: string[] = []) => [\n      ...previous,\n      value,\n    ])\n    .option(\"--allowed-model <model>\", \"allow an LLM model (repeatable)\", (value, previous: string[] = []) => [\n      ...previous,\n      value,\n    ])\n    .option(\"--max-total-tokens <number>\", \"add llm.usage with a max total-token budget\")\n    .option(\n      \"--max-step-duration <duration>\",\n      \"add run.maxStepDuration (e.g. 30s, 5m)\",\n    )\n    .option(\"--require-completed\", \"add run.requireCompleted\")\n    .option(\"--detect-stalls\", \"add run.stall for running or incomplete events\")\n    .option(\n      \"--fail-on-observation <status>\",\n      \"outcome gate: require ≥1 OUTCOME and fail when status matches (passed,failed,unknown,skipped; comma-separated). Does not invent outcomes from tool/LLM/run success; use --preset trajectory for structural checks\",\n    )\n    .option(\"--session <id>\", \"check all runs in a workflow session (requires --dir)\")\n    .option(\"--group <id>\", \"check all runs sharing a groupId (requires --dir)\")\n    .option(\n      \"--correlate-group\",\n      \"when using --session, also match synthetic group: session keys\",\n    )\n    .option(\n      \"--guardrails <rule>\",\n      \"run optional guardrail rules (repeatable): banned-phrase, pii-leak, prompt-injection, ...\",\n      (value, previous: string[] = []) => [...previous, value],\n    )\n    .option(\n      \"--circuit <rule>\",\n      \"run optional circuit rules (repeatable): same-tool-repetition, max-retries, ...\",\n      (value, previous: string[] = []) => [...previous, value],\n    )\n    .addOption(\n      new Option(\"--preset <name>\", \"additive check preset (trajectory=structure only; safety=share checks; not interchangeable)\")\n        .choices([\"trajectory\", \"safety\", \"comprehensive\", \"behavioral-session\"]),\n    )\n    .addOption(\n      new Option(\n        \"--evidence-on <mode>\",\n        \"write local Evidence v2 (fail=on failure, always, never; no upload)\",\n      ).choices([\"fail\", \"always\", \"never\"]),\n    )\n    .option(\"--evidence-dir <path>\", \"local Evidence output directory or base path\")\n    .addOption(\n      new Option(\n        \"--evidence-profile <profile>\",\n        \"Evidence redaction profile (default share)\",\n      ).choices([\"local\", \"share\", \"strict\"]),\n    )\n    .addOption(\n      new Option(\n        \"--evidence-format <format>\",\n        \"Evidence output format (default directory)\",\n      ).choices([\"directory\", \"html\", \"zip\"]),\n    )\n    .action((target: string, opts: CheckCommandOptions) => {\n      runCommand(() => checkCommand(target, opts));\n    });\n\n  program\n    .command(\"serve\")\n    .description(\"Start optional localhost read-only trace viewer\")\n    .option(\"--dir <path>\", \"trace directory to serve\")\n    .option(\"--host <host>\", \"bind host (default 127.0.0.1)\", \"127.0.0.1\")\n    .option(\"--port <number>\", \"bind port (default 7337)\", \"7337\")\n    .option(\"--open\", \"open browser locally when host is localhost\")\n    .action((opts: ServeCommandOptions) => {\n      runCommand(() => serveCommand(opts));\n    });\n\n  program\n    .command(\"viewer\")\n    .description(\"Start localhost read-only viewer (traces, suite, or workspace) (v5.3+)\")\n    .option(\"--dir <path>\", \"trace directory (trace mode)\")\n    .option(\"--suite\", \"suite evidence mode\")\n    .option(\"--workspace\", \"workspace mode\")\n    .option(\"--config <path>\", \"suite config path (suite mode)\")\n    .option(\"--host <host>\", \"bind host (default 127.0.0.1)\", \"127.0.0.1\")\n    .option(\"--port <number>\", \"bind port (default 7337)\", \"7337\")\n    .option(\"--open\", \"open browser locally when host is localhost\")\n    .action((opts: ServeCommandOptions) => {\n      runCommand(() => serveCommand(opts));\n    });\n\n  const studioCmd = program\n    .command(\"studio\")\n    .description(\n      \"Start self-hosted read-only Studio analyzer (requires @agent-inspect/studio) (v6.0+)\",\n    )\n    .option(\"--workspace <path>\", \"studio registry manifest path\")\n    .option(\"--db <path>\", \"studio database path (sqlite file or postgres URL)\")\n    .option(\"--host <host>\", \"bind host (default 127.0.0.1)\", \"127.0.0.1\")\n    .option(\"--port <number>\", \"bind port (default 7340)\", \"7340\")\n    .option(\"--server\", \"bind for network access (0.0.0.0; requires explicit opt-in)\")\n    .option(\"--auth <mode>\", \"auth mode: none or basic\", \"none\")\n    .option(\"--password-env <name>\", \"env var for basic-auth password\")\n    .option(\"--ingest <channel>\", \"enable ingest channel on startup (file-drop, http)\")\n    .option(\"--ingest-token-env <name>\", \"env var for HTTP ingest token (default STUDIO_INGEST_TOKEN)\")\n    .option(\"--archive-file-drop\", \"archive file-drop sources after successful import\")\n    .option(\"--open\", \"open browser locally when host is localhost\")\n    .action((opts: StudioCommandOptions) => {\n      runCommand(() => studioCommand(opts));\n    });\n\n  const studioImportCmd = studioCmd\n    .command(\"import\")\n    .description(\"Import external evidence into Studio (v6.1+)\");\n\n  studioImportCmd\n    .command(\"drop\")\n    .description(\"Import allowlisted files from a file-drop directory\")\n    .option(\"--workspace <path>\", \"studio registry manifest path\")\n    .option(\"--db <path>\", \"studio database path (sqlite file or postgres URL)\")\n    .option(\"--dir <path>\", \"file-drop directory (defaults to registry import.fileDropDir)\")\n    .option(\"--archive\", \"move imported files into .imported/ under the drop dir\")\n    .action((opts: StudioImportDropOptions) => {\n      runCommand(() => studioImportDropCommand(opts));\n    });\n\n  studioImportCmd\n    .command(\"github\")\n    .description(\"Download a GitHub Actions artifact into the studio import dirs\")\n    .requiredOption(\"--repo <owner/name>\", \"GitHub repository\")\n    .requiredOption(\"--run-id <id>\", \"workflow run id\")\n    .requiredOption(\"--artifact <name>\", \"artifact name\")\n    .option(\"--workspace <path>\", \"studio registry manifest path\")\n    .option(\"--db <path>\", \"studio database path (sqlite file or postgres URL)\")\n    .option(\"--token-env <name>\", \"env var for GitHub token (default GITHUB_TOKEN)\")\n    .action((opts: StudioImportGitHubOptions) => {\n      runCommand(() => studioImportGitHubCommand(opts));\n    });\n\n  studioImportCmd\n    .command(\"bundle\")\n    .description(\"Import a local share-safe bundle directory into Studio\")\n    .requiredOption(\"--path <dir>\", \"bundle directory path\")\n    .option(\"--workspace <path>\", \"studio registry manifest path\")\n    .option(\"--db <path>\", \"studio database path (sqlite file or postgres URL)\")\n    .action((opts: StudioImportBundleOptions) => {\n      runCommand(() => studioImportBundleCommand(opts));\n    });\n\n  program\n    .command(\"eval\")\n    .description(\"Run deterministic local evals against a trace\")\n    .argument(\"<trace-path-or-run-id>\", \"trace file, directory, stdin -, or run id\")\n    .option(\"--dir <path>\", \"trace directory for run-id lookup\")\n    .addOption(\n      new Option(\"--format <format>\", \"trace input format\").choices([\n        \"agent-inspect-jsonl\",\n        \"openinference-json\",\n        \"otlp-json\",\n      ]),\n    )\n    .option(\"--run <run-id>\", \"select a run when the trace contains multiple runs\")\n    .option(\"--config <path>\", \"path to eval config (.json, .js, .mjs, .cjs)\")\n    .option(\"--json\", \"print deterministic JSON eval result\")\n    .option(\"--markdown\", \"print deterministic Markdown eval summary\")\n    .option(\"--require-success\", \"require the selected run to complete successfully\")\n    .option(\"--required-tool <name>\", \"require a tool name (repeatable)\", (value, previous: string[] = []) => [\n      ...previous,\n      value,\n    ])\n    .option(\"--forbid-tool <name>\", \"forbid a tool name (repeatable)\", (value, previous: string[] = []) => [\n      ...previous,\n      value,\n    ])\n    .option(\"--forbidden-tool <name>\", \"alias for --forbid-tool (repeatable)\", (value, previous: string[] = []) => [\n      ...previous,\n      value,\n    ])\n    .option(\"--max-duration-ms <number>\", \"require run duration at or below this value\")\n    .option(\"--max-depth <number>\", \"require tree depth at or below this value\")\n    .option(\"--max-retries <number>\", \"require retry counts at or below this value\")\n    .option(\"--max-total-tokens <number>\", \"require total LLM tokens at or below this value\")\n    .option(\n      \"--require-retrieval-before-generation\",\n      \"require a retrieval step before the first LLM generation\",\n    )\n    .option(\"--required-decision-metadata <key>\", \"require decision metadata (repeatable)\", (value, previous: string[] = []) => [\n      ...previous,\n      value,\n    ])\n    .option(\"--context-overlap\", \"require answer/context token overlap\")\n    .option(\"--min-context-overlap <number>\", \"minimum answer/context overlap ratio\")\n    .option(\"--min-shared-terms <number>\", \"minimum shared answer/context terms\")\n    .option(\"--quote-overlap\", \"require quoted answer text to appear in context\")\n    .option(\"--citation-presence\", \"require a citation or source reference\")\n    .option(\"--required-source-id <id>\", \"require a source id in context or citations (repeatable)\", (value, previous: string[] = []) => [\n      ...previous,\n      value,\n    ])\n    .option(\"--min-answer-characters <number>\", \"minimum answer character count\")\n    .option(\"--max-answer-characters <number>\", \"maximum answer character count\")\n    .option(\"--min-answer-words <number>\", \"minimum answer word count\")\n    .option(\"--max-answer-words <number>\", \"maximum answer word count\")\n    .option(\"--banned-phrase <text>\", \"ban unsupported-answer phrasing (repeatable)\", (value, previous: string[] = []) => [\n      ...previous,\n      value,\n    ])\n    .action((target: string, opts: EvalCommandOptions) => {\n      runCommand(() => evalCommand(target, opts));\n    });\n\n  program\n    .command(\"scan\")\n    .description(\"Best-effort local safety scan for trace capture risks\")\n    .argument(\"<trace-path-or-run-id>\", \"trace file, directory, stdin -, or run id\")\n    .option(\"--dir <path>\", \"trace directory for run-id lookup\")\n    .addOption(\n      new Option(\"--format <format>\", \"trace input format\").choices([\n        \"agent-inspect-jsonl\",\n        \"openinference-json\",\n        \"otlp-json\",\n      ]),\n    )\n    .option(\"--run <run-id>\", \"select a run when the trace contains multiple runs\")\n    .option(\"--json\", \"print deterministic JSON safety result\")\n    .option(\"--explain\", \"explain each finding (path, confidence, redaction, override, bundle gate)\")\n    .option(\"--max-string-length <number>\", \"unsafe threshold for string values\")\n    .option(\"--max-array-length <number>\", \"unsafe threshold for array values\")\n    .option(\"--max-object-keys <number>\", \"unsafe threshold for object key counts\")\n    .option(\"--max-serialized-bytes <number>\", \"unsafe threshold for serialized values\")\n    .option(\"--policy <path>\", \"local JSON redaction policy (extraKeys + bounded patterns)\")\n    .action((target: string, opts: SafetyCommandOptions) => {\n      runCommand(() => scanCommand(target, opts));\n    });\n\n  program\n    .command(\"verify-safe\")\n    .description(\"Best-effort local trace safety verification\")\n    .argument(\"<trace-path-or-run-id>\", \"trace file, directory, stdin -, or run id\")\n    .option(\"--dir <path>\", \"trace directory for run-id lookup\")\n    .addOption(\n      new Option(\"--format <format>\", \"trace input format\").choices([\n        \"agent-inspect-jsonl\",\n        \"openinference-json\",\n        \"otlp-json\",\n      ]),\n    )\n    .option(\"--run <run-id>\", \"select a run when the trace contains multiple runs\")\n    .option(\"--json\", \"print deterministic JSON safety result\")\n    .option(\"--explain\", \"explain each finding (path, confidence, redaction, override, bundle gate)\")\n    .option(\"--max-string-length <number>\", \"unsafe threshold for string values\")\n    .option(\"--max-array-length <number>\", \"unsafe threshold for array values\")\n    .option(\"--max-object-keys <number>\", \"unsafe threshold for object key counts\")\n    .option(\"--max-serialized-bytes <number>\", \"unsafe threshold for serialized values\")\n    .option(\"--policy <path>\", \"local JSON redaction policy (extraKeys + bounded patterns)\")\n    .action((target: string, opts: SafetyCommandOptions) => {\n      runCommand(() => verifySafeCommand(target, opts));\n    });\n\n  program\n    .command(\"artifacts\")\n    .description(\"Create safe local CI trace artifacts\")\n    .argument(\"<trace-path-or-run-id>\", \"trace file, directory, stdin -, or run id\")\n    .requiredOption(\"--output-dir <path>\", \"directory for generated artifacts\")\n    .option(\"--dir <path>\", \"trace directory for run-id lookup\")\n    .addOption(\n      new Option(\"--format <format>\", \"trace input format\").choices([\n        \"agent-inspect-jsonl\",\n        \"openinference-json\",\n        \"otlp-json\",\n      ]),\n    )\n    .option(\"--run <run-id>\", \"select a run when the trace contains multiple runs\")\n    .option(\"--baseline <trace-path-or-run-id>\", \"optional baseline trace for diff artifacts\")\n    .option(\"--baseline-run <run-id>\", \"select a run from the baseline trace\")\n    .option(\"--github-summary <path>\", \"append a safe summary to this file, e.g. GITHUB_STEP_SUMMARY\")\n    .option(\"--evidence\", \"write Evidence v2 package on failure (default behavior when omitted)\")\n    .option(\"--no-evidence\", \"skip Evidence v2 package\")\n    .option(\"--always-evidence\", \"write Evidence v2 package even when checks pass\")\n    .option(\"--json\", \"print deterministic JSON manifest\")\n    .action((target: string, opts: ArtifactsCommandOptions) => {\n      runCommand(() => artifactsCommand(target, opts));\n    });\n\n  const bundleCmd = program\n    .command(\"bundle\")\n    .description(\"Create or verify share-safe offline evidence bundles\")\n    .argument(\"[run-id]\", \"run id to bundle (optional with --session or --since)\")\n    .option(\"--dir <path>\", \"trace directory for run/session lookup\")\n    .option(\"--session <session-id>\", \"bundle all runs in a session\")\n    .option(\"--since <duration>\", \"bundle runs with activity since a duration (e.g. 24h)\")\n    .addOption(\n      new Option(\"--profile <profile>\", \"redaction profile for exported copies\")\n        .choices([\"local\", \"share\", \"strict\"])\n        .default(\"share\"),\n    )\n    .addOption(\n      new Option(\n        \"--redaction-profile <profile>\",\n        \"alias for --profile (canonical spelling)\",\n      ).choices([\"local\", \"share\", \"strict\"]),\n    )\n    .option(\"--out <path>\", \"output directory, .html path, or .zip path\")\n    .option(\"--output <path>\", \"alias for --out (canonical spelling)\")\n    .addOption(\n      new Option(\"--format <format>\", \"bundle output format\")\n        .choices([\"directory\", \"html\", \"zip\"])\n        .default(\"directory\"),\n    )\n    .option(\"--allow-unsafe\", \"write bundle even when verify-safe reports UNSAFE\")\n    .option(\"--json\", \"print deterministic JSON manifest\")\n    .action((runId: string | undefined, opts: BundleCommandOptions) => {\n      runCommand(() => bundleCommand(runId, opts));\n    });\n\n  bundleCmd\n    .command(\"verify\")\n    .description(\"Verify Evidence v2 integrity (manifest, hashes, presence)\")\n    .argument(\"<path>\", \"evidence/bundle directory containing evidence.json\")\n    .addOption(\n      new Option(\"--unexpected <mode>\", \"policy for files not listed in the manifest\")\n        .choices([\"fail\", \"warn\", \"ignore\"])\n        .default(\"fail\"),\n    )\n    .option(\"--json\", \"print deterministic JSON verify result\")\n    .action((targetPath: string, opts: BundleVerifyCommandOptions, command) => {\n      const merged = {\n        ...opts,\n        ...(command.optsWithGlobals?.() ?? {}),\n      };\n      // Commander may place --json on the parent `bundle` command when both define it.\n      const json =\n        opts.json === true ||\n        merged.json === true ||\n        process.argv.includes(\"--json\");\n      runCommand(() => bundleVerifyCommand(targetPath, { ...opts, json }));\n    });\n\n  bundleCmd\n    .command(\"open\")\n    .description(\"Verify then open local Evidence HTML in the platform browser (no network)\")\n    .argument(\"<path>\", \"evidence/bundle directory or evidence.html path\")\n    .option(\"--skip-verify\", \"skip integrity verify before open (not recommended)\")\n    .option(\"--json\", \"print deterministic JSON open result\")\n    .action((targetPath: string, opts: BundleOpenCommandOptions) => {\n      const json = opts.json === true || process.argv.includes(\"--json\");\n      runCommand(() => bundleOpenCommand(targetPath, { ...opts, json }));\n    });\n\n  program\n    .command(\"ci-summary\")\n    .description(\"Summarize local reporter artifact manifests for CI\")\n    .argument(\"<manifest...>\", \"reporter artifact manifest JSON files\")\n    .option(\"-o, --output <path>\", \"write Markdown summary to a local file\")\n    .option(\"--github-summary <path>\", \"append Markdown summary to this local file, e.g. GITHUB_STEP_SUMMARY\")\n    .option(\"--json\", \"print deterministic JSON summary\")\n    .action((manifest: string[], opts: CiSummaryCommandOptions) => {\n      runCommand(() => ciSummaryCommand(manifest, opts));\n    });\n\n  program\n    .command(\"diff\")\n    .description(\"Compare two local AgentInspect JSONL traces (read-only)\")\n    .argument(\"<left-run-id>\", \"first run id\")\n    .argument(\"<right-run-id>\", \"second run id\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--json\", \"print diff result as JSON\")\n    .option(\"--ignore-duration\", \"omit duration comparisons\")\n    .option(\n      \"--duration-threshold <duration>\",\n      \"ignore duration deltas at or below this (e.g. 500ms, 2s, 1m)\",\n    )\n    .addOption(\n      new Option(\"--focus <scope>\", \"limit categories shown\").choices([\n        \"all\",\n        \"errors\",\n        \"structure\",\n        \"outputs\",\n      ]),\n    )\n    .addOption(\n      new Option(\"--check <scope>\", \"limit categories compared\").choices([\n        \"all\",\n        \"structure\",\n        \"outputs\",\n        \"errors\",\n        \"timing\",\n      ]),\n    )\n    .option(\"--verbose\", \"show more left/right detail\")\n    .action((leftRunId: string, rightRunId: string, opts: DiffCommandOptions) => {\n      runCommand(() => diffCommand(leftRunId, rightRunId, opts));\n    });\n\n  program\n    .command(\"timeline\")\n    .description(\"Chronological timeline for a single run (local JSONL)\")\n    .argument(\"<run-id>\", \"run id (e.g. from list output)\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--json\", \"print timeline as JSON\")\n    .addOption(\n      new Option(\"--focus <mode>\", \"highlight slowest steps by duration\").choices([\n        \"slow\",\n      ]),\n    )\n    .action((runId: string, opts: TimelineCommandOptions) => {\n      runCommand(() => timelineCommand(runId, opts));\n    });\n\n  program\n    .command(\"stats\")\n    .description(\"Local aggregate stats over trace files (read-only)\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--since <duration>\", \"only include runs since a duration (e.g. 7d)\")\n    .option(\"--correlation-id <id>\", \"filter by run_started.metadata.correlationId\")\n    .option(\"--group-id <id>\", \"filter by run_started.metadata.groupId\")\n    .option(\"--json\", \"print stats as JSON\")\n    .action((opts: StatsCommandOptions) => {\n      runCommand(() => statsCommand(opts));\n    });\n\n  program\n    .command(\"search\")\n    .description(\"Deterministic local search over trace files (read-only)\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--since <duration>\", \"only search runs since a duration\")\n    .addOption(\n      new Option(\"--status <status>\", \"filter by run or step status\").choices([\n        \"success\",\n        \"error\",\n        \"running\",\n        \"unknown\",\n      ]),\n    )\n    .option(\"--kind <kind>\", \"filter by step kind/type (llm, tool, logic, …)\")\n    .option(\"--type <type>\", \"alias for --kind on manual trace step type\")\n    .option(\"--name <query>\", \"substring match on run or step name\")\n    .option(\"--tool <query>\", \"substring match on tool step name or metadata.toolName\")\n    .option(\n      \"--observation <status>\",\n      \"filter by observed outcome status (passed, failed, unknown, skipped)\",\n    )\n    .option(\n      \"--duration <expr>\",\n      \"duration filter on run or step (e.g. >5s, >=500ms)\",\n    )\n    .option(\"--limit <number>\", \"max results (default 50)\")\n    .option(\"--session <id>\", \"limit search to one workflow session\")\n    .option(\n      \"--correlate-group\",\n      \"when using --session, also match synthetic group: keys\",\n    )\n    .option(\"--json\", \"print results as JSON\")\n    .action((opts: SearchCommandOptions) => {\n      runCommand(() => searchCommand(opts));\n    });\n\n  const sessionsCmd = program\n    .command(\"sessions\")\n    .description(\n      \"Workflow sessions and activity from local trace metadata (read-only, v4.2+)\",\n    )\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\n      \"--correlate-group\",\n      \"treat shared groupId as a synthetic session when sessionId is absent\",\n    )\n    .option(\"--json\", \"print JSON output\")\n    .option(\n      \"--stale-after <duration>\",\n      \"mark sessions stale after inactivity (e.g. 24h, 7d)\",\n    )\n    .action((opts: SessionsCommandOptions) => {\n      runCommand(() => sessionsCommand(opts));\n    });\n\n  sessionsCmd\n    .command(\"latest\")\n    .description(\"Show the most recently active session\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--correlate-group\", \"include synthetic group: sessions\")\n    .option(\"--stale-after <duration>\", \"staleness threshold for status derivation\")\n    .option(\"--json\", \"print JSON result\")\n    .action((opts: SessionsCommandOptions) => {\n      runCommand(() => sessionsLatestCommand(opts));\n    });\n\n  sessionsCmd\n    .command(\"activity\")\n    .description(\"Summarize recent session activity\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--since <duration>\", \"activity window (default 7d)\")\n    .option(\"--correlate-group\", \"include synthetic group: sessions\")\n    .option(\"--stale-after <duration>\", \"staleness threshold for status derivation\")\n    .option(\"--json\", \"print JSON result\")\n    .action((opts: SessionsCommandOptions) => {\n      runCommand(() => sessionsActivityCommand(opts));\n    });\n\n  sessionsCmd\n    .command(\"show\")\n    .description(\"Show one session (alias for session <id>)\")\n    .argument(\"<session-id>\", \"session id\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--timeline\", \"include per-run timelines\")\n    .option(\"--critical-path\", \"include critical path section\")\n    .option(\"--diagnostics\", \"include ambiguity warnings\")\n    .option(\"--json\", \"print JSON result\")\n    .action((sessionId: string, opts: SessionCommandOptions) => {\n      runCommand(() => sessionsShowCommand(sessionId, opts));\n    });\n\n  sessionsCmd\n    .command(\"handoffs\")\n    .description(\"List handoff edges across sessions\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--session <id>\", \"limit to one session\")\n    .option(\"--correlate-group\", \"include synthetic group: sessions\")\n    .option(\"--json\", \"print JSON result\")\n    .action((opts: SessionsCommandOptions) => {\n      runCommand(() => sessionsHandoffsCommand(opts));\n    });\n\n  sessionsCmd\n    .command(\"errors\")\n    .description(\"List sessions with errors in a time window\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--since <duration>\", \"filter by last activity (default: all)\")\n    .option(\"--correlate-group\", \"include synthetic group: sessions\")\n    .option(\"--stale-after <duration>\", \"staleness threshold for status derivation\")\n    .option(\"--json\", \"print JSON result\")\n    .action((opts: SessionsCommandOptions) => {\n      runCommand(() => sessionsErrorsCommand(opts));\n    });\n\n  program\n    .command(\"session\")\n    .description(\"Inspect one workflow session: runs, handoffs, retries (read-only)\")\n    .argument(\"<session-id>\", \"session id (from sessions output)\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--timeline\", \"include per-run timelines\")\n    .option(\"--critical-path\", \"include critical path section\")\n    .option(\"--diagnostics\", \"include ambiguity warnings\")\n    .option(\"--json\", \"print session view as JSON\")\n    .action((sessionId: string, opts: SessionCommandOptions) => {\n      runCommand(() => sessionCommand(sessionId, opts));\n    });\n\n  program\n    .command(\"what\")\n    .description(\"Concise human-readable summary of a single run (local JSONL)\")\n    .argument(\"<run-id>\", \"run id (e.g. from list output)\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--json\", \"print structured summary as JSON\")\n    .option(\"--no-correlation\", \"omit correlation metadata from human output\")\n    .action((runId: string, opts: WhatCommandOptions) => {\n      runCommand(() => whatCommand(runId, opts));\n    });\n\n  program\n    .command(\"report\")\n    .description(\"Generate markdown or HTML inspection report for a single run\")\n    .argument(\"<run-id>\", \"run id (e.g. from list output)\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .addOption(\n      new Option(\"--format <format>\", \"report format (default: markdown)\").choices([\n        \"markdown\",\n        \"html\",\n      ]),\n    )\n    .option(\"-o, --output <path>\", \"write report to file (creates parent dirs)\")\n    .option(\"--out <path>\", \"alias for --output\")\n    .option(\"--json\", \"emit JSON wrapper (includes content when writing to stdout)\")\n    .option(\"--include-attributes\", \"include bounded step attributes in tree section\")\n    .option(\"--no-errors\", \"omit error details from tree section\")\n    .option(\"--no-correlation\", \"omit correlation metadata from what section\")\n    .addOption(\n      new Option(\"--section <section>\", \"report section (default: all)\").choices([\n        \"all\",\n        \"observations\",\n        \"what\",\n        \"timeline\",\n        \"tree\",\n      ]),\n    )\n    .addOption(\n      new Option(\n        \"--redaction-profile <profile>\",\n        \"redaction profile for entire report: local, share, strict (default: local)\",\n      ).choices([\"local\", \"share\", \"strict\"]),\n    )\n    .addOption(\n      new Option(\"--profile <profile>\", \"alias for --redaction-profile\").choices([\n        \"local\",\n        \"share\",\n        \"strict\",\n      ]),\n    )\n    .action((runId: string, opts: ReportCommandOptions) => {\n      runCommand(() => reportCommand(runId, opts));\n    });\n\n  program\n    .command(\"redact\")\n    .description(\"Redact a local JSON or JSONL trace/file\")\n    .argument(\"<trace-or-file>\", \"trace file, JSON file, stdin -, or run id\")\n    .option(\"--dir <path>\", \"trace directory for run-id lookup\")\n    .addOption(\n      new Option(\n        \"--profile <profile>\",\n        \"redaction profile: local, share, strict (default: share)\",\n      ).choices([\"local\", \"share\", \"strict\"]),\n    )\n    .addOption(\n      new Option(\n        \"--redaction-profile <profile>\",\n        \"alias for --profile (canonical spelling)\",\n      ).choices([\"local\", \"share\", \"strict\"]),\n    )\n    .option(\"-o, --output <path>\", \"write redacted content to a file\")\n    .option(\"--out <path>\", \"alias for --output\")\n    .option(\"--json\", \"print deterministic JSON wrapper with findings\")\n    .option(\"--policy <path>\", \"local JSON redaction policy (extraKeys + bounded patterns)\")\n    .option(\n      \"--fail-on-residual\",\n      \"exit non-zero when residual safety is UNSAFE or UNKNOWN (opt-in)\",\n    )\n    .action((target: string, opts: RedactCommandOptions) => {\n      runCommand(() => redactCommand(target, opts));\n    });\n\n  program\n    .command(\"explain\")\n    .description(\"Explain a local trace with deterministic facts (no provider calls)\")\n    .argument(\"<trace-path-or-run-id>\", \"trace file, directory, stdin -, or run id\")\n    .option(\"--dir <path>\", \"trace directory for run-id lookup\")\n    .addOption(\n      new Option(\"--format <format>\", \"trace input format\").choices([\n        \"agent-inspect-jsonl\",\n        \"openinference-json\",\n        \"otlp-json\",\n      ]),\n    )\n    .option(\"--run <run-id>\", \"select a run when the trace contains multiple runs\")\n    .option(\"--dry-run\", \"emit only the local facts payload that a provider could receive\")\n    .option(\n      \"--provider <provider>\",\n      \"reserved for explicit provider explain; currently rejected without network calls\",\n    )\n    .option(\"--json\", \"print deterministic JSON explanation result\")\n    .addOption(\n      new Option(\n        \"--redaction-profile <profile>\",\n        \"redaction profile for explanation payload: local, share, strict (default: local)\",\n      ).choices([\"local\", \"share\", \"strict\"]),\n    )\n    .addOption(\n      new Option(\"--profile <profile>\", \"alias for --redaction-profile\").choices([\n        \"local\",\n        \"share\",\n        \"strict\",\n      ]),\n    )\n    .action((target: string, opts: ExplainCommandOptions) => {\n      runCommand(() => explainCommand(target, opts));\n    });\n\n  program\n    .command(\"init\")\n    .description(\"Initialize a minimal local AgentInspect setup (no dependency install)\")\n    .addOption(\n      new Option(\"--framework <framework>\", \"starter framework path\").choices([\n        \"ai-sdk\",\n        \"openai-agents\",\n        \"langchain\",\n        \"langgraph\",\n        \"custom\",\n        \"observe\",\n        \"manual\",\n      ]),\n    )\n    .addOption(new Option(\"--ci <provider>\", \"optional CI snippet\").choices([\"github\"]))\n    .option(\"--dry-run\", \"print planned files without writing\")\n    .option(\"--yes\", \"non-interactive; skip existing files\")\n    .option(\"--json\", \"print deterministic JSON plan/result\")\n    .action((opts: InitCommandOptions) => {\n      runCommand(() => initCommand(opts));\n    });\n\n  program\n    .command(\"doctor\")\n    .description(\"Diagnose local AgentInspect setup (no network, no installs)\")\n    .option(\"--json\", \"print deterministic JSON results\")\n    .option(\"--trace-dir <path>\", \"trace directory to validate (default .agent-inspect)\")\n    .option(\"--check-imports\", \"check local package resolution\", true)\n    .option(\"--no-check-imports\", \"skip import resolution checks\")\n    .addOption(\n      new Option(\"--framework <framework>\", \"check optional adapter packages\").choices([\n        \"ai-sdk\",\n        \"openai-agents\",\n        \"langchain\",\n        \"langgraph\",\n        \"custom\",\n      ]),\n    )\n    .action((opts: DoctorCommandOptions) => {\n      runCommand(() => doctorCommand(opts));\n    });\n\n  const pluginsCmd = program\n    .command(\"plugins\")\n    .description(\"List and validate explicit-install agent-inspect plugins (v6.2+)\");\n\n  pluginsCmd\n    .command(\"list\")\n    .description(\"List installed plugin packages in node_modules\")\n    .action(() => {\n      runCommand(() => pluginsListCommand());\n    });\n\n  pluginsCmd\n    .command(\"doctor\")\n    .description(\"Validate plugin manifests and privacy checklists\")\n    .action(() => {\n      runCommand(() => pluginsDoctorCommand());\n    });\n\n  pluginsCmd\n    .command(\"validate\")\n    .description(\"Validate one plugin package by name or path\")\n    .argument(\"<package>\", \"plugin package name or directory path\")\n    .action((packageRef: string) => {\n      runCommand(() => pluginsValidateCommand(packageRef));\n    });\n\n  const indexCmd = program\n    .command(\"index\")\n    .description(\"Optional local trace directory index (rebuildable metadata cache)\");\n\n  indexCmd\n    .command(\"build\")\n    .description(\"Build or refresh .agent-inspect-index.json\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--json\", \"print JSON result\")\n    .option(\"--max-entries <n>\", \"cap indexed entries (default 10000)\")\n    .action((opts: IndexCommandOptions) => {\n      runCommand(() => indexBuildCommand(opts));\n    });\n\n  indexCmd\n    .command(\"status\")\n    .description(\"Show index freshness and entry count\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--json\", \"print JSON result\")\n    .action((opts: IndexCommandOptions) => {\n      runCommand(() => indexStatusCommand(opts));\n    });\n\n  indexCmd\n    .command(\"clean\")\n    .description(\"Remove the local index file\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--json\", \"print JSON result\")\n    .action((opts: IndexCommandOptions) => {\n      runCommand(() => indexCleanCommand(opts));\n    });\n\n  const sqliteCmd = indexCmd\n    .command(\"sqlite\")\n    .description(\n      \"Optional SQLite-backed trace index (requires @agent-inspect/index-sqlite)\",\n    );\n\n  sqliteCmd\n    .command(\"build\")\n    .description(\"Build or rebuild the local SQLite index\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--max-runs <n>\", \"cap indexed trace files (default 10000)\")\n    .option(\"--json\", \"print JSON result\")\n    .action((opts: IndexSqliteCommandOptions) => {\n      runCommand(() => indexSqliteBuildCommand(opts));\n    });\n\n  sqliteCmd\n    .command(\"rebuild\")\n    .description(\"Alias for build (full, idempotent rebuild)\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--max-runs <n>\", \"cap indexed trace files (default 10000)\")\n    .option(\"--json\", \"print JSON result\")\n    .action((opts: IndexSqliteCommandOptions) => {\n      runCommand(() => indexSqliteBuildCommand(opts));\n    });\n\n  sqliteCmd\n    .command(\"status\")\n    .description(\"Show SQLite index health, counts, and staleness\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--json\", \"print JSON result\")\n    .action((opts: IndexSqliteCommandOptions) => {\n      runCommand(() => indexSqliteStatusCommand(opts));\n    });\n\n  sqliteCmd\n    .command(\"query\")\n    .description(\"Query indexed runs (fast; falls back with a hint if absent)\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .addOption(\n      new Option(\"--status <status>\", \"filter by run status\").choices([\n        \"success\",\n        \"error\",\n        \"running\",\n        \"unknown\",\n      ]),\n    )\n    .option(\"--session <id>\", \"filter by session id\")\n    .option(\"--name <query>\", \"substring match on run name\")\n    .option(\"--kind <kind>\", \"match runs containing a step of this kind\")\n    .option(\"--tool <query>\", \"match runs containing a tool step (substring)\")\n    .option(\"--limit <n>\", \"max results (default 100)\")\n    .option(\"--json\", \"print JSON result\")\n    .action((opts: IndexSqliteCommandOptions) => {\n      runCommand(() => indexSqliteQueryCommand(opts));\n    });\n\n  sqliteCmd\n    .command(\"clean\")\n    .description(\"Remove the SQLite index (traces are never touched)\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--json\", \"print JSON result\")\n    .action((opts: IndexSqliteCommandOptions) => {\n      runCommand(() => indexSqliteCleanCommand(opts));\n    });\n\n  const workspaceCmd = program\n    .command(\"workspace\")\n    .description(\"Manage a project-local AgentInspect workspace (.agent-inspect)\");\n\n  workspaceCmd\n    .command(\"init\")\n    .description(\"Create or adopt a local workspace (never deletes traces)\")\n    .option(\"--project <name>\", \"project name (default: directory name)\")\n    .addOption(\n      new Option(\"--redaction-profile <profile>\", \"default redaction posture\").choices([\n        \"local\",\n        \"share\",\n        \"strict\",\n      ]),\n    )\n    .option(\"--dry-run\", \"print planned changes without writing\")\n    .option(\"--json\", \"print deterministic JSON result\")\n    .action((opts: WorkspaceInitOptions) => {\n      runCommand(() => workspaceInitCommand(opts));\n    });\n\n  workspaceCmd\n    .command(\"status\")\n    .description(\"Show workspace counts and index status (read-only)\")\n    .option(\"--json\", \"print deterministic JSON result\")\n    .action((opts: WorkspaceCommandOptions) => {\n      runCommand(() => workspaceStatusCommand(opts));\n    });\n\n  workspaceCmd\n    .command(\"doctor\")\n    .description(\"Validate workspace config, permissions, and index freshness\")\n    .option(\"--json\", \"print deterministic JSON result\")\n    .action((opts: WorkspaceCommandOptions) => {\n      runCommand(() => workspaceDoctorCommand(opts));\n    });\n\n  workspaceCmd\n    .command(\"clean\")\n    .description(\"Remove generated content (reports/artifacts/bundles/index); traces are never deleted\")\n    .option(\"--yes\", \"actually delete (default is a dry-run)\")\n    .option(\"--json\", \"print deterministic JSON result\")\n    .action((opts: WorkspaceCleanOptions) => {\n      runCommand(() => workspaceCleanCommand(opts));\n    });\n\n  workspaceCmd\n    .command(\"path\")\n    .description(\"Print resolved workspace paths\")\n    .option(\"--json\", \"print deterministic JSON result\")\n    .action((opts: WorkspaceCommandOptions) => {\n      runCommand(() => workspacePathCommand(opts));\n    });\n\n  const suiteCmd = program\n    .command(\"suite\")\n    .description(\"Define and run local trace suites for CI (v5.0+)\");\n\n  suiteCmd\n    .command(\"init\")\n    .description(\"Create a starter agent-inspect.suite.json\")\n    .option(\"--template <name>\", \"PM/QA template id (v5.4+)\")\n    .option(\"--dry-run\", \"show planned files without writing\")\n    .option(\"--json\", \"print deterministic JSON result\")\n    .action((opts: SuiteCommandOptions) => {\n      runCommand(() => suiteInitCommand(opts));\n    });\n\n  suiteCmd\n    .command(\"validate\")\n    .description(\"Validate suite config shape and trace paths\")\n    .option(\"--config <path>\", \"suite config path\")\n    .option(\"--json\", \"print deterministic JSON result\")\n    .action((opts: SuiteCommandOptions) => {\n      runCommand(() => suiteValidateCommand(opts));\n    });\n\n  suiteCmd\n    .command(\"list\")\n    .description(\"List suite cases from config\")\n    .option(\"--config <path>\", \"suite config path\")\n    .option(\"--json\", \"print deterministic JSON result\")\n    .action((opts: SuiteCommandOptions) => {\n      runCommand(() => suiteListCommand(opts));\n    });\n\n  suiteCmd\n    .command(\"run\")\n    .description(\"Run suite checks against configured traces\")\n    .option(\"--config <path>\", \"suite config path\")\n    .option(\"-o, --output <dir>\", \"artifact output directory\")\n    .option(\"--json\", \"print deterministic JSON result\")\n    .option(\"--markdown\", \"print Markdown summary\")\n    .action((opts: SuiteCommandOptions) => {\n      runCommand(() => suiteRunCommand(opts));\n    });\n\n  suiteCmd\n    .command(\"report\")\n    .description(\"Render a report from a prior suite run artifact\")\n    .option(\"--input <path>\", \"suite run JSON artifact\")\n    .option(\"--format <format>\", \"markdown or json\", \"markdown\")\n    .option(\"--json\", \"print JSON wrapper\")\n    .action((opts: SuiteReportCommandOptions) => {\n      runCommand(() => suiteReportCommand(opts));\n    });\n\n  program\n    .command(\"cohort\")\n    .description(\"Compare baseline/candidate trace cohorts for regressions (v5.1+)\")\n    .option(\"--dir <path>\", \"trace directory\")\n    .option(\"--baseline <label>\", \"baseline cohort label (metadata key)\")\n    .option(\"--candidate <label>\", \"candidate cohort label (metadata key)\")\n    .option(\"--cohort-key <key>\", \"metadata key for cohort labels\", \"cohort\")\n    .option(\"--group-by <spec>\", \"model | session | group | metadata.<key>\", \"model\")\n    .option(\n      \"--metric <list>\",\n      \"comma-separated metrics (errorRate,duration,toolChoice,...)\",\n    )\n    .option(\"--format <format>\", \"markdown, json, or html\", \"markdown\")\n    .option(\"-o, --output <dir>\", \"write cohort-results.json, cohort-summary.md, cohort-report.html\")\n    .option(\"--json\", \"print deterministic JSON result\")\n    .action((opts: CohortCommandOptions) => {\n      runCommand(() => cohortCommand(opts));\n    });\n\n  const mcpCmd = program\n    .command(\"mcp\")\n    .description(\"Configure local coding-agent MCP clients (read-only; dry-run by default)\");\n\n  mcpCmd\n    .command(\"configure\")\n    .description(\"Print or write MCP client config for Cursor/Claude/Codex/Gemini\")\n    .requiredOption(\n      \"--client <name>\",\n      \"cursor | claude-code | codex | gemini\",\n    )\n    .option(\"--dir <path>\", \"trace directory for the MCP server\", \".agent-inspect\")\n    .option(\"--project-local\", \"target a project-local config path\")\n    .option(\"--write\", \"write config (requires --project-local --yes)\")\n    .option(\"--yes\", \"confirm write\")\n    .option(\"--json\", \"print deterministic JSON result\")\n    .action((opts: McpConfigureOptions & { client: string }) => {\n      runCommand(async () => {\n        if (!isMcpConfigureClient(opts.client)) {\n          throw new Error(\n            `Unsupported --client \"${opts.client}\". Use: cursor, claude-code, codex, gemini`,\n          );\n        }\n        await mcpConfigureCommand({ ...opts, client: opts.client });\n      });\n    });\n\n  program\n    .command(\"gate\")\n    .description(\"Run deterministic CI quality gates over traces or suites (v5.2+)\")\n    .option(\"--dir <path>\", \"trace directory for threshold checks\")\n    .option(\"--suite <path>\", \"suite config path\")\n    .option(\"--max-error-rate <percent>\", \"maximum allowed error rate percentage\")\n    .option(\"--max-p95-duration <ms>\", \"maximum allowed p95 run duration in ms\")\n    .option(\"--forbid-tool <name>\", \"forbidden tool name (repeatable or comma-separated)\")\n    .option(\n      \"--require-observation <name>\",\n      \"required passed observation (repeatable or comma-separated)\",\n    )\n    .option(\"--format <format>\", \"markdown, json, html, junit, or github\", \"markdown\")\n    .option(\n      \"-o, --output <dir>\",\n      \"write gate-results.json, gate-summary.md, gate-report.html, junit.xml, github-step-summary.md\",\n    )\n    .option(\"--json\", \"print deterministic JSON result\")\n    .addOption(\n      new Option(\n        \"--evidence-on <mode>\",\n        \"write local Evidence v2 (fail=on failure, always, never; no upload)\",\n      ).choices([\"fail\", \"always\", \"never\"]),\n    )\n    .option(\"--evidence-dir <path>\", \"local Evidence output directory or base path\")\n    .addOption(\n      new Option(\n        \"--evidence-profile <profile>\",\n        \"Evidence redaction profile (default share)\",\n      ).choices([\"local\", \"share\", \"strict\"]),\n    )\n    .addOption(\n      new Option(\n        \"--evidence-format <format>\",\n        \"Evidence output format (default directory)\",\n      ).choices([\"directory\", \"html\", \"zip\"]),\n    )\n    .action((opts: GateCommandOptions) => {\n      runCommand(() => gateCommand(opts));\n    });\n\n  return program;\n}\n\nfunction isPrimaryModule(): boolean {\n  const entry = process.argv[1];\n  if (!entry) return false;\n  const selfPath = fileURLToPath(import.meta.url);\n  try {\n    return (\n      realpathSync(path.resolve(entry)) === realpathSync(path.resolve(selfPath))\n    );\n  } catch {\n    return path.resolve(entry) === path.resolve(selfPath);\n  }\n}\n\nif (isPrimaryModule()) {\n  createCliProgram().parse(process.argv);\n}\n"]}