agent-inspect 5.2.0 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/docs/CLI.md +23 -0
- package/package.json +1 -1
- package/packages/cli/dist/{chunk-SJ5R2XBE.mjs → chunk-4LKKB4Z5.mjs} +2 -2
- package/packages/cli/dist/{chunk-SJ5R2XBE.mjs.map → chunk-4LKKB4Z5.mjs.map} +1 -1
- package/packages/cli/dist/index.cjs +2362 -2163
- package/packages/cli/dist/index.cjs.map +1 -1
- package/packages/cli/dist/index.mjs +2299 -2107
- package/packages/cli/dist/index.mjs.map +1 -1
- package/packages/cli/dist/{src-PK22BBMH.mjs → src-4SGS3Q2D.mjs} +3 -3
- package/packages/cli/dist/{src-PK22BBMH.mjs.map → src-4SGS3Q2D.mjs.map} +1 -1
- package/packages/core/dist/advanced.cjs +2 -0
- package/packages/core/dist/advanced.d.cts +8 -4
- package/packages/core/dist/advanced.d.ts +8 -4
- package/packages/core/dist/advanced.mjs +1 -0
- package/packages/core/dist/advanced.mjs.map +1 -1
- package/packages/core/dist/checks.d.cts +1 -1
- package/packages/core/dist/checks.d.ts +1 -1
- package/packages/core/dist/{context-Cp8NRbBX.d.ts → context-BJ5UQLDi.d.ts} +1 -1
- package/packages/core/dist/{context-BbfkMYjz.d.cts → context-DyKbkmd4.d.cts} +1 -1
- package/packages/core/dist/index.d.cts +2 -2
- package/packages/core/dist/index.d.ts +2 -2
- package/packages/core/dist/{types-CvsKGweN.d.cts → types-J3Xtuf9x.d.cts} +13 -1
- package/packages/core/dist/{types-CvsKGweN.d.ts → types-J3Xtuf9x.d.ts} +13 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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/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/export.ts","../../core/src/diff/comparable.ts","../../core/src/diff/engine.ts","../../core/src/diff/renderer.ts","../../core/src/diff/index.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/index.ts","../src/trace-input.ts","../src/redact.ts","../src/explain.ts","../src/open.ts","../src/migrate.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/server.ts","../src/serve.ts","../../eval/src/index.ts","../src/eval.ts","../src/safety.ts","../src/artifacts.ts","../../core/src/workspace/types.ts","../../core/src/workspace/manifest.ts","../../core/src/workspace/fs.ts","../src/bundle.ts","../../core/src/reporters/index.ts","../src/ci-summary.ts","../src/init.ts","../src/doctor.ts","../../adapter-sdk/src/indexer.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","redact","isRecord","readFile","safeString","parseRunIdKeys","summarizeWarnings","formatWarningLine","hexFrom","crypto","tail","title","result","path","mapStepStatus","rm","parseLimit","isModuleNotFound","parseRedactionProfile","mkdir","writeFile","DEFAULT_REDACT_KEYS","Redactor","isMissingFileError","stats","stat","readStdin","selectRun","printMultipleRuns","writeJson","printSummary","open","toolArgs","ALL_RULES","runRule","checks","stable","diagnostic","read","errorResult","fail","CONFIG_EXTENSIONS","TS_CONFIG_EXTENSIONS","parseNumber","asStringArray","asConfig","loadConfig","pathToFileURL","normalizeConfig","buildRules","exitCodeFor","printJson","printHuman","readErrorResult","maxStringLength","escapeHtml","access","constants","indexPath","NOTE","REDACTION_PROFILES","summarize","renderMarkdown","appendFile","process","require","payload","newestTraceMtimeMs","readdir","parseDuration","writeArtifacts"],"mappings":"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","file":"index.mjs","sourcesContent":["{\n \"name\": \"agent-inspect\",\n \"version\": \"5.2.0\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"description\": \"Trace, check, and safely share TypeScript AI-agent runs locally — no account, no upload, metadata-only by default\",\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/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/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/readme-product-loop.svg\"\n ],\n \"sideEffects\": false,\n \"keywords\": [\n \"ai\",\n \"agents\",\n \"debugging\",\n \"typescript\",\n \"llm\",\n \"devtools\",\n \"jsonl\",\n \"cli\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"engines\": {\n \"node\": \">=20\"\n },\n \"dependencies\": {\n \"chalk\": \"^5.3.0\",\n \"nanoid\": \"^5.0.9\",\n \"commander\": \"^12.1.0\"\n },\n \"scripts\": {\n \"clean\": \"pnpm -r exec -- rm -rf dist\",\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\",\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 test && pnpm run build && pnpm run size\",\n \"prepublish:checks\": \"pnpm run typecheck && pnpm run test && pnpm run test:coverage && pnpm run build && pnpm run fixtures:check && pnpm run recipes:check && pnpm run size && pnpm run pack:smoke\",\n \"prepublishOnly\": \"pnpm run prepublish:checks\",\n \"prepack\": \"pnpm run clean && pnpm run build\",\n \"pack:dry-run\": \"pnpm run build && npm pack --dry-run\",\n \"pack:smoke\": \"pnpm run build && node scripts/package-smoke.mjs\",\n \"compat:smoke\": \"node scripts/compat-smoke.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 \"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 },\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\": \"^2.1.8\",\n \"size-limit\": \"^11.1.6\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.7.2\",\n \"vitest\": \"^2.1.8\"\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\nfunction parseKeep(raw?: string): number {\n const trimmed = typeof raw === \"string\" ? raw.trim() : \"\";\n if (trimmed === \"\") {\n throw new Error(`Invalid --keep value: ${raw}. Provide a positive integer.`);\n }\n const n = Number.parseInt(trimmed, 10);\n if (!Number.isFinite(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 { persistedInspectEventsToTraceEvents } 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\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 * 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 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 const events = persistedInspectEventsToTraceEvents(result.events);\n return {\n events,\n format: events.length > 0 ? mapReaderFormat(result.format) : \"empty\",\n };\n } catch (error) {\n if (isMissingFileError(error)) return undefined;\n throw error;\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/**\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 console.log(JSON.stringify(errEvents, null, 2));\n } else if (errEvents.length === 0) {\n console.log(\"No errors found in trace\");\n } else {\n console.log(\"Error events\");\n console.log(JSON.stringify(errEvents, null, 2));\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\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 (eventName.endsWith(\".error\") || eventName.endsWith(\".failed\") || eventName.includes(\".error\") || eventName.includes(\".failed\")) {\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 (eventName.includes(\".failed\") || eventName.includes(\".error\")) {\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\";\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\nasync 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 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 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 + buf.toString(\"utf-8\", 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","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport { Redactor } from \"../logs/redactor.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 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(value, key, maxMetadataValueLength, maxPreviewLength, seen, depth);\n }\n return out;\n}\n\nfunction boundValue(\n value: unknown,\n key: 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 return truncateStringForProfile(\n value,\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 maxMetadataValueLength,\n maxPreviewLength,\n seen,\n depth + 1,\n ),\n );\n }\n\n return boundAttributeValues(\n value as Record<string, unknown>,\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 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 start_time_unix_nano: number;\n end_time_unix_nano?: number;\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\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 = Math.round(ev.timestamp * 1e6);\n let endNs: number | undefined;\n if (ev.durationMs !== undefined && Number.isFinite(ev.durationMs)) {\n endNs = startNs + Math.round(ev.durationMs * 1e6);\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,\n end_time_unix_nano: endNs,\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\nfunction hexFrom(seed: string, byteLen: number): string {\n return crypto.createHash(\"sha256\").update(seed, \"utf8\").digest(\"hex\").slice(0, byteLen * 2);\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(value) } };\n}\n\ntype OtlpAttr =\n | ReturnType<typeof stringAttr>\n | ReturnType<typeof intAttr>;\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\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 ];\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 = String(Math.round(ev.timestamp * 1e6));\n let endNs: string | undefined;\n if (ev.durationMs !== undefined && Number.isFinite(ev.durationMs)) {\n endNs = String(Math.round(ev.timestamp * 1e6 + ev.durationMs * 1e6));\n }\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\" || typeof v === \"number\" || typeof v === \"boolean\") {\n attrs.push(\n stringAttr(\n `agent_inspect.preview.${k}`,\n typeof v === \"string\" ? v.slice(0, maxLen) : String(v),\n ),\n );\n }\n }\n }\n\n let statusCode = \"STATUS_CODE_UNSET\";\n let statusMessage: string | undefined;\n if (ev.status === \"error\") {\n statusCode = \"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 = \"STATUS_CODE_OK\";\n }\n\n const spanJson: Record<string, unknown> = {\n traceId,\n spanId,\n name: ev.name,\n kind: \"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\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 let parsed: unknown;\n try {\n parsed = JSON.parse(content) as unknown;\n } catch {\n errors.push(\"OTLP JSON export is not valid JSON\");\n return { ok: false, format, errors, warnings };\n }\n if (!parsed || typeof parsed !== \"object\") {\n errors.push(\"OTLP JSON export must be an object\");\n return { ok: false, format, errors, warnings };\n }\n const o = parsed as Record<string, unknown>;\n if (!Array.isArray(o.resourceSpans)) {\n errors.push(\"OTLP JSON export must include resourceSpans array\");\n }\n warnings.push(\n \"OTLP JSON mapping uses OTel GenAI-aligned attributes where applicable; collectors may require transformation.\",\n );\n return { ok: errors.length === 0, format, errors, warnings };\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 { 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","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 manualTraceEventsToRunTree,\n validateExport,\n type ExportFormat,\n type ExportOptions,\n} from \"@agent-inspect/core/exporters\";\n\nimport { readRunTraceEvents } from \"./read-run.js\";\n\nexport interface ExportCommandOptions {\n dir?: string;\n format?: string;\n output?: string;\n json?: boolean;\n validate?: boolean;\n includeAttributes?: boolean;\n noMetadata?: boolean;\n noErrors?: boolean;\n redactionProfile?: 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(options.redactionProfile);\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] 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 tree = manualTraceEventsToRunTree(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 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 outPath =\n options.output !== undefined && options.output.trim() !== \"\"\n ? path.resolve(options.output.trim())\n : 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 console.log(`Wrote ${result.fileExtension} export to ${outPath} (validation: ${vlabel})`);\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.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 {\n RunCompletedEvent,\n RunStartedEvent,\n StepCompletedEvent,\n StepStartedEvent,\n StepType,\n TraceEvent,\n} from \"../types.js\";\n\nimport type { RunComparable, StepComparable } from \"./types.js\";\n\ntype StepAcc = {\n id: string;\n parentId?: string;\n name: string;\n type: StepType;\n order: number;\n timestamp: number;\n metadata?: Record<string, unknown>;\n status?: \"success\" | \"error\";\n durationMs?: number;\n errorMsg?: string;\n};\n\nfunction extractOutputPreview(meta: Record<string, unknown> | undefined): unknown {\n if (meta === undefined) return undefined;\n if (\"outputPreview\" in meta) return meta.outputPreview;\n if (\"resultPreview\" in meta) return meta.resultPreview;\n return undefined;\n}\n\nfunction mapStepStatus(s: \"success\" | \"error\" | undefined): string {\n if (s === undefined) return \"running\";\n return s;\n}\n\n/**\n * Normalize v0.1 manual JSONL events into a comparable run tree.\n * Does not mutate input events.\n */\nexport function manualTraceEventsToComparableRun(events: TraceEvent[]): RunComparable {\n const started = events.find((e) => e.event === \"run_started\");\n if (!started || started.event !== \"run_started\") {\n throw new Error(\"Invalid trace: missing run_started\");\n }\n\n const rs = started as RunStartedEvent;\n const runId = rs.runId;\n\n const completedAll = events.filter((e) => e.event === \"run_completed\");\n const lastCompleted = completedAll[completedAll.length - 1] as RunCompletedEvent | undefined;\n\n let runStatus: string | undefined;\n if (lastCompleted === undefined) runStatus = \"running\";\n else runStatus = lastCompleted.status;\n\n const durationMs =\n lastCompleted !== undefined && Number.isFinite(lastCompleted.durationMs)\n ? lastCompleted.durationMs\n : undefined;\n\n const steps = new Map<string, StepAcc>();\n let order = 0;\n\n for (const e of events) {\n if (e.event !== \"step_started\") continue;\n const s = e as StepStartedEvent;\n const meta = s.metadata ? { ...(s.metadata as Record<string, unknown>) } : undefined;\n steps.set(s.stepId, {\n id: s.stepId,\n parentId: s.parentId,\n name: s.name,\n type: s.type,\n order: order++,\n timestamp: s.timestamp,\n metadata: meta,\n });\n }\n\n for (const e of events) {\n if (e.event !== \"step_completed\") continue;\n const acc = steps.get(e.stepId);\n if (!acc) continue;\n acc.status = e.status;\n acc.durationMs = e.durationMs;\n if (e.error?.message) acc.errorMsg = e.error.message;\n const extra = e as StepCompletedEvent & { metadata?: Record<string, unknown> };\n if (extra.metadata !== undefined && typeof extra.metadata === \"object\") {\n acc.metadata = { ...(acc.metadata ?? {}), ...extra.metadata };\n }\n }\n\n const nodes = new Map<string, StepComparable>();\n\n for (const acc of steps.values()) {\n let meta = acc.metadata ? { ...acc.metadata } : undefined;\n if (acc.parentId !== undefined && !steps.has(acc.parentId)) {\n meta = { ...(meta ?? {}), agent_inspect_diff_parent_missing: true };\n }\n\n const outputPreview = extractOutputPreview(meta);\n\n const sc: StepComparable = {\n id: acc.id,\n name: acc.name,\n type: acc.type,\n status: mapStepStatus(acc.status),\n durationMs: acc.durationMs,\n error: acc.errorMsg,\n metadata: meta && Object.keys(meta).length > 0 ? meta : undefined,\n outputPreview,\n children: [],\n };\n nodes.set(acc.id, sc);\n }\n\n const roots: StepComparable[] = [];\n const sortByOrder = (a: StepComparable, b: StepComparable) => {\n const oa = steps.get(a.id)?.order ?? 0;\n const ob = steps.get(b.id)?.order ?? 0;\n return oa - ob;\n };\n\n for (const acc of steps.values()) {\n const node = nodes.get(acc.id)!;\n if (acc.parentId !== undefined && nodes.has(acc.parentId)) {\n nodes.get(acc.parentId)!.children.push(node);\n } else {\n roots.push(node);\n }\n }\n\n roots.sort(sortByOrder);\n for (const n of nodes.values()) {\n n.children.sort(sortByOrder);\n }\n\n return {\n runId,\n name: rs.name,\n status: runStatus,\n durationMs,\n steps: roots,\n };\n}\n","import { stableJson } from \"../exporters/helpers.js\";\n\nimport type {\n DiffKind,\n DiffOptions,\n DiffPath,\n DiffPathSegment,\n RunComparable,\n RunDiffItem,\n RunDiffResult,\n RunDiffSummary,\n StepComparable,\n} from \"./types.js\";\n\nconst DEFAULT_THRESHOLD_MS = 0;\n\nfunction pathSeg(step: StepComparable, index: number): DiffPathSegment {\n return { index, name: step.name, stepId: step.id };\n}\n\nfunction buildPath(segments: DiffPathSegment[]): DiffPath {\n return { path: [...segments] };\n}\n\n/** Pair steps: match by id, then same index, then name+type. */\nexport function pairSteps(\n left: StepComparable[],\n right: StepComparable[],\n): Array<[StepComparable | undefined, StepComparable | undefined]> {\n const usedRight = new Set<string>();\n const pairs: Array<[StepComparable | undefined, StepComparable | undefined]> = [];\n\n for (let i = 0; i < left.length; i++) {\n const L = left[i]!;\n let R = right.find((r) => !usedRight.has(r.id) && r.id === L.id);\n if (R === undefined && i < right.length && !usedRight.has(right[i]!.id)) {\n const cand = right[i]!;\n if (cand.name === L.name && (cand.type ?? \"\") === (L.type ?? \"\")) {\n R = cand;\n }\n }\n if (R === undefined) {\n R = right.find(\n (r) =>\n !usedRight.has(r.id) &&\n r.name === L.name &&\n (r.type ?? \"\") === (L.type ?? \"\"),\n );\n }\n if (R !== undefined) {\n usedRight.add(R.id);\n pairs.push([L, R]);\n } else {\n pairs.push([L, undefined]);\n }\n }\n\n for (const R of right) {\n if (!usedRight.has(R.id)) {\n pairs.push([undefined, R]);\n }\n }\n\n return pairs;\n}\n\nfunction compareLeafSteps(\n L: StepComparable,\n R: StepComparable,\n segments: DiffPathSegment[],\n opts: Required<Pick<DiffOptions, \"ignoreDuration\" | \"durationThresholdMs\">>,\n out: RunDiffItem[],\n): void {\n const path = buildPath(segments);\n\n if (L.name !== R.name) {\n out.push({\n kind: \"structure\",\n severity: \"warning\",\n message: \"Step name differs\",\n path,\n left: L.name,\n right: R.name,\n });\n }\n\n if ((L.type ?? \"\") !== (R.type ?? \"\")) {\n out.push({\n kind: \"step-type\",\n severity: \"warning\",\n message: \"Step type differs\",\n path,\n left: L.type,\n right: R.type,\n });\n }\n\n if ((L.status ?? \"\") !== (R.status ?? \"\")) {\n out.push({\n kind: \"step-status\",\n severity: \"warning\",\n message: \"Step status differs\",\n path,\n left: L.status,\n right: R.status,\n });\n }\n\n const le = L.error ?? \"\";\n const re = R.error ?? \"\";\n if (le !== re) {\n out.push({\n kind: \"error\",\n severity: \"error\",\n message: \"Step error message differs\",\n path,\n left: le || undefined,\n right: re || undefined,\n });\n }\n\n if (!opts.ignoreDuration) {\n const ld = L.durationMs;\n const rd = R.durationMs;\n const th = opts.durationThresholdMs;\n let differs = false;\n if (ld === undefined && rd === undefined) differs = false;\n else if (ld === undefined || rd === undefined) differs = true;\n else differs = Math.abs(ld - rd) > th;\n if (differs) {\n out.push({\n kind: \"duration\",\n severity: \"info\",\n message: \"Step duration differs\",\n path,\n left: ld,\n right: rd,\n });\n }\n }\n\n const lm = stableJson(L.metadata ?? {});\n const rm = stableJson(R.metadata ?? {});\n if (lm !== rm) {\n out.push({\n kind: \"metadata\",\n severity: \"info\",\n message: \"Step metadata differs\",\n path,\n left: L.metadata,\n right: R.metadata,\n });\n }\n\n const lo = stableJson(L.outputPreview ?? null);\n const ro = stableJson(R.outputPreview ?? null);\n if (lo !== ro) {\n out.push({\n kind: \"output\",\n severity: \"info\",\n message: \"Output preview differs\",\n path,\n left: L.outputPreview,\n right: R.outputPreview,\n });\n }\n}\n\nfunction compareRecursive(\n L: StepComparable,\n R: StepComparable,\n segments: DiffPathSegment[],\n opts: Required<Pick<DiffOptions, \"ignoreDuration\" | \"durationThresholdMs\">>,\n out: RunDiffItem[],\n): void {\n compareLeafSteps(L, R, segments, opts, out);\n\n const pairs = pairSteps(L.children, R.children);\n let ci = 0;\n for (const [lch, rch] of pairs) {\n if (lch !== undefined && rch !== undefined) {\n compareRecursive(lch, rch, [...segments, pathSeg(lch, ci)], opts, out);\n } else if (lch !== undefined) {\n out.push({\n kind: \"step-removed\",\n severity: \"warning\",\n message: `Step only in left run: ${lch.name}`,\n path: buildPath([...segments, pathSeg(lch, ci)]),\n left: lch.id,\n right: undefined,\n });\n } else if (rch !== undefined) {\n out.push({\n kind: \"step-added\",\n severity: \"warning\",\n message: `Step only in right run: ${rch.name}`,\n path: buildPath([...segments, pathSeg(rch, ci)]),\n left: undefined,\n right: rch.id,\n });\n }\n ci += 1;\n }\n}\n\nfunction mergeDiffDefaults(options?: DiffOptions): Required<\n Pick<DiffOptions, \"ignoreDuration\" | \"durationThresholdMs\" | \"focus\" | \"check\">\n> {\n return {\n ignoreDuration: options?.ignoreDuration ?? false,\n durationThresholdMs:\n options?.durationThresholdMs !== undefined\n ? options.durationThresholdMs\n : DEFAULT_THRESHOLD_MS,\n focus: options?.focus ?? \"all\",\n check: options?.check ?? \"all\",\n };\n}\n\nfunction kindMatchesFilter(kind: DiffKind, merged: ReturnType<typeof mergeDiffDefaults>): boolean {\n const { focus, check } = merged;\n\n if (check !== \"all\") {\n if (check === \"structure\") {\n if (![\"step-added\", \"step-removed\", \"structure\", \"step-type\"].includes(kind)) return false;\n } else if (check === \"outputs\") {\n if (![\"metadata\", \"output\"].includes(kind)) return false;\n } else if (check === \"errors\") {\n if (![\"run-status\", \"step-status\", \"error\"].includes(kind)) return false;\n } else if (check === \"timing\") {\n if (kind !== \"duration\") return false;\n }\n }\n\n if (focus !== \"all\") {\n if (focus === \"errors\") {\n if (![\"run-status\", \"step-status\", \"error\"].includes(kind)) return false;\n } else if (focus === \"structure\") {\n if (![\"step-added\", \"step-removed\", \"structure\", \"step-type\"].includes(kind)) return false;\n } else if (focus === \"outputs\") {\n if (![\"metadata\", \"output\"].includes(kind)) return false;\n }\n }\n\n return true;\n}\n\nexport function diffRuns(\n left: RunComparable,\n right: RunComparable,\n options?: DiffOptions,\n): RunDiffResult {\n const merged = mergeDiffDefaults(options);\n const opts = {\n ignoreDuration: merged.ignoreDuration,\n durationThresholdMs: merged.durationThresholdMs,\n };\n\n const raw: RunDiffItem[] = [];\n\n if ((left.status ?? \"\") !== (right.status ?? \"\")) {\n raw.push({\n kind: \"run-status\",\n severity: \"warning\",\n message: \"Run completion status differs\",\n left: left.status,\n right: right.status,\n });\n }\n\n if (!merged.ignoreDuration) {\n const ld = left.durationMs;\n const rd = right.durationMs;\n const th = merged.durationThresholdMs;\n let differs = false;\n if (ld === undefined && rd === undefined) differs = false;\n else if (ld === undefined || rd === undefined) differs = true;\n else differs = Math.abs(ld - rd) > th;\n if (differs) {\n raw.push({\n kind: \"duration\",\n severity: \"info\",\n message: \"Run duration differs\",\n left: ld,\n right: rd,\n });\n }\n }\n\n const pairs = pairSteps(left.steps, right.steps);\n let idx = 0;\n for (const [ls, rs] of pairs) {\n if (ls !== undefined && rs !== undefined) {\n compareRecursive(ls, rs, [pathSeg(ls, idx)], opts, raw);\n idx += 1;\n } else if (ls !== undefined) {\n raw.push({\n kind: \"step-removed\",\n severity: \"warning\",\n message: `Step only in left run: ${ls.name}`,\n path: buildPath([pathSeg(ls, idx)]),\n left: ls.id,\n right: undefined,\n });\n idx += 1;\n } else if (rs !== undefined) {\n raw.push({\n kind: \"step-added\",\n severity: \"warning\",\n message: `Step only in right run: ${rs.name}`,\n path: buildPath([pathSeg(rs, idx)]),\n left: undefined,\n right: rs.id,\n });\n idx += 1;\n }\n }\n\n const differences = raw.filter((d) => kindMatchesFilter(d.kind, merged));\n\n let errors = 0;\n let warnings = 0;\n let info = 0;\n for (const d of differences) {\n if (d.severity === \"error\") errors += 1;\n else if (d.severity === \"warning\") warnings += 1;\n else info += 1;\n }\n\n const firstVisible = differences[0];\n const firstDivergence: RunDiffItem | undefined =\n firstVisible !== undefined\n ? {\n kind: \"first-divergence\",\n severity: firstVisible.severity,\n message: `First divergence: ${firstVisible.message}`,\n path: firstVisible.path,\n left: firstVisible.left,\n right: firstVisible.right,\n }\n : undefined;\n\n const summary: RunDiffSummary = {\n leftRunId: left.runId,\n rightRunId: right.runId,\n totalDifferences: differences.length,\n errors,\n warnings,\n info,\n firstDivergence,\n };\n\n return { summary, differences };\n}\n","import chalk from \"chalk\";\n\nimport type { RenderDiffOptions, RunDiffResult } from \"./types.js\";\n\nfunction formatPath(path?: import(\"./types.js\").DiffPath): string {\n if (path === undefined || path.path.length === 0) {\n return \"(run)\";\n }\n return path.path.map((s) => s.name).join(\" > \");\n}\n\nfunction formatValue(v: unknown, verbose: boolean): string {\n if (v === undefined) return \"(undefined)\";\n if (typeof v === \"string\") return v;\n if (typeof v === \"number\" || typeof v === \"boolean\") return String(v);\n const s = JSON.stringify(v);\n if (verbose || s.length <= 120) return s;\n return `${s.slice(0, 117)}...`;\n}\n\nexport function renderRunDiff(result: RunDiffResult, options?: RenderDiffOptions): string {\n const json = options?.json === true;\n const verbose = options?.verbose === true;\n const color = options?.color === true;\n\n if (json) {\n return JSON.stringify(result, null, 2);\n }\n\n const sev = (s: string, level: \"error\" | \"warning\" | \"info\"): string => {\n if (!color) return s;\n if (level === \"error\") return chalk.red(s);\n if (level === \"warning\") return chalk.yellow(s);\n return chalk.gray(s);\n };\n\n const lines: string[] = [];\n const { summary } = result;\n\n lines.push(\"Run diff\");\n lines.push(`Left: ${summary.leftRunId}`);\n lines.push(`Right: ${summary.rightRunId}`);\n lines.push(\"\");\n lines.push(\"Summary:\");\n lines.push(` Differences: ${summary.totalDifferences}`);\n lines.push(` Errors: ${summary.errors}`);\n lines.push(` Warnings: ${summary.warnings}`);\n lines.push(` Info: ${summary.info}`);\n lines.push(\"\");\n\n const fd = summary.firstDivergence;\n const firstKind = result.differences[0]?.kind;\n if (fd !== undefined) {\n lines.push(\"First divergence:\");\n const where = formatPath(fd.path);\n const displayKind = firstKind ?? fd.kind;\n lines.push(` ${displayKind} at ${where}`);\n if (fd.left !== undefined || fd.right !== undefined) {\n lines.push(` left: ${formatValue(fd.left, verbose)}`);\n lines.push(` right: ${formatValue(fd.right, verbose)}`);\n }\n lines.push(\"\");\n }\n\n lines.push(\"Differences:\");\n if (result.differences.length === 0) {\n lines.push(\" (none)\");\n return lines.join(\"\\n\");\n }\n\n const showSides = (kind: string): boolean =>\n verbose ||\n [\n \"run-status\",\n \"step-status\",\n \"error\",\n \"duration\",\n \"step-type\",\n \"structure\",\n \"step-added\",\n \"step-removed\",\n ].includes(kind);\n\n for (const d of result.differences) {\n const tag = sev(`[${d.severity}]`, d.severity);\n const pathStr = d.path !== undefined ? ` ${formatPath(d.path)}` : \"\";\n lines.push(` ${tag} ${d.kind}${pathStr}`);\n lines.push(` ${d.message}`);\n if (d.left !== undefined || d.right !== undefined) {\n if (showSides(d.kind)) {\n lines.push(` left: ${formatValue(d.left, verbose)}`);\n lines.push(` right: ${formatValue(d.right, verbose)}`);\n }\n }\n }\n\n return lines.join(\"\\n\");\n}\n","import type { TraceEvent } from \"../types.js\";\n\nimport { manualTraceEventsToComparableRun } from \"./comparable.js\";\nimport { diffRuns } from \"./engine.js\";\nimport type { DiffOptions, RunDiffResult } from \"./types.js\";\n\nexport type {\n DiffSeverity,\n DiffKind,\n DiffPathSegment,\n DiffPath,\n RunDiffItem,\n StepComparable,\n RunComparable,\n RunDiffSummary,\n RunDiffResult,\n DiffOptions,\n RenderDiffOptions,\n} from \"./types.js\";\n\nexport { manualTraceEventsToComparableRun } from \"./comparable.js\";\nexport { diffRuns } from \"./engine.js\";\nexport { renderRunDiff } from \"./renderer.js\";\n\n/**\n * @experimental Compare two v0.1 manual traces as normalized trees (read-only).\n * Subject to refinement before a future stability declaration.\n */\nexport function diffTraceEvents(\n leftEvents: TraceEvent[],\n rightEvents: TraceEvent[],\n options?: DiffOptions,\n): RunDiffResult {\n const left = manualTraceEventsToComparableRun(leftEvents);\n const right = manualTraceEventsToComparableRun(rightEvents);\n return diffRuns(left, right, options);\n}\n","import 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 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 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 ? ` | ${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 { readRunTraceEvents } from \"./read-run.js\";\n\nexport interface ReportCommandOptions {\n dir?: string;\n format?: string;\n output?: string;\n json?: boolean;\n includeAttributes?: boolean;\n noErrors?: boolean;\n noCorrelation?: boolean;\n redactionProfile?: 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(options.redactionProfile);\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 outPath =\n options.output !== undefined && options.output.trim() !== \"\"\n ? path.resolve(options.output.trim())\n : undefined;\n\n if (outPath !== undefined) {\n await mkdir(path.dirname(outPath), { recursive: true });\n await writeFile(outPath, result.content, \"utf-8\");\n console.log(`Wrote ${result.fileExtension} report to ${outPath}`);\n }\n\n if (options.json === true) {\n const payload: Record<string, unknown> = {\n format: result.format,\n contentType: result.contentType,\n fileExtension: result.fileExtension,\n };\n if (outPath === undefined) {\n payload.content = result.content;\n } else {\n payload.output = outPath;\n }\n console.log(JSON.stringify(payload, null, 2));\n } else if (outPath === undefined) {\n console.log(result.content);\n }\n}\n","import crypto from \"node:crypto\";\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] 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\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\nfunction toKey(key: string): string {\n return key.toLowerCase();\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 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.creditCard\",\n severity: \"error\",\n matchKind: \"value\",\n detect(input) {\n if (typeof input.value !== \"string\") return [];\n const candidatePattern = /(?:\\d[ -]?){13,19}/g;\n for (const match of input.value.matchAll(candidatePattern)) {\n const candidate = match[0] ?? \"\";\n if (passesLuhn(candidate)) {\n return [{ action: \"replace\", severity: \"error\", matchKind: \"value\" }];\n }\n }\n return [];\n },\n },\n];\n\nconst identifierDetectors: readonly RedactionDetector[] = [\n patternDetector({\n id: \"value.email\",\n pattern: /\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b/i,\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 } 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 #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.#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 #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 = this.#rules.find((candidate) => candidate.key === toKey(key));\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 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","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, stat, writeFile } from \"node:fs/promises\";\n\nimport {\n getTraceFilePath,\n resolveTraceDir,\n} from \"@agent-inspect/core/advanced\";\nimport {\n redact,\n type RedactionFinding,\n type RedactionProfile,\n} from \"@agent-inspect/redact\";\n\nimport { readStdin } from \"./trace-input.js\";\n\nexport interface RedactCommandOptions {\n dir?: string;\n profile?: string;\n output?: string;\n json?: 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 redactJsonText(content: string, profile: RedactionProfile): RedactedDocument {\n const parsed = JSON.parse(content) as unknown;\n const result = redact(parsed, { profile });\n return {\n content: `${JSON.stringify(result.value, null, 2)}\\n`,\n findings: result.findings,\n };\n}\n\nfunction redactJsonlText(content: string, profile: RedactionProfile): 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 = redact(parsed, { profile });\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(content: string, profile: RedactionProfile): RedactedDocument {\n try {\n return redactJsonText(content, profile);\n } catch {\n return redactJsonlText(content, profile);\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): RedactedDocument {\n return redactDocument(content, profile);\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(options.profile);\n const source = await contentFromTarget(target, options, stdin);\n const redacted = redactDocument(source.content, profile);\n\n if (options.output !== undefined) {\n await writeFile(options.output, redacted.content, \"utf-8\");\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: options.output,\n findings: redacted.findings,\n content: options.output === undefined ? redacted.content : undefined,\n }),\n null,\n 2,\n ),\n );\n return;\n }\n\n if (options.output === 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 { 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}\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(options.redactionProfile);\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 { 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 name = event.name.toLowerCase();\n return (\n event.kind === \"tool\" ||\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 name = event.name.toLowerCase();\n return event.kind === \"llm\" || 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 runCircuits,\n type CircuitResult,\n type CircuitRuleId,\n type CircuitTraceEvent,\n type RunCircuitsOptions,\n} from \"@agent-inspect/circuit\";\nimport {\n runGuardrails,\n type GuardrailResult,\n type GuardrailRuleId,\n type RunGuardrailsOptions,\n} from \"@agent-inspect/guardrails\";\nimport type {\n TraceCheckEvidence,\n TraceCheckFinding,\n TraceCheckResult,\n TraceCheckSeverity,\n} from \"@agent-inspect/core/checks\";\nimport type { TraceReadResult } from \"@agent-inspect/core/readers\";\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\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: TraceReadResult[\"events\"][number]): 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 collectGuardrailInputs(read: TraceReadResult): 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 read.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 if (event.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\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 },\n): TraceCheckResult {\n const findings = [...result.findings];\n let failed = result.summary.failed;\n let warnings = result.summary.warnings;\n let passed = result.summary.passed;\n\n const guardrailRules = parseGuardrailRules(options.guardrails);\n if (guardrailRules) {\n for (const input of collectGuardrailInputs(read)) {\n const run = runGuardrails(input, {\n ...DEFAULT_GUARDRAIL_OPTIONS,\n rules: guardrailRules,\n });\n for (const item of run.results) {\n const finding = guardrailFinding(item);\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 }\n\n const circuitRules = parseCircuitRules(options.circuits);\n if (circuitRules) {\n const circuitRun = runCircuits(\n read.events.map(eventToCircuit),\n { ...DEFAULT_CIRCUIT_OPTIONS, rules: circuitRules },\n );\n for (const item of circuitRun.results) {\n const finding = circuitFinding(item);\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\n const ok = failed === 0 && result.summary.errors === 0;\n return {\n ...result,\n ok,\n status: failed > 0 ? \"fail\" : result.status,\n summary: {\n passed,\n failed,\n warnings,\n errors: result.summary.errors,\n },\n findings,\n };\n}\n","import { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport {\n TraceReadError,\n openTrace,\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 runTraceChecks,\n type LlmUsageRuleOptions,\n type RunStatusRuleOptions,\n type SafetyOversizedAttributeRuleOptions,\n type StructureRelationshipRuleOptions,\n type ToolUsageRuleOptions,\n type TraceCheckDiagnostic,\n type TraceCheckDiagnosticCode,\n type TraceCheckResult,\n type TraceCheckRule,\n} from \"@agent-inspect/core/checks\";\n\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 forbiddenTool?: 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}\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\ntype RuleBuildResult = {\n rules: TraceCheckRule[];\n select: string[];\n diagnostics: TraceCheckDiagnostic[];\n};\n\nconst DEFAULT_SELECT = [\"run.status\"];\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 },\n findings: [],\n diagnostics,\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\nfunction asConfig(value: unknown): CheckConfig {\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 CheckConfig;\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 Error(\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 Error(\"Unsupported check 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: CheckConfig): NonNullable<CheckConfig[\"checks\"]> {\n if (config.checks === undefined) return {};\n if (typeof config.checks !== \"object\" || Array.isArray(config.checks)) {\n throw new Error(\"checks config must be an object.\");\n }\n return config.checks;\n}\n\nfunction buildRules(\n config: CheckConfig,\n options: CheckCommandOptions,\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 }));\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 select = [\n ...(asStringArray(checks.select) ?? []),\n ...(options.rule ?? []),\n ];\n\n return {\n rules,\n select: select.length > 0 ? select : DEFAULT_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_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 printHuman(result: TraceCheckResult): 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 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 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 let result: TraceCheckResult;\n let phase: \"config\" | \"read\" = \"config\";\n\n const sessionId = options.session?.trim();\n const groupId = options.group?.trim();\n const useSessionScope = Boolean(sessionId || groupId);\n\n try {\n const config = await loadConfig(options.config);\n const built = buildRules(config, options);\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 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 perRun.push(\n mergeSafetyExtensions(\n runTraceChecks(\n { read },\n {\n rules: built.rules,\n select: built.select,\n runId: meta.runId,\n },\n ),\n read,\n {\n ...(options.guardrails ? { guardrails: options.guardrails } : {}),\n ...(options.circuit ? { circuits: options.circuit } : {}),\n },\n ),\n );\n }\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 result = mergeSafetyExtensions(\n runTraceChecks(\n { read },\n {\n rules: built.rules,\n select: built.select,\n ...(options.run !== undefined ? { runId: options.run } : {}),\n },\n ),\n read,\n {\n ...(options.guardrails ? { guardrails: options.guardrails } : {}),\n ...(options.circuit ? { circuits: options.circuit } : {}),\n },\n );\n }\n } catch (error) {\n if (phase === \"config\") {\n const message = error instanceof Error ? error.message : String(error);\n const code: TraceCheckDiagnosticCode =\n message.startsWith(\"--\")\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(\n code,\n message,\n );\n } else {\n result = readErrorResult(error);\n }\n }\n\n process.exitCode = exitCodeFor(result);\n if (options.json) printJson(result);\n else printHuman(result);\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: 70vh; }\n a { color: #0b57d0; }\n .muted { color: #666; }\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><a href=\"/api/health\">/api/health</a> · <a href=\"/api/traces\">/api/traces</a> · <a href=\"/api/sessions\">/api/sessions</a></p>\n <pre id=\"out\">Loading traces…</pre>\n <script>\n fetch(\"/api/traces\").then((r) => r.json()).then((data) => {\n document.getElementById(\"out\").textContent = JSON.stringify(data, null, 2);\n }).catch((err) => {\n document.getElementById(\"out\").textContent = String(err);\n });\n </script>\n</body>\n</html>\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 type { ViewerServerInfo, ViewerServerOptions } from \"./types.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\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 traceDir: path.resolve(traceDir),\n });\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 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 resolve({\n host,\n port: resolvedPort,\n traceDir: path.resolve(traceDir),\n url: `http://${host}:${resolvedPort}`,\n });\n });\n });\n}\n","import { startViewerServer } from \"@agent-inspect/viewer\";\n\nexport interface ServeCommandOptions {\n dir?: string;\n host?: string;\n port?: string;\n open?: boolean;\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 info = await startViewerServer({\n ...(options.dir !== undefined ? { traceDir: options.dir } : {}),\n host,\n ...(port !== undefined ? { port } : {}),\n });\n\n console.log(`AgentInspect viewer (read-only): ${info.url}`);\n console.log(`Trace directory: ${info.traceDir}`);\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 openMod = await import(\"node:child_process\");\n openMod.exec(`open ${info.url}`, () => {});\n }\n\n await new Promise<void>(() => {\n // Keep process alive until interrupted.\n });\n}\n","import {\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 return { type: \"file\", path: value instanceof URL ? value.pathname : 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 {\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 { redact, type RedactionFinding } from \"@agent-inspect/redact\";\n\nimport { inputFromTarget } from \"./trace-input.js\";\n\nexport interface SafetyCommandOptions {\n dir?: string;\n format?: string;\n run?: string;\n json?: boolean;\n maxStringLength?: string;\n maxArrayLength?: string;\n maxObjectKeys?: string;\n maxSerializedBytes?: string;\n}\n\ntype SafetyStatus = \"SAFE\" | \"SAFE WITH WARNINGS\" | \"UNSAFE\" | \"UNKNOWN\";\ntype SafetyCommandName = \"scan\" | \"verify-safe\";\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\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}\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}): SafetyResult {\n const findings = [...(parts.findings ?? [])];\n const diagnostics = [...(parts.diagnostics ?? [])];\n const warnings = [...(parts.warnings ?? [])];\n const unsupportedFields = [...(parts.unsupportedFields ?? [])];\n const 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 };\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 redactionDetectorFindings(\n read: Awaited<ReturnType<typeof openTrace>>,\n runId: string | undefined,\n): TraceCheckFinding[] {\n const runs = runId === undefined\n ? read.runs\n : read.runs.filter((run) => run.runId === runId);\n const out: TraceCheckFinding[] = [];\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 = redact(attrs, { profile: \"share\" });\n for (const finding of result.findings) {\n if (finding.action === \"keep\") continue;\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 });\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 printJson(result: SafetyResult): void {\n console.log(JSON.stringify(stable(result), null, 2));\n}\n\nfunction printHuman(result: SafetyResult): 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 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 console.log(`- ${finding.ruleId}: ${finding.message}${path ? ` (${path})` : \"\"}`);\n }\n console.log(`Note: ${result.note}`);\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 rules = buildSafetyRules(options);\n const input = await inputFromTarget(target, options, stdin);\n const read = await openTrace(input, {\n ...(options.format !== undefined ? { format: options.format } : {}),\n });\n const checkResult = runTraceChecks(\n { read },\n {\n rules,\n ...(options.run !== undefined ? { runId: options.run } : {}),\n },\n );\n const detectorFindings =\n checkResult.diagnostics.length === 0\n ? redactionDetectorFindings(read, checkResult.runId)\n : [];\n result = resultFromParts({\n command,\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 const message = error instanceof Error ? error.message : String(error);\n result = message.startsWith(\"--\")\n ? invalidArgumentResult(command, error)\n : readErrorResult(command, error);\n }\n\n process.exitCode = exitCodeFor(result);\n if (options.json) printJson(result);\n else printHuman(result);\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)\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 { appendFile, mkdir, 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 type TraceCheckResult,\n type TraceCheckRule,\n} from \"@agent-inspect/core/checks\";\n\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}\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(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\");\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\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 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: manifestStatus(check, diff),\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","/**\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 { mkdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport {\n buildBundleMetadata,\n buildBundleSummaryMarkdown,\n buildPlaceholderArtifact,\n buildSessionIndex,\n bundleFailsOnSafety,\n defaultBundleOutputPath,\n getTraceFilePath,\n normalizeBundleOutputPath,\n parseDuration,\n resolveBundleRunIds,\n resolveTraceDir,\n aggregateBundleSafeStatus,\n type BundleCheckResults,\n type BundleRedactionProfile,\n type BundleRedactionReport,\n type BundleSafeStatus,\n} from \"@agent-inspect/core/advanced\";\nimport { exportRunTree } from \"@agent-inspect/core/exporters\";\nimport { openTrace } from \"@agent-inspect/core/readers\";\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 { redactTraceContent } from \"./redact.js\";\nimport { assessOpenedTrace } from \"./safety.js\";\nimport { loadSessionRuns } from \"./sessions-load.js\";\n\nexport interface BundleCommandOptions {\n dir?: string;\n session?: string;\n since?: string;\n profile?: string;\n out?: string;\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(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\");\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\nasync function resolveOutputDir(\n options: BundleCommandOptions,\n runIds: readonly string[],\n cwd: string,\n): Promise<string> {\n if (options.out !== undefined && options.out.trim() !== \"\") {\n const normalized = normalizeBundleOutputPath(options.out);\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 = runIds.length === 1 ? runIds[0]! : `multi-${runIds.length}`;\n return resolveInsideWorkspace(\n location.workspaceDir,\n path.join(manifest.manifest.bundlesDir, `bundle-${label}-${stamp}`),\n );\n }\n } catch {\n // fall through\n }\n\n return defaultBundleOutputPath(runIds);\n}\n\nasync function writeBundleFile(\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 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=\"assets/runs/${escapeHtml(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(options.profile);\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);\n const files: 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 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 safety = assessOpenedTrace(read, { run: runId });\n const status = safetyStatusFromAssess(safety.status);\n checkRuns.push({\n runId,\n status,\n errors: safety.summary.errors,\n warnings: safety.summary.warnings,\n findings: safety.summary.findings,\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 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 safety status is ${checks.aggregateStatus}. Pass --allow-unsafe to override.`,\n checks,\n }).trimEnd(),\n );\n } else {\n console.error(\n `[AgentInspect] bundle refused: 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 await mkdir(outputDir, { recursive: true });\n\n for (const runId of resolveResult.runIds) {\n const jsonl = redactedJsonlByRun.get(runId) ?? \"\";\n await writeBundleFile(outputDir, `assets/runs/${runId}.jsonl`, jsonl, files);\n const html = htmlByRun.get(runId) ?? \"\";\n await writeBundleFile(\n outputDir,\n `assets/runs/${runId}.html`,\n runReportWrap(html, runId),\n files,\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 await writeBundleFile(outputDir, \"trace.jsonl\", combinedJsonl, files);\n await writeBundleFile(outputDir, \"trace.html\", traceHtml, files);\n await writeBundleFile(\n outputDir,\n \"check-results.json\",\n writeJson(checks),\n files,\n );\n await writeBundleFile(\n outputDir,\n \"eval-results.json\",\n writeJson(buildPlaceholderArtifact()),\n files,\n );\n await writeBundleFile(\n outputDir,\n \"redaction-report.json\",\n writeJson(redactionReport),\n files,\n );\n await writeBundleFile(\n outputDir,\n \"performance-summary.json\",\n writeJson(buildPlaceholderArtifact()),\n files,\n );\n\n const metadata = buildBundleMetadata({\n agentInspectVersion: packageVersion,\n profile,\n resolve: resolveResult,\n checks,\n files: [...files],\n });\n\n await writeBundleFile(outputDir, \"metadata.json\", writeJson(metadata), files);\n await writeBundleFile(\n outputDir,\n \"summary.md\",\n buildBundleSummaryMarkdown({ metadata, checks, redaction: redactionReport }),\n files,\n );\n\n metadata.files = [...files].sort((a, b) => a.localeCompare(b));\n await writeFile(path.join(outputDir, \"metadata.json\"), writeJson(metadata), \"utf-8\");\n\n if (options.json) {\n console.log(\n writeJson({\n ok: true,\n outputDir,\n metadata,\n checks,\n redaction: redactionReport,\n }).trimEnd(),\n );\n return;\n }\n\n console.log(`Bundle written to ${outputDir}`);\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\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\";\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","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 = \"ai-sdk\" | \"openai-agents\" | \"langchain\" | \"custom\";\n\nexport interface InitCommandOptions {\n framework?: InitFramework;\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 === \"ai-sdk\" || raw === \"openai-agents\" || raw === \"langchain\" || raw === \"custom\") {\n return raw;\n }\n throw new Error(\n 'Unsupported --framework value. Use ai-sdk, openai-agents, langchain, or custom.',\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 — metadata-only telemetry (no real model calls in this demo).\n * Install: npm install agent-inspect @agent-inspect/ai-sdk ai\n */\nimport { inspectRun, step } from \"agent-inspect\";\n\nasync function main() {\n await inspectRun(\"ai-sdk-demo\", async () => {\n await step.tool(\"mock-generate\", async () => ({ text: \"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 \"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 default:\n return `import { observe } from \"agent-inspect\";\n\nclass DemoAgent {\n async run(input: { question: string }) {\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(): 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 - run: npm test\n - name: Upload AgentInspect traces\n if: always()\n uses: actions/upload-artifact@v4\n with:\n name: agent-inspect-traces\n path: .agent-inspect/**/*.jsonl\n if-no-files-found: ignore\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 const demoPath =\n framework === \"custom\"\n ? path.join(\"examples\", \"agent-inspect-demo.mjs\")\n : path.join(\"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(),\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 content =\n entry.path === CONFIG_FILE\n ? configTemplate(plan.framework)\n : entry.path === GITKEEP\n ? \"\"\n : entry.path.endsWith(\".yml\")\n ? githubWorkflowTemplate()\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 { access, constants, mkdir } 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 = \"ai-sdk\" | \"openai-agents\" | \"langchain\" | \"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\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};\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.\",\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 await mkdir(resolved, { recursive: true });\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.\",\n evidence: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\nfunction resolvePackage(cwd: string, name: string): { ok: boolean; version?: string } {\n const require = createRequire(path.join(cwd, \"package.json\"));\n try {\n const pkgPath = require.resolve(`${name}/package.json`);\n const pkg = require(pkgPath) as { version?: string };\n return { ok: true, version: pkg.version };\n } catch {\n return { ok: false };\n }\n}\n\nfunction importSmoke(cwd: string): DoctorCheckResult[] {\n const results: DoctorCheckResult[] = [];\n const require = createRequire(path.join(cwd, \"package.json\"));\n\n try {\n require.resolve(\"agent-inspect\");\n results.push({\n id: \"import-agent-inspect\",\n status: \"pass\",\n message: \"agent-inspect resolves from the current project.\",\n });\n } catch {\n results.push({\n id: \"import-agent-inspect\",\n status: \"warn\",\n message: \"agent-inspect is not installed in the current project.\",\n remediation: \"Run npm install agent-inspect (or pnpm add agent-inspect).\",\n });\n }\n\n try {\n require.resolve(\"agent-inspect/package.json\");\n results.push({\n id: \"import-agent-inspect-cjs\",\n status: \"pass\",\n message: \"CJS resolution for agent-inspect succeeded.\",\n });\n } catch {\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 = resolvePackage(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 = resolvePackage(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}.`,\n remediation: \"Align versions with npm install agent-inspect@latest\",\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 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 { 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 if (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 { 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 {\n return undefined;\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 { 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 runSuite,\n validateSuiteConfig,\n type SuiteRunResult,\n} from \"@agent-inspect/core/advanced\";\n\nexport interface SuiteCommandOptions {\n config?: 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\";\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\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 = defaultSuiteConfigTemplate();\n\n if (options.dryRun) {\n if (options.json) {\n printJson({\n ok: true,\n dryRun: true,\n wouldWrite: [DEFAULT_CONFIG_FILENAME],\n config: template,\n });\n return;\n }\n console.log(\"Dry run — would create:\");\n console.log(`- ${DEFAULT_CONFIG_FILENAME}`);\n return;\n }\n\n try {\n await writeFile(configPath, `${JSON.stringify(template, null, 2)}\\n`, \"utf-8\");\n if (options.json) {\n printJson({ ok: true, created: [DEFAULT_CONFIG_FILENAME], configPath });\n return;\n }\n console.log(\"Created suite config:\");\n console.log(`- ${DEFAULT_CONFIG_FILENAME}`);\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 = error instanceof Error ? error.message : String(error);\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}\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(COHORT_METRIC_IDS);\n return parsed.filter((item): item is CohortMetricId =>\n allowed.has(item as CohortMetricId),\n );\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 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: normalizeMetrics(options.metric),\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, 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 { 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?: \"markdown\" | \"json\" | \"html\" | \"junit\" | \"github\";\n output?: string;\n cwd?: string;\n}\n\nconst SUPPORTED_FORMATS = new Set([\"markdown\", \"json\", \"html\", \"junit\", \"github\"]);\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 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 };\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 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 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 { 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 { 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 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(\"--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 .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(\"--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 \"fail when observed outcomes match status (passed, failed, unknown, skipped; comma-separated)\",\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 .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(\"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(\"--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 .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(\"--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 .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(\"--json\", \"print deterministic JSON manifest\")\n .action((target: string, opts: ArtifactsCommandOptions) => {\n runCommand(() => artifactsCommand(target, opts));\n });\n\n program\n .command(\"bundle\")\n .description(\"Create a share-safe offline trace bundle (local folder)\")\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 .option(\"--out <path>\", \"output directory (folder; .zip suffix is stripped)\")\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 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(\"--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 .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 .option(\"-o, --output <path>\", \"write redacted content to a file\")\n .option(\"--json\", \"print deterministic JSON wrapper with findings\")\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 .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 \"custom\",\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 \"custom\",\n ]),\n )\n .action((opts: DoctorCommandOptions) => {\n runCommand(() => doctorCommand(opts));\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(\"--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 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 .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"]}
|
|
1
|
+
{"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/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/export.ts","../../core/src/diff/comparable.ts","../../core/src/diff/engine.ts","../../core/src/diff/renderer.ts","../../core/src/diff/index.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/index.ts","../src/trace-input.ts","../src/redact.ts","../src/explain.ts","../src/open.ts","../src/migrate.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/serve.ts","../../eval/src/index.ts","../src/eval.ts","../src/safety.ts","../src/artifacts.ts","../src/bundle.ts","../../core/src/reporters/index.ts","../src/ci-summary.ts","../src/init.ts","../src/doctor.ts","../../adapter-sdk/src/indexer.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","redact","isRecord","readFile","safeString","parseRunIdKeys","summarizeWarnings","formatWarningLine","hexFrom","crypto","tail","title","result","path","mapStepStatus","rm","parseLimit","isModuleNotFound","parseRedactionProfile","mkdir","writeFile","DEFAULT_REDACT_KEYS","Redactor","isMissingFileError","stats","stat","readStdin","selectRun","printMultipleRuns","writeJson","printSummary","open","toolArgs","ALL_RULES","runRule","checks","stable","diagnostic","access","constants","indexPath","read","errorResult","fail","CONFIG_EXTENSIONS","TS_CONFIG_EXTENSIONS","parseNumber","asStringArray","asConfig","loadConfig","pathToFileURL","normalizeConfig","buildRules","exitCodeFor","printJson","printHuman","readErrorResult","maxStringLength","escapeHtml","NOTE","REDACTION_PROFILES","summarize","renderMarkdown","appendFile","process","require","payload","newestTraceMtimeMs","readdir","parseDuration","writeArtifacts"],"mappings":"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","file":"index.mjs","sourcesContent":["{\n \"name\": \"agent-inspect\",\n \"version\": \"5.3.0\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"description\": \"Trace, check, and safely share TypeScript AI-agent runs locally — no account, no upload, metadata-only by default\",\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/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/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/readme-product-loop.svg\"\n ],\n \"sideEffects\": false,\n \"keywords\": [\n \"ai\",\n \"agents\",\n \"debugging\",\n \"typescript\",\n \"llm\",\n \"devtools\",\n \"jsonl\",\n \"cli\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"engines\": {\n \"node\": \">=20\"\n },\n \"dependencies\": {\n \"chalk\": \"^5.3.0\",\n \"nanoid\": \"^5.0.9\",\n \"commander\": \"^12.1.0\"\n },\n \"scripts\": {\n \"clean\": \"pnpm -r exec -- rm -rf dist\",\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\",\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 test && pnpm run build && pnpm run size\",\n \"prepublish:checks\": \"pnpm run typecheck && pnpm run test && pnpm run test:coverage && pnpm run build && pnpm run fixtures:check && pnpm run recipes:check && pnpm run size && pnpm run pack:smoke\",\n \"prepublishOnly\": \"pnpm run prepublish:checks\",\n \"prepack\": \"pnpm run clean && pnpm run build\",\n \"pack:dry-run\": \"pnpm run build && npm pack --dry-run\",\n \"pack:smoke\": \"pnpm run build && node scripts/package-smoke.mjs\",\n \"compat:smoke\": \"node scripts/compat-smoke.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 \"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 },\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\": \"^2.1.8\",\n \"size-limit\": \"^11.1.6\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.7.2\",\n \"vitest\": \"^2.1.8\"\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\nfunction parseKeep(raw?: string): number {\n const trimmed = typeof raw === \"string\" ? raw.trim() : \"\";\n if (trimmed === \"\") {\n throw new Error(`Invalid --keep value: ${raw}. Provide a positive integer.`);\n }\n const n = Number.parseInt(trimmed, 10);\n if (!Number.isFinite(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 { persistedInspectEventsToTraceEvents } 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\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 * 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 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 const events = persistedInspectEventsToTraceEvents(result.events);\n return {\n events,\n format: events.length > 0 ? mapReaderFormat(result.format) : \"empty\",\n };\n } catch (error) {\n if (isMissingFileError(error)) return undefined;\n throw error;\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/**\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 console.log(JSON.stringify(errEvents, null, 2));\n } else if (errEvents.length === 0) {\n console.log(\"No errors found in trace\");\n } else {\n console.log(\"Error events\");\n console.log(JSON.stringify(errEvents, null, 2));\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\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 (eventName.endsWith(\".error\") || eventName.endsWith(\".failed\") || eventName.includes(\".error\") || eventName.includes(\".failed\")) {\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 (eventName.includes(\".failed\") || eventName.includes(\".error\")) {\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\";\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\nasync 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 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 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 + buf.toString(\"utf-8\", 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","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport { Redactor } from \"../logs/redactor.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 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(value, key, maxMetadataValueLength, maxPreviewLength, seen, depth);\n }\n return out;\n}\n\nfunction boundValue(\n value: unknown,\n key: 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 return truncateStringForProfile(\n value,\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 maxMetadataValueLength,\n maxPreviewLength,\n seen,\n depth + 1,\n ),\n );\n }\n\n return boundAttributeValues(\n value as Record<string, unknown>,\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 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 start_time_unix_nano: number;\n end_time_unix_nano?: number;\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\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 = Math.round(ev.timestamp * 1e6);\n let endNs: number | undefined;\n if (ev.durationMs !== undefined && Number.isFinite(ev.durationMs)) {\n endNs = startNs + Math.round(ev.durationMs * 1e6);\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,\n end_time_unix_nano: endNs,\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\nfunction hexFrom(seed: string, byteLen: number): string {\n return crypto.createHash(\"sha256\").update(seed, \"utf8\").digest(\"hex\").slice(0, byteLen * 2);\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(value) } };\n}\n\ntype OtlpAttr =\n | ReturnType<typeof stringAttr>\n | ReturnType<typeof intAttr>;\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\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 ];\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 = String(Math.round(ev.timestamp * 1e6));\n let endNs: string | undefined;\n if (ev.durationMs !== undefined && Number.isFinite(ev.durationMs)) {\n endNs = String(Math.round(ev.timestamp * 1e6 + ev.durationMs * 1e6));\n }\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\" || typeof v === \"number\" || typeof v === \"boolean\") {\n attrs.push(\n stringAttr(\n `agent_inspect.preview.${k}`,\n typeof v === \"string\" ? v.slice(0, maxLen) : String(v),\n ),\n );\n }\n }\n }\n\n let statusCode = \"STATUS_CODE_UNSET\";\n let statusMessage: string | undefined;\n if (ev.status === \"error\") {\n statusCode = \"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 = \"STATUS_CODE_OK\";\n }\n\n const spanJson: Record<string, unknown> = {\n traceId,\n spanId,\n name: ev.name,\n kind: \"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\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 let parsed: unknown;\n try {\n parsed = JSON.parse(content) as unknown;\n } catch {\n errors.push(\"OTLP JSON export is not valid JSON\");\n return { ok: false, format, errors, warnings };\n }\n if (!parsed || typeof parsed !== \"object\") {\n errors.push(\"OTLP JSON export must be an object\");\n return { ok: false, format, errors, warnings };\n }\n const o = parsed as Record<string, unknown>;\n if (!Array.isArray(o.resourceSpans)) {\n errors.push(\"OTLP JSON export must include resourceSpans array\");\n }\n warnings.push(\n \"OTLP JSON mapping uses OTel GenAI-aligned attributes where applicable; collectors may require transformation.\",\n );\n return { ok: errors.length === 0, format, errors, warnings };\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 { 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","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 manualTraceEventsToRunTree,\n validateExport,\n type ExportFormat,\n type ExportOptions,\n} from \"@agent-inspect/core/exporters\";\n\nimport { readRunTraceEvents } from \"./read-run.js\";\n\nexport interface ExportCommandOptions {\n dir?: string;\n format?: string;\n output?: string;\n json?: boolean;\n validate?: boolean;\n includeAttributes?: boolean;\n noMetadata?: boolean;\n noErrors?: boolean;\n redactionProfile?: 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(options.redactionProfile);\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] 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 tree = manualTraceEventsToRunTree(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 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 outPath =\n options.output !== undefined && options.output.trim() !== \"\"\n ? path.resolve(options.output.trim())\n : 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 console.log(`Wrote ${result.fileExtension} export to ${outPath} (validation: ${vlabel})`);\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.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 {\n RunCompletedEvent,\n RunStartedEvent,\n StepCompletedEvent,\n StepStartedEvent,\n StepType,\n TraceEvent,\n} from \"../types.js\";\n\nimport type { RunComparable, StepComparable } from \"./types.js\";\n\ntype StepAcc = {\n id: string;\n parentId?: string;\n name: string;\n type: StepType;\n order: number;\n timestamp: number;\n metadata?: Record<string, unknown>;\n status?: \"success\" | \"error\";\n durationMs?: number;\n errorMsg?: string;\n};\n\nfunction extractOutputPreview(meta: Record<string, unknown> | undefined): unknown {\n if (meta === undefined) return undefined;\n if (\"outputPreview\" in meta) return meta.outputPreview;\n if (\"resultPreview\" in meta) return meta.resultPreview;\n return undefined;\n}\n\nfunction mapStepStatus(s: \"success\" | \"error\" | undefined): string {\n if (s === undefined) return \"running\";\n return s;\n}\n\n/**\n * Normalize v0.1 manual JSONL events into a comparable run tree.\n * Does not mutate input events.\n */\nexport function manualTraceEventsToComparableRun(events: TraceEvent[]): RunComparable {\n const started = events.find((e) => e.event === \"run_started\");\n if (!started || started.event !== \"run_started\") {\n throw new Error(\"Invalid trace: missing run_started\");\n }\n\n const rs = started as RunStartedEvent;\n const runId = rs.runId;\n\n const completedAll = events.filter((e) => e.event === \"run_completed\");\n const lastCompleted = completedAll[completedAll.length - 1] as RunCompletedEvent | undefined;\n\n let runStatus: string | undefined;\n if (lastCompleted === undefined) runStatus = \"running\";\n else runStatus = lastCompleted.status;\n\n const durationMs =\n lastCompleted !== undefined && Number.isFinite(lastCompleted.durationMs)\n ? lastCompleted.durationMs\n : undefined;\n\n const steps = new Map<string, StepAcc>();\n let order = 0;\n\n for (const e of events) {\n if (e.event !== \"step_started\") continue;\n const s = e as StepStartedEvent;\n const meta = s.metadata ? { ...(s.metadata as Record<string, unknown>) } : undefined;\n steps.set(s.stepId, {\n id: s.stepId,\n parentId: s.parentId,\n name: s.name,\n type: s.type,\n order: order++,\n timestamp: s.timestamp,\n metadata: meta,\n });\n }\n\n for (const e of events) {\n if (e.event !== \"step_completed\") continue;\n const acc = steps.get(e.stepId);\n if (!acc) continue;\n acc.status = e.status;\n acc.durationMs = e.durationMs;\n if (e.error?.message) acc.errorMsg = e.error.message;\n const extra = e as StepCompletedEvent & { metadata?: Record<string, unknown> };\n if (extra.metadata !== undefined && typeof extra.metadata === \"object\") {\n acc.metadata = { ...(acc.metadata ?? {}), ...extra.metadata };\n }\n }\n\n const nodes = new Map<string, StepComparable>();\n\n for (const acc of steps.values()) {\n let meta = acc.metadata ? { ...acc.metadata } : undefined;\n if (acc.parentId !== undefined && !steps.has(acc.parentId)) {\n meta = { ...(meta ?? {}), agent_inspect_diff_parent_missing: true };\n }\n\n const outputPreview = extractOutputPreview(meta);\n\n const sc: StepComparable = {\n id: acc.id,\n name: acc.name,\n type: acc.type,\n status: mapStepStatus(acc.status),\n durationMs: acc.durationMs,\n error: acc.errorMsg,\n metadata: meta && Object.keys(meta).length > 0 ? meta : undefined,\n outputPreview,\n children: [],\n };\n nodes.set(acc.id, sc);\n }\n\n const roots: StepComparable[] = [];\n const sortByOrder = (a: StepComparable, b: StepComparable) => {\n const oa = steps.get(a.id)?.order ?? 0;\n const ob = steps.get(b.id)?.order ?? 0;\n return oa - ob;\n };\n\n for (const acc of steps.values()) {\n const node = nodes.get(acc.id)!;\n if (acc.parentId !== undefined && nodes.has(acc.parentId)) {\n nodes.get(acc.parentId)!.children.push(node);\n } else {\n roots.push(node);\n }\n }\n\n roots.sort(sortByOrder);\n for (const n of nodes.values()) {\n n.children.sort(sortByOrder);\n }\n\n return {\n runId,\n name: rs.name,\n status: runStatus,\n durationMs,\n steps: roots,\n };\n}\n","import { stableJson } from \"../exporters/helpers.js\";\n\nimport type {\n DiffKind,\n DiffOptions,\n DiffPath,\n DiffPathSegment,\n RunComparable,\n RunDiffItem,\n RunDiffResult,\n RunDiffSummary,\n StepComparable,\n} from \"./types.js\";\n\nconst DEFAULT_THRESHOLD_MS = 0;\n\nfunction pathSeg(step: StepComparable, index: number): DiffPathSegment {\n return { index, name: step.name, stepId: step.id };\n}\n\nfunction buildPath(segments: DiffPathSegment[]): DiffPath {\n return { path: [...segments] };\n}\n\n/** Pair steps: match by id, then same index, then name+type. */\nexport function pairSteps(\n left: StepComparable[],\n right: StepComparable[],\n): Array<[StepComparable | undefined, StepComparable | undefined]> {\n const usedRight = new Set<string>();\n const pairs: Array<[StepComparable | undefined, StepComparable | undefined]> = [];\n\n for (let i = 0; i < left.length; i++) {\n const L = left[i]!;\n let R = right.find((r) => !usedRight.has(r.id) && r.id === L.id);\n if (R === undefined && i < right.length && !usedRight.has(right[i]!.id)) {\n const cand = right[i]!;\n if (cand.name === L.name && (cand.type ?? \"\") === (L.type ?? \"\")) {\n R = cand;\n }\n }\n if (R === undefined) {\n R = right.find(\n (r) =>\n !usedRight.has(r.id) &&\n r.name === L.name &&\n (r.type ?? \"\") === (L.type ?? \"\"),\n );\n }\n if (R !== undefined) {\n usedRight.add(R.id);\n pairs.push([L, R]);\n } else {\n pairs.push([L, undefined]);\n }\n }\n\n for (const R of right) {\n if (!usedRight.has(R.id)) {\n pairs.push([undefined, R]);\n }\n }\n\n return pairs;\n}\n\nfunction compareLeafSteps(\n L: StepComparable,\n R: StepComparable,\n segments: DiffPathSegment[],\n opts: Required<Pick<DiffOptions, \"ignoreDuration\" | \"durationThresholdMs\">>,\n out: RunDiffItem[],\n): void {\n const path = buildPath(segments);\n\n if (L.name !== R.name) {\n out.push({\n kind: \"structure\",\n severity: \"warning\",\n message: \"Step name differs\",\n path,\n left: L.name,\n right: R.name,\n });\n }\n\n if ((L.type ?? \"\") !== (R.type ?? \"\")) {\n out.push({\n kind: \"step-type\",\n severity: \"warning\",\n message: \"Step type differs\",\n path,\n left: L.type,\n right: R.type,\n });\n }\n\n if ((L.status ?? \"\") !== (R.status ?? \"\")) {\n out.push({\n kind: \"step-status\",\n severity: \"warning\",\n message: \"Step status differs\",\n path,\n left: L.status,\n right: R.status,\n });\n }\n\n const le = L.error ?? \"\";\n const re = R.error ?? \"\";\n if (le !== re) {\n out.push({\n kind: \"error\",\n severity: \"error\",\n message: \"Step error message differs\",\n path,\n left: le || undefined,\n right: re || undefined,\n });\n }\n\n if (!opts.ignoreDuration) {\n const ld = L.durationMs;\n const rd = R.durationMs;\n const th = opts.durationThresholdMs;\n let differs = false;\n if (ld === undefined && rd === undefined) differs = false;\n else if (ld === undefined || rd === undefined) differs = true;\n else differs = Math.abs(ld - rd) > th;\n if (differs) {\n out.push({\n kind: \"duration\",\n severity: \"info\",\n message: \"Step duration differs\",\n path,\n left: ld,\n right: rd,\n });\n }\n }\n\n const lm = stableJson(L.metadata ?? {});\n const rm = stableJson(R.metadata ?? {});\n if (lm !== rm) {\n out.push({\n kind: \"metadata\",\n severity: \"info\",\n message: \"Step metadata differs\",\n path,\n left: L.metadata,\n right: R.metadata,\n });\n }\n\n const lo = stableJson(L.outputPreview ?? null);\n const ro = stableJson(R.outputPreview ?? null);\n if (lo !== ro) {\n out.push({\n kind: \"output\",\n severity: \"info\",\n message: \"Output preview differs\",\n path,\n left: L.outputPreview,\n right: R.outputPreview,\n });\n }\n}\n\nfunction compareRecursive(\n L: StepComparable,\n R: StepComparable,\n segments: DiffPathSegment[],\n opts: Required<Pick<DiffOptions, \"ignoreDuration\" | \"durationThresholdMs\">>,\n out: RunDiffItem[],\n): void {\n compareLeafSteps(L, R, segments, opts, out);\n\n const pairs = pairSteps(L.children, R.children);\n let ci = 0;\n for (const [lch, rch] of pairs) {\n if (lch !== undefined && rch !== undefined) {\n compareRecursive(lch, rch, [...segments, pathSeg(lch, ci)], opts, out);\n } else if (lch !== undefined) {\n out.push({\n kind: \"step-removed\",\n severity: \"warning\",\n message: `Step only in left run: ${lch.name}`,\n path: buildPath([...segments, pathSeg(lch, ci)]),\n left: lch.id,\n right: undefined,\n });\n } else if (rch !== undefined) {\n out.push({\n kind: \"step-added\",\n severity: \"warning\",\n message: `Step only in right run: ${rch.name}`,\n path: buildPath([...segments, pathSeg(rch, ci)]),\n left: undefined,\n right: rch.id,\n });\n }\n ci += 1;\n }\n}\n\nfunction mergeDiffDefaults(options?: DiffOptions): Required<\n Pick<DiffOptions, \"ignoreDuration\" | \"durationThresholdMs\" | \"focus\" | \"check\">\n> {\n return {\n ignoreDuration: options?.ignoreDuration ?? false,\n durationThresholdMs:\n options?.durationThresholdMs !== undefined\n ? options.durationThresholdMs\n : DEFAULT_THRESHOLD_MS,\n focus: options?.focus ?? \"all\",\n check: options?.check ?? \"all\",\n };\n}\n\nfunction kindMatchesFilter(kind: DiffKind, merged: ReturnType<typeof mergeDiffDefaults>): boolean {\n const { focus, check } = merged;\n\n if (check !== \"all\") {\n if (check === \"structure\") {\n if (![\"step-added\", \"step-removed\", \"structure\", \"step-type\"].includes(kind)) return false;\n } else if (check === \"outputs\") {\n if (![\"metadata\", \"output\"].includes(kind)) return false;\n } else if (check === \"errors\") {\n if (![\"run-status\", \"step-status\", \"error\"].includes(kind)) return false;\n } else if (check === \"timing\") {\n if (kind !== \"duration\") return false;\n }\n }\n\n if (focus !== \"all\") {\n if (focus === \"errors\") {\n if (![\"run-status\", \"step-status\", \"error\"].includes(kind)) return false;\n } else if (focus === \"structure\") {\n if (![\"step-added\", \"step-removed\", \"structure\", \"step-type\"].includes(kind)) return false;\n } else if (focus === \"outputs\") {\n if (![\"metadata\", \"output\"].includes(kind)) return false;\n }\n }\n\n return true;\n}\n\nexport function diffRuns(\n left: RunComparable,\n right: RunComparable,\n options?: DiffOptions,\n): RunDiffResult {\n const merged = mergeDiffDefaults(options);\n const opts = {\n ignoreDuration: merged.ignoreDuration,\n durationThresholdMs: merged.durationThresholdMs,\n };\n\n const raw: RunDiffItem[] = [];\n\n if ((left.status ?? \"\") !== (right.status ?? \"\")) {\n raw.push({\n kind: \"run-status\",\n severity: \"warning\",\n message: \"Run completion status differs\",\n left: left.status,\n right: right.status,\n });\n }\n\n if (!merged.ignoreDuration) {\n const ld = left.durationMs;\n const rd = right.durationMs;\n const th = merged.durationThresholdMs;\n let differs = false;\n if (ld === undefined && rd === undefined) differs = false;\n else if (ld === undefined || rd === undefined) differs = true;\n else differs = Math.abs(ld - rd) > th;\n if (differs) {\n raw.push({\n kind: \"duration\",\n severity: \"info\",\n message: \"Run duration differs\",\n left: ld,\n right: rd,\n });\n }\n }\n\n const pairs = pairSteps(left.steps, right.steps);\n let idx = 0;\n for (const [ls, rs] of pairs) {\n if (ls !== undefined && rs !== undefined) {\n compareRecursive(ls, rs, [pathSeg(ls, idx)], opts, raw);\n idx += 1;\n } else if (ls !== undefined) {\n raw.push({\n kind: \"step-removed\",\n severity: \"warning\",\n message: `Step only in left run: ${ls.name}`,\n path: buildPath([pathSeg(ls, idx)]),\n left: ls.id,\n right: undefined,\n });\n idx += 1;\n } else if (rs !== undefined) {\n raw.push({\n kind: \"step-added\",\n severity: \"warning\",\n message: `Step only in right run: ${rs.name}`,\n path: buildPath([pathSeg(rs, idx)]),\n left: undefined,\n right: rs.id,\n });\n idx += 1;\n }\n }\n\n const differences = raw.filter((d) => kindMatchesFilter(d.kind, merged));\n\n let errors = 0;\n let warnings = 0;\n let info = 0;\n for (const d of differences) {\n if (d.severity === \"error\") errors += 1;\n else if (d.severity === \"warning\") warnings += 1;\n else info += 1;\n }\n\n const firstVisible = differences[0];\n const firstDivergence: RunDiffItem | undefined =\n firstVisible !== undefined\n ? {\n kind: \"first-divergence\",\n severity: firstVisible.severity,\n message: `First divergence: ${firstVisible.message}`,\n path: firstVisible.path,\n left: firstVisible.left,\n right: firstVisible.right,\n }\n : undefined;\n\n const summary: RunDiffSummary = {\n leftRunId: left.runId,\n rightRunId: right.runId,\n totalDifferences: differences.length,\n errors,\n warnings,\n info,\n firstDivergence,\n };\n\n return { summary, differences };\n}\n","import chalk from \"chalk\";\n\nimport type { RenderDiffOptions, RunDiffResult } from \"./types.js\";\n\nfunction formatPath(path?: import(\"./types.js\").DiffPath): string {\n if (path === undefined || path.path.length === 0) {\n return \"(run)\";\n }\n return path.path.map((s) => s.name).join(\" > \");\n}\n\nfunction formatValue(v: unknown, verbose: boolean): string {\n if (v === undefined) return \"(undefined)\";\n if (typeof v === \"string\") return v;\n if (typeof v === \"number\" || typeof v === \"boolean\") return String(v);\n const s = JSON.stringify(v);\n if (verbose || s.length <= 120) return s;\n return `${s.slice(0, 117)}...`;\n}\n\nexport function renderRunDiff(result: RunDiffResult, options?: RenderDiffOptions): string {\n const json = options?.json === true;\n const verbose = options?.verbose === true;\n const color = options?.color === true;\n\n if (json) {\n return JSON.stringify(result, null, 2);\n }\n\n const sev = (s: string, level: \"error\" | \"warning\" | \"info\"): string => {\n if (!color) return s;\n if (level === \"error\") return chalk.red(s);\n if (level === \"warning\") return chalk.yellow(s);\n return chalk.gray(s);\n };\n\n const lines: string[] = [];\n const { summary } = result;\n\n lines.push(\"Run diff\");\n lines.push(`Left: ${summary.leftRunId}`);\n lines.push(`Right: ${summary.rightRunId}`);\n lines.push(\"\");\n lines.push(\"Summary:\");\n lines.push(` Differences: ${summary.totalDifferences}`);\n lines.push(` Errors: ${summary.errors}`);\n lines.push(` Warnings: ${summary.warnings}`);\n lines.push(` Info: ${summary.info}`);\n lines.push(\"\");\n\n const fd = summary.firstDivergence;\n const firstKind = result.differences[0]?.kind;\n if (fd !== undefined) {\n lines.push(\"First divergence:\");\n const where = formatPath(fd.path);\n const displayKind = firstKind ?? fd.kind;\n lines.push(` ${displayKind} at ${where}`);\n if (fd.left !== undefined || fd.right !== undefined) {\n lines.push(` left: ${formatValue(fd.left, verbose)}`);\n lines.push(` right: ${formatValue(fd.right, verbose)}`);\n }\n lines.push(\"\");\n }\n\n lines.push(\"Differences:\");\n if (result.differences.length === 0) {\n lines.push(\" (none)\");\n return lines.join(\"\\n\");\n }\n\n const showSides = (kind: string): boolean =>\n verbose ||\n [\n \"run-status\",\n \"step-status\",\n \"error\",\n \"duration\",\n \"step-type\",\n \"structure\",\n \"step-added\",\n \"step-removed\",\n ].includes(kind);\n\n for (const d of result.differences) {\n const tag = sev(`[${d.severity}]`, d.severity);\n const pathStr = d.path !== undefined ? ` ${formatPath(d.path)}` : \"\";\n lines.push(` ${tag} ${d.kind}${pathStr}`);\n lines.push(` ${d.message}`);\n if (d.left !== undefined || d.right !== undefined) {\n if (showSides(d.kind)) {\n lines.push(` left: ${formatValue(d.left, verbose)}`);\n lines.push(` right: ${formatValue(d.right, verbose)}`);\n }\n }\n }\n\n return lines.join(\"\\n\");\n}\n","import type { TraceEvent } from \"../types.js\";\n\nimport { manualTraceEventsToComparableRun } from \"./comparable.js\";\nimport { diffRuns } from \"./engine.js\";\nimport type { DiffOptions, RunDiffResult } from \"./types.js\";\n\nexport type {\n DiffSeverity,\n DiffKind,\n DiffPathSegment,\n DiffPath,\n RunDiffItem,\n StepComparable,\n RunComparable,\n RunDiffSummary,\n RunDiffResult,\n DiffOptions,\n RenderDiffOptions,\n} from \"./types.js\";\n\nexport { manualTraceEventsToComparableRun } from \"./comparable.js\";\nexport { diffRuns } from \"./engine.js\";\nexport { renderRunDiff } from \"./renderer.js\";\n\n/**\n * @experimental Compare two v0.1 manual traces as normalized trees (read-only).\n * Subject to refinement before a future stability declaration.\n */\nexport function diffTraceEvents(\n leftEvents: TraceEvent[],\n rightEvents: TraceEvent[],\n options?: DiffOptions,\n): RunDiffResult {\n const left = manualTraceEventsToComparableRun(leftEvents);\n const right = manualTraceEventsToComparableRun(rightEvents);\n return diffRuns(left, right, options);\n}\n","import 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 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 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 ? ` | ${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 { readRunTraceEvents } from \"./read-run.js\";\n\nexport interface ReportCommandOptions {\n dir?: string;\n format?: string;\n output?: string;\n json?: boolean;\n includeAttributes?: boolean;\n noErrors?: boolean;\n noCorrelation?: boolean;\n redactionProfile?: 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(options.redactionProfile);\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 outPath =\n options.output !== undefined && options.output.trim() !== \"\"\n ? path.resolve(options.output.trim())\n : undefined;\n\n if (outPath !== undefined) {\n await mkdir(path.dirname(outPath), { recursive: true });\n await writeFile(outPath, result.content, \"utf-8\");\n console.log(`Wrote ${result.fileExtension} report to ${outPath}`);\n }\n\n if (options.json === true) {\n const payload: Record<string, unknown> = {\n format: result.format,\n contentType: result.contentType,\n fileExtension: result.fileExtension,\n };\n if (outPath === undefined) {\n payload.content = result.content;\n } else {\n payload.output = outPath;\n }\n console.log(JSON.stringify(payload, null, 2));\n } else if (outPath === undefined) {\n console.log(result.content);\n }\n}\n","import crypto from \"node:crypto\";\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] 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\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\nfunction toKey(key: string): string {\n return key.toLowerCase();\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 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.creditCard\",\n severity: \"error\",\n matchKind: \"value\",\n detect(input) {\n if (typeof input.value !== \"string\") return [];\n const candidatePattern = /(?:\\d[ -]?){13,19}/g;\n for (const match of input.value.matchAll(candidatePattern)) {\n const candidate = match[0] ?? \"\";\n if (passesLuhn(candidate)) {\n return [{ action: \"replace\", severity: \"error\", matchKind: \"value\" }];\n }\n }\n return [];\n },\n },\n];\n\nconst identifierDetectors: readonly RedactionDetector[] = [\n patternDetector({\n id: \"value.email\",\n pattern: /\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b/i,\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 } 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 #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.#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 #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 = this.#rules.find((candidate) => candidate.key === toKey(key));\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 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","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, stat, writeFile } from \"node:fs/promises\";\n\nimport {\n getTraceFilePath,\n resolveTraceDir,\n} from \"@agent-inspect/core/advanced\";\nimport {\n redact,\n type RedactionFinding,\n type RedactionProfile,\n} from \"@agent-inspect/redact\";\n\nimport { readStdin } from \"./trace-input.js\";\n\nexport interface RedactCommandOptions {\n dir?: string;\n profile?: string;\n output?: string;\n json?: 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 redactJsonText(content: string, profile: RedactionProfile): RedactedDocument {\n const parsed = JSON.parse(content) as unknown;\n const result = redact(parsed, { profile });\n return {\n content: `${JSON.stringify(result.value, null, 2)}\\n`,\n findings: result.findings,\n };\n}\n\nfunction redactJsonlText(content: string, profile: RedactionProfile): 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 = redact(parsed, { profile });\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(content: string, profile: RedactionProfile): RedactedDocument {\n try {\n return redactJsonText(content, profile);\n } catch {\n return redactJsonlText(content, profile);\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): RedactedDocument {\n return redactDocument(content, profile);\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(options.profile);\n const source = await contentFromTarget(target, options, stdin);\n const redacted = redactDocument(source.content, profile);\n\n if (options.output !== undefined) {\n await writeFile(options.output, redacted.content, \"utf-8\");\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: options.output,\n findings: redacted.findings,\n content: options.output === undefined ? redacted.content : undefined,\n }),\n null,\n 2,\n ),\n );\n return;\n }\n\n if (options.output === 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 { 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}\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(options.redactionProfile);\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 { 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 name = event.name.toLowerCase();\n return (\n event.kind === \"tool\" ||\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 name = event.name.toLowerCase();\n return event.kind === \"llm\" || 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 runCircuits,\n type CircuitResult,\n type CircuitRuleId,\n type CircuitTraceEvent,\n type RunCircuitsOptions,\n} from \"@agent-inspect/circuit\";\nimport {\n runGuardrails,\n type GuardrailResult,\n type GuardrailRuleId,\n type RunGuardrailsOptions,\n} from \"@agent-inspect/guardrails\";\nimport type {\n TraceCheckEvidence,\n TraceCheckFinding,\n TraceCheckResult,\n TraceCheckSeverity,\n} from \"@agent-inspect/core/checks\";\nimport type { TraceReadResult } from \"@agent-inspect/core/readers\";\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\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: TraceReadResult[\"events\"][number]): 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 collectGuardrailInputs(read: TraceReadResult): 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 read.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 if (event.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\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 },\n): TraceCheckResult {\n const findings = [...result.findings];\n let failed = result.summary.failed;\n let warnings = result.summary.warnings;\n let passed = result.summary.passed;\n\n const guardrailRules = parseGuardrailRules(options.guardrails);\n if (guardrailRules) {\n for (const input of collectGuardrailInputs(read)) {\n const run = runGuardrails(input, {\n ...DEFAULT_GUARDRAIL_OPTIONS,\n rules: guardrailRules,\n });\n for (const item of run.results) {\n const finding = guardrailFinding(item);\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 }\n\n const circuitRules = parseCircuitRules(options.circuits);\n if (circuitRules) {\n const circuitRun = runCircuits(\n read.events.map(eventToCircuit),\n { ...DEFAULT_CIRCUIT_OPTIONS, rules: circuitRules },\n );\n for (const item of circuitRun.results) {\n const finding = circuitFinding(item);\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\n const ok = failed === 0 && result.summary.errors === 0;\n return {\n ...result,\n ok,\n status: failed > 0 ? \"fail\" : result.status,\n summary: {\n passed,\n failed,\n warnings,\n errors: result.summary.errors,\n },\n findings,\n };\n}\n","import { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport {\n TraceReadError,\n openTrace,\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 runTraceChecks,\n type LlmUsageRuleOptions,\n type RunStatusRuleOptions,\n type SafetyOversizedAttributeRuleOptions,\n type StructureRelationshipRuleOptions,\n type ToolUsageRuleOptions,\n type TraceCheckDiagnostic,\n type TraceCheckDiagnosticCode,\n type TraceCheckResult,\n type TraceCheckRule,\n} from \"@agent-inspect/core/checks\";\n\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 forbiddenTool?: 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}\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\ntype RuleBuildResult = {\n rules: TraceCheckRule[];\n select: string[];\n diagnostics: TraceCheckDiagnostic[];\n};\n\nconst DEFAULT_SELECT = [\"run.status\"];\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 },\n findings: [],\n diagnostics,\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\nfunction asConfig(value: unknown): CheckConfig {\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 CheckConfig;\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 Error(\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 Error(\"Unsupported check 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: CheckConfig): NonNullable<CheckConfig[\"checks\"]> {\n if (config.checks === undefined) return {};\n if (typeof config.checks !== \"object\" || Array.isArray(config.checks)) {\n throw new Error(\"checks config must be an object.\");\n }\n return config.checks;\n}\n\nfunction buildRules(\n config: CheckConfig,\n options: CheckCommandOptions,\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 }));\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 select = [\n ...(asStringArray(checks.select) ?? []),\n ...(options.rule ?? []),\n ];\n\n return {\n rules,\n select: select.length > 0 ? select : DEFAULT_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_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 printHuman(result: TraceCheckResult): 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 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 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 let result: TraceCheckResult;\n let phase: \"config\" | \"read\" = \"config\";\n\n const sessionId = options.session?.trim();\n const groupId = options.group?.trim();\n const useSessionScope = Boolean(sessionId || groupId);\n\n try {\n const config = await loadConfig(options.config);\n const built = buildRules(config, options);\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 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 perRun.push(\n mergeSafetyExtensions(\n runTraceChecks(\n { read },\n {\n rules: built.rules,\n select: built.select,\n runId: meta.runId,\n },\n ),\n read,\n {\n ...(options.guardrails ? { guardrails: options.guardrails } : {}),\n ...(options.circuit ? { circuits: options.circuit } : {}),\n },\n ),\n );\n }\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 result = mergeSafetyExtensions(\n runTraceChecks(\n { read },\n {\n rules: built.rules,\n select: built.select,\n ...(options.run !== undefined ? { runId: options.run } : {}),\n },\n ),\n read,\n {\n ...(options.guardrails ? { guardrails: options.guardrails } : {}),\n ...(options.circuit ? { circuits: options.circuit } : {}),\n },\n );\n }\n } catch (error) {\n if (phase === \"config\") {\n const message = error instanceof Error ? error.message : String(error);\n const code: TraceCheckDiagnosticCode =\n message.startsWith(\"--\")\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(\n code,\n message,\n );\n } else {\n result = readErrorResult(error);\n }\n }\n\n process.exitCode = exitCodeFor(result);\n if (options.json) printJson(result);\n else printHuman(result);\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 renderSuite(data) {\n const rows = data.cases.map((c) =>\n '<tr><td>' + c.id + '</td><td class=\"' + c.status + '\">' + c.status +\n '</td><td>' + (c.message || '') + '</td><td>' + c.toolPath.join(' → ') +\n '</td><td>' + 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 ' + c.id + '</h3><ul>';\n if (c.failureDiff) html += '<li>Diff errors: ' + c.failureDiff.summary.errors + '</li>';\n if (c.timeline) html += '<li>Timeline steps: ' + c.timeline.entries.length + '</li>';\n html += '<li>Diagnostics: ' + c.diagnostics.map((d) => d.message).join('; ') + '</li></ul>';\n return html;\n }).join('');\n return '<section><h2>Suite: ' + data.suiteName + ' (' + data.status + ')</h2>' +\n '<p>Passed ' + data.summary.passed + ', failed ' + 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>' + (data.ciArtifactsDir || 'n/a') + '</p></section>' +\n '<section><h2>Bundle export</h2><p>' + 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: ' + (data.project || 'workspace') + '</h2>' +\n '<p>Runs: ' + data.runs.length + '</p><pre>' + 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 { startViewerServer } from \"@agent-inspect/viewer\";\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 openMod = await import(\"node:child_process\");\n openMod.exec(`open ${info.url}`, () => {});\n }\n\n await new Promise<void>(() => {\n // Keep process alive until interrupted.\n });\n}\n","import {\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 return { type: \"file\", path: value instanceof URL ? value.pathname : 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 {\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 { redact, type RedactionFinding } from \"@agent-inspect/redact\";\n\nimport { inputFromTarget } from \"./trace-input.js\";\n\nexport interface SafetyCommandOptions {\n dir?: string;\n format?: string;\n run?: string;\n json?: boolean;\n maxStringLength?: string;\n maxArrayLength?: string;\n maxObjectKeys?: string;\n maxSerializedBytes?: string;\n}\n\ntype SafetyStatus = \"SAFE\" | \"SAFE WITH WARNINGS\" | \"UNSAFE\" | \"UNKNOWN\";\ntype SafetyCommandName = \"scan\" | \"verify-safe\";\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\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}\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}): SafetyResult {\n const findings = [...(parts.findings ?? [])];\n const diagnostics = [...(parts.diagnostics ?? [])];\n const warnings = [...(parts.warnings ?? [])];\n const unsupportedFields = [...(parts.unsupportedFields ?? [])];\n const 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 };\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 redactionDetectorFindings(\n read: Awaited<ReturnType<typeof openTrace>>,\n runId: string | undefined,\n): TraceCheckFinding[] {\n const runs = runId === undefined\n ? read.runs\n : read.runs.filter((run) => run.runId === runId);\n const out: TraceCheckFinding[] = [];\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 = redact(attrs, { profile: \"share\" });\n for (const finding of result.findings) {\n if (finding.action === \"keep\") continue;\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 });\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 printJson(result: SafetyResult): void {\n console.log(JSON.stringify(stable(result), null, 2));\n}\n\nfunction printHuman(result: SafetyResult): 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 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 console.log(`- ${finding.ruleId}: ${finding.message}${path ? ` (${path})` : \"\"}`);\n }\n console.log(`Note: ${result.note}`);\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 rules = buildSafetyRules(options);\n const input = await inputFromTarget(target, options, stdin);\n const read = await openTrace(input, {\n ...(options.format !== undefined ? { format: options.format } : {}),\n });\n const checkResult = runTraceChecks(\n { read },\n {\n rules,\n ...(options.run !== undefined ? { runId: options.run } : {}),\n },\n );\n const detectorFindings =\n checkResult.diagnostics.length === 0\n ? redactionDetectorFindings(read, checkResult.runId)\n : [];\n result = resultFromParts({\n command,\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 const message = error instanceof Error ? error.message : String(error);\n result = message.startsWith(\"--\")\n ? invalidArgumentResult(command, error)\n : readErrorResult(command, error);\n }\n\n process.exitCode = exitCodeFor(result);\n if (options.json) printJson(result);\n else printHuman(result);\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)\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 { appendFile, mkdir, 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 type TraceCheckResult,\n type TraceCheckRule,\n} from \"@agent-inspect/core/checks\";\n\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}\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(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\");\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\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 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: manifestStatus(check, diff),\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 buildPlaceholderArtifact,\n buildSessionIndex,\n bundleFailsOnSafety,\n defaultBundleOutputPath,\n getTraceFilePath,\n normalizeBundleOutputPath,\n parseDuration,\n resolveBundleRunIds,\n resolveTraceDir,\n aggregateBundleSafeStatus,\n type BundleCheckResults,\n type BundleRedactionProfile,\n type BundleRedactionReport,\n type BundleSafeStatus,\n} from \"@agent-inspect/core/advanced\";\nimport { exportRunTree } from \"@agent-inspect/core/exporters\";\nimport { openTrace } from \"@agent-inspect/core/readers\";\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 { redactTraceContent } from \"./redact.js\";\nimport { assessOpenedTrace } from \"./safety.js\";\nimport { loadSessionRuns } from \"./sessions-load.js\";\n\nexport interface BundleCommandOptions {\n dir?: string;\n session?: string;\n since?: string;\n profile?: string;\n out?: string;\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(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\");\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\nasync function resolveOutputDir(\n options: BundleCommandOptions,\n runIds: readonly string[],\n cwd: string,\n): Promise<string> {\n if (options.out !== undefined && options.out.trim() !== \"\") {\n const normalized = normalizeBundleOutputPath(options.out);\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 = runIds.length === 1 ? runIds[0]! : `multi-${runIds.length}`;\n return resolveInsideWorkspace(\n location.workspaceDir,\n path.join(manifest.manifest.bundlesDir, `bundle-${label}-${stamp}`),\n );\n }\n } catch {\n // fall through\n }\n\n return defaultBundleOutputPath(runIds);\n}\n\nasync function writeBundleFile(\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 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=\"assets/runs/${escapeHtml(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(options.profile);\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);\n const files: 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 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 safety = assessOpenedTrace(read, { run: runId });\n const status = safetyStatusFromAssess(safety.status);\n checkRuns.push({\n runId,\n status,\n errors: safety.summary.errors,\n warnings: safety.summary.warnings,\n findings: safety.summary.findings,\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 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 safety status is ${checks.aggregateStatus}. Pass --allow-unsafe to override.`,\n checks,\n }).trimEnd(),\n );\n } else {\n console.error(\n `[AgentInspect] bundle refused: 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 await mkdir(outputDir, { recursive: true });\n\n for (const runId of resolveResult.runIds) {\n const jsonl = redactedJsonlByRun.get(runId) ?? \"\";\n await writeBundleFile(outputDir, `assets/runs/${runId}.jsonl`, jsonl, files);\n const html = htmlByRun.get(runId) ?? \"\";\n await writeBundleFile(\n outputDir,\n `assets/runs/${runId}.html`,\n runReportWrap(html, runId),\n files,\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 await writeBundleFile(outputDir, \"trace.jsonl\", combinedJsonl, files);\n await writeBundleFile(outputDir, \"trace.html\", traceHtml, files);\n await writeBundleFile(\n outputDir,\n \"check-results.json\",\n writeJson(checks),\n files,\n );\n await writeBundleFile(\n outputDir,\n \"eval-results.json\",\n writeJson(buildPlaceholderArtifact()),\n files,\n );\n await writeBundleFile(\n outputDir,\n \"redaction-report.json\",\n writeJson(redactionReport),\n files,\n );\n await writeBundleFile(\n outputDir,\n \"performance-summary.json\",\n writeJson(buildPlaceholderArtifact()),\n files,\n );\n\n const metadata = buildBundleMetadata({\n agentInspectVersion: packageVersion,\n profile,\n resolve: resolveResult,\n checks,\n files: [...files],\n });\n\n await writeBundleFile(outputDir, \"metadata.json\", writeJson(metadata), files);\n await writeBundleFile(\n outputDir,\n \"summary.md\",\n buildBundleSummaryMarkdown({ metadata, checks, redaction: redactionReport }),\n files,\n );\n\n metadata.files = [...files].sort((a, b) => a.localeCompare(b));\n await writeFile(path.join(outputDir, \"metadata.json\"), writeJson(metadata), \"utf-8\");\n\n if (options.json) {\n console.log(\n writeJson({\n ok: true,\n outputDir,\n metadata,\n checks,\n redaction: redactionReport,\n }).trimEnd(),\n );\n return;\n }\n\n console.log(`Bundle written to ${outputDir}`);\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\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\";\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","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 = \"ai-sdk\" | \"openai-agents\" | \"langchain\" | \"custom\";\n\nexport interface InitCommandOptions {\n framework?: InitFramework;\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 === \"ai-sdk\" || raw === \"openai-agents\" || raw === \"langchain\" || raw === \"custom\") {\n return raw;\n }\n throw new Error(\n 'Unsupported --framework value. Use ai-sdk, openai-agents, langchain, or custom.',\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 — metadata-only telemetry (no real model calls in this demo).\n * Install: npm install agent-inspect @agent-inspect/ai-sdk ai\n */\nimport { inspectRun, step } from \"agent-inspect\";\n\nasync function main() {\n await inspectRun(\"ai-sdk-demo\", async () => {\n await step.tool(\"mock-generate\", async () => ({ text: \"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 \"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 default:\n return `import { observe } from \"agent-inspect\";\n\nclass DemoAgent {\n async run(input: { question: string }) {\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(): 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 - run: npm test\n - name: Upload AgentInspect traces\n if: always()\n uses: actions/upload-artifact@v4\n with:\n name: agent-inspect-traces\n path: .agent-inspect/**/*.jsonl\n if-no-files-found: ignore\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 const demoPath =\n framework === \"custom\"\n ? path.join(\"examples\", \"agent-inspect-demo.mjs\")\n : path.join(\"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(),\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 content =\n entry.path === CONFIG_FILE\n ? configTemplate(plan.framework)\n : entry.path === GITKEEP\n ? \"\"\n : entry.path.endsWith(\".yml\")\n ? githubWorkflowTemplate()\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 { access, constants, mkdir } 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 = \"ai-sdk\" | \"openai-agents\" | \"langchain\" | \"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\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};\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.\",\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 await mkdir(resolved, { recursive: true });\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.\",\n evidence: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\nfunction resolvePackage(cwd: string, name: string): { ok: boolean; version?: string } {\n const require = createRequire(path.join(cwd, \"package.json\"));\n try {\n const pkgPath = require.resolve(`${name}/package.json`);\n const pkg = require(pkgPath) as { version?: string };\n return { ok: true, version: pkg.version };\n } catch {\n return { ok: false };\n }\n}\n\nfunction importSmoke(cwd: string): DoctorCheckResult[] {\n const results: DoctorCheckResult[] = [];\n const require = createRequire(path.join(cwd, \"package.json\"));\n\n try {\n require.resolve(\"agent-inspect\");\n results.push({\n id: \"import-agent-inspect\",\n status: \"pass\",\n message: \"agent-inspect resolves from the current project.\",\n });\n } catch {\n results.push({\n id: \"import-agent-inspect\",\n status: \"warn\",\n message: \"agent-inspect is not installed in the current project.\",\n remediation: \"Run npm install agent-inspect (or pnpm add agent-inspect).\",\n });\n }\n\n try {\n require.resolve(\"agent-inspect/package.json\");\n results.push({\n id: \"import-agent-inspect-cjs\",\n status: \"pass\",\n message: \"CJS resolution for agent-inspect succeeded.\",\n });\n } catch {\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 = resolvePackage(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 = resolvePackage(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}.`,\n remediation: \"Align versions with npm install agent-inspect@latest\",\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 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 { 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 if (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 { 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 {\n return undefined;\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 { 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 runSuite,\n validateSuiteConfig,\n type SuiteRunResult,\n} from \"@agent-inspect/core/advanced\";\n\nexport interface SuiteCommandOptions {\n config?: 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\";\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\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 = defaultSuiteConfigTemplate();\n\n if (options.dryRun) {\n if (options.json) {\n printJson({\n ok: true,\n dryRun: true,\n wouldWrite: [DEFAULT_CONFIG_FILENAME],\n config: template,\n });\n return;\n }\n console.log(\"Dry run — would create:\");\n console.log(`- ${DEFAULT_CONFIG_FILENAME}`);\n return;\n }\n\n try {\n await writeFile(configPath, `${JSON.stringify(template, null, 2)}\\n`, \"utf-8\");\n if (options.json) {\n printJson({ ok: true, created: [DEFAULT_CONFIG_FILENAME], configPath });\n return;\n }\n console.log(\"Created suite config:\");\n console.log(`- ${DEFAULT_CONFIG_FILENAME}`);\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 = error instanceof Error ? error.message : String(error);\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}\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(COHORT_METRIC_IDS);\n return parsed.filter((item): item is CohortMetricId =>\n allowed.has(item as CohortMetricId),\n );\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 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: normalizeMetrics(options.metric),\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, 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 { 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?: \"markdown\" | \"json\" | \"html\" | \"junit\" | \"github\";\n output?: string;\n cwd?: string;\n}\n\nconst SUPPORTED_FORMATS = new Set([\"markdown\", \"json\", \"html\", \"junit\", \"github\"]);\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 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 };\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 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 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 { 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 { 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 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(\"--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 .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(\"--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 \"fail when observed outcomes match status (passed, failed, unknown, skipped; comma-separated)\",\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 .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 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(\"--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 .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(\"--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 .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(\"--json\", \"print deterministic JSON manifest\")\n .action((target: string, opts: ArtifactsCommandOptions) => {\n runCommand(() => artifactsCommand(target, opts));\n });\n\n program\n .command(\"bundle\")\n .description(\"Create a share-safe offline trace bundle (local folder)\")\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 .option(\"--out <path>\", \"output directory (folder; .zip suffix is stripped)\")\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 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(\"--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 .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 .option(\"-o, --output <path>\", \"write redacted content to a file\")\n .option(\"--json\", \"print deterministic JSON wrapper with findings\")\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 .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 \"custom\",\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 \"custom\",\n ]),\n )\n .action((opts: DoctorCommandOptions) => {\n runCommand(() => doctorCommand(opts));\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(\"--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 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 .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"]}
|