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