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":["../../core/src/types/persisted-inspect-event.ts","../../core/src/utils/duration.ts","../../../node_modules/.pnpm/nanoid@5.1.11/node_modules/nanoid/url-alphabet/index.js","../../../node_modules/.pnpm/nanoid@5.1.11/node_modules/nanoid/index.js","../../core/src/utils.ts","../../core/src/persisted/to-trace-event.ts","../../core/src/types.ts","../../core/src/read-trace.ts","../../core/src/logs/redactor.ts","../../core/src/redaction-profiles.ts","../../core/src/storage.ts","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js","../../core/src/correlation-metadata.ts","../../core/src/context.ts","../../core/src/terminal.ts","../../core/src/trace-directory.ts","../../core/src/trace-metadata.ts","../../core/src/trace-filter.ts","../../core/src/timeline.ts","../../core/src/what.ts","../../core/src/explain.ts","../../core/src/stats.ts","../../core/src/outcomes/types.ts","../../core/src/outcomes/validate.ts","../../core/src/outcomes/extract.ts","../../core/src/outcomes/render.ts","../../core/src/search.ts","../../core/src/sessions/activity.ts","../../core/src/sessions/load.ts","../../core/src/sessions/metadata.ts","../../core/src/sessions/status.ts","../../core/src/sessions/checks.ts","../../core/src/sessions/index.ts","../../core/src/sessions/scope.ts","../../core/src/trace-verification.ts","../../core/src/bundle/resolve.ts","../../core/src/bundle/safety-status.ts","../../core/src/bundle/manifest.ts","../../core/src/bundle/summary.ts","../../core/src/bundle/paths.ts","../../core/src/suite/types.ts","../../core/src/suite/validate.ts","../../core/src/suite/load.ts","../../core/src/checks/index.ts","../../core/src/persisted/token-usage.ts","../../core/src/persisted/from-trace-event.ts","../../core/src/logs/tree-builder.ts","../../core/src/persisted/to-inspect-event.ts","../../core/src/persisted/tree-bridge.ts","../../core/src/readers/index.ts","../../core/src/suite/resolve.ts","../../core/src/suite/run.ts","../../core/src/suite/report.ts","../../core/src/cohort/types.ts","../../core/src/cohort/grouping.ts","../../core/src/cohort/compare.ts","../../core/src/cohort/metrics.ts","../../core/src/cohort/analyze.ts","../../core/src/exporters/helpers.ts","../../core/src/cohort/render.ts","../../core/src/gate/parse.ts","../../core/src/gate/evaluate.ts","../../core/src/gate/run.ts","../../core/src/gate/render.ts"],"names":["crypto","path","formatDuration","isRecord","format","asString","process","os","styles","chalk","isNonEmptyString","readdir","stat","parseIsoToMs","readFile","toolSteps","pickCorrelation","observationStatus","toolName","activityMs","warn","retryCount","diagnostic","access","emptySummary","buildFacts","finishedEvents","compactAttributes","percentile","hasThresholds","ok"],"mappings":"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","file":"chunk-SJ5R2XBE.mjs","sourcesContent":["import type { AttributionConfidence, InspectKind } from \"./inspect-event.js\";\n\nexport type PersistedSchemaVersion = \"0.2\" | \"1.0\";\n\nexport type PersistedEventSourceType =\n | \"manual\"\n | \"json-log\"\n | \"log4js\"\n | \"adapter\"\n | \"ai-sdk\"\n | \"otel\";\n\nexport interface PersistedEventSource {\n type: PersistedEventSourceType;\n name?: string;\n version?: string;\n}\n\nexport type PersistedEventStatus = \"running\" | \"ok\" | \"error\" | \"unknown\";\n\nexport interface PersistedInspectError {\n name?: string;\n message: string;\n code?: string;\n}\n\nexport interface PersistedTokenUsage {\n input?: number;\n output?: number;\n total?: number;\n cached?: number;\n}\n\nexport interface PersistedTraceContext {\n traceId?: string;\n spanId?: string;\n parentSpanId?: string;\n}\n\nexport interface PersistedInspectEventBase {\n eventId: string;\n runId: string;\n parentId?: string;\n kind: InspectKind;\n name: string;\n status?: PersistedEventStatus;\n timestamp: string;\n startedAt?: string;\n endedAt?: string;\n durationMs?: number;\n confidence: AttributionConfidence;\n source: PersistedEventSource;\n attributes?: Record<string, unknown>;\n inputSummary?: unknown;\n outputSummary?: unknown;\n error?: PersistedInspectError;\n tokenUsage?: PersistedTokenUsage;\n trace?: PersistedTraceContext;\n}\n\nexport interface PersistedInspectEventV02 extends PersistedInspectEventBase {\n schemaVersion: \"0.2\";\n}\n\nexport interface PersistedInspectEventV10 extends PersistedInspectEventBase {\n schemaVersion: \"1.0\";\n [key: string]: unknown;\n}\n\nexport type PersistedInspectEvent =\n | PersistedInspectEventV02\n | PersistedInspectEventV10;\n\nconst INSPECT_KINDS: readonly InspectKind[] = [\n \"RUN\",\n \"AGENT\",\n \"LLM\",\n \"TOOL\",\n \"CHAIN\",\n \"RETRIEVER\",\n \"DECISION\",\n \"RESULT\",\n \"ERROR\",\n \"LOGIC\",\n \"LOG\",\n \"OUTCOME\",\n];\n\nconst ATTRIBUTION_CONFIDENCES: readonly AttributionConfidence[] = [\n \"explicit\",\n \"correlated\",\n \"heuristic\",\n \"unknown\",\n];\n\nconst PERSISTED_EVENT_SOURCE_TYPES: readonly PersistedEventSourceType[] = [\n \"manual\",\n \"json-log\",\n \"log4js\",\n \"adapter\",\n \"ai-sdk\",\n \"otel\",\n];\n\nconst PERSISTED_EVENT_STATUSES: readonly PersistedEventStatus[] = [\n \"running\",\n \"ok\",\n \"error\",\n \"unknown\",\n];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0;\n}\n\nfunction isOptionalString(value: unknown): boolean {\n return value === undefined || isString(value);\n}\n\nfunction isNonNegativeNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nfunction isOptionalNonNegativeNumber(value: unknown): boolean {\n return value === undefined || isNonNegativeNumber(value);\n}\n\nfunction isInspectKind(value: unknown): value is InspectKind {\n return (\n typeof value === \"string\" &&\n (INSPECT_KINDS as readonly string[]).includes(value)\n );\n}\n\nfunction isAttributionConfidence(value: unknown): value is AttributionConfidence {\n return (\n typeof value === \"string\" &&\n (ATTRIBUTION_CONFIDENCES as readonly string[]).includes(value)\n );\n}\n\nfunction isPersistedEventSourceType(\n value: unknown,\n): value is PersistedEventSourceType {\n return (\n typeof value === \"string\" &&\n (PERSISTED_EVENT_SOURCE_TYPES as readonly string[]).includes(value)\n );\n}\n\nfunction isPersistedEventStatus(value: unknown): value is PersistedEventStatus {\n return (\n typeof value === \"string\" &&\n (PERSISTED_EVENT_STATUSES as readonly string[]).includes(value)\n );\n}\n\nfunction isPersistedEventSource(value: unknown): value is PersistedEventSource {\n if (!isRecord(value)) return false;\n if (!isPersistedEventSourceType(value.type)) return false;\n if (!isOptionalString(value.name)) return false;\n if (!isOptionalString(value.version)) return false;\n return true;\n}\n\nfunction isPersistedInspectError(value: unknown): value is PersistedInspectError {\n if (!isRecord(value)) return false;\n if (!isNonEmptyString(value.message)) return false;\n if (!isOptionalString(value.name)) return false;\n if (!isOptionalString(value.code)) return false;\n return true;\n}\n\nfunction isPersistedTokenUsage(value: unknown): value is PersistedTokenUsage {\n if (!isRecord(value)) return false;\n if (!isOptionalNonNegativeNumber(value.input)) return false;\n if (!isOptionalNonNegativeNumber(value.output)) return false;\n if (!isOptionalNonNegativeNumber(value.total)) return false;\n if (!isOptionalNonNegativeNumber(value.cached)) return false;\n return true;\n}\n\nfunction isPersistedTraceContext(value: unknown): value is PersistedTraceContext {\n if (!isRecord(value)) return false;\n if (!isOptionalString(value.traceId)) return false;\n if (!isOptionalString(value.spanId)) return false;\n if (!isOptionalString(value.parentSpanId)) return false;\n return true;\n}\n\n/**\n * Runtime guard for a v0.2 or v1.0 {@link PersistedInspectEvent} JSON object.\n *\n * Timestamp fields (`timestamp`, `startedAt`, `endedAt`) are validated as\n * non-empty strings only — stricter ISO-8601 parsing may be added later.\n */\nexport function isPersistedInspectEvent(\n value: unknown,\n): value is PersistedInspectEvent {\n if (!isRecord(value)) return false;\n if (value.schemaVersion !== \"0.2\" && value.schemaVersion !== \"1.0\") {\n return false;\n }\n\n if (!isNonEmptyString(value.eventId)) return false;\n if (!isNonEmptyString(value.runId)) return false;\n if (!isInspectKind(value.kind)) return false;\n if (!isNonEmptyString(value.name)) return false;\n // Non-empty string required; ISO format not validated in this PR.\n if (!isNonEmptyString(value.timestamp)) return false;\n if (!isAttributionConfidence(value.confidence)) return false;\n if (!isPersistedEventSource(value.source)) return false;\n\n if (value.parentId !== undefined && !isNonEmptyString(value.parentId)) {\n return false;\n }\n if (value.status !== undefined && !isPersistedEventStatus(value.status)) {\n return false;\n }\n if (!isOptionalString(value.startedAt)) return false;\n if (!isOptionalString(value.endedAt)) return false;\n if (value.durationMs !== undefined && !isNonNegativeNumber(value.durationMs)) {\n return false;\n }\n if (value.attributes !== undefined && !isRecord(value.attributes)) {\n return false;\n }\n if (value.error !== undefined && !isPersistedInspectError(value.error)) {\n return false;\n }\n if (value.tokenUsage !== undefined && !isPersistedTokenUsage(value.tokenUsage)) {\n return false;\n }\n if (value.trace !== undefined && !isPersistedTraceContext(value.trace)) {\n return false;\n }\n\n return true;\n}\n\nexport function isPersistedInspectEventV02(\n value: unknown,\n): value is PersistedInspectEventV02 {\n return isPersistedInspectEvent(value) && value.schemaVersion === \"0.2\";\n}\n\nexport function isPersistedInspectEventV10(\n value: unknown,\n): value is PersistedInspectEventV10 {\n return isPersistedInspectEvent(value) && value.schemaVersion === \"1.0\";\n}\n","/**\n * v0.2 shared duration utilities.\n *\n * `parseDuration` is used for filters such as \"since\" / \"older-than\".\n * `formatDuration` is used for compact display in CLI and summaries.\n */\n\nexport function parseDuration(duration: string): number {\n const raw = typeof duration === \"string\" ? duration.trim() : \"\";\n const match = raw.match(/^(\\d+)(ms|[smhd])$/);\n if (!match) {\n throw new Error(\n `Invalid duration format: ${duration}. Use a positive integer followed by ms, s, m, h, or d (e.g. 500ms, 30s, 5m, 2h, 7d).`,\n );\n }\n\n const amount = Number.parseInt(match[1], 10);\n const unit = match[2];\n\n if (!Number.isFinite(amount) || amount <= 0) {\n throw new Error(\n `Invalid duration amount: ${duration}. Amount must be a positive integer.`,\n );\n }\n\n switch (unit) {\n case \"ms\":\n return amount;\n case \"s\":\n return amount * 1000;\n case \"m\":\n return amount * 60 * 1000;\n case \"h\":\n return amount * 60 * 60 * 1000;\n case \"d\":\n return amount * 24 * 60 * 60 * 1000;\n default: {\n // Should be unreachable due to regex.\n throw new Error(`Unknown duration unit: ${unit}`);\n }\n }\n}\n\nexport function formatDuration(ms: number): string {\n if (!Number.isFinite(ms)) {\n return \"0ms\";\n }\n if (ms < 0) {\n throw new Error(`formatDuration: ms must be non-negative (got ${ms})`);\n }\n if (ms < 1000) {\n return `${Math.floor(ms)}ms`;\n }\n if (ms < 60_000) {\n return `${(ms / 1000).toFixed(2)}s`;\n }\n if (ms < 3_600_000) {\n return `${(ms / 60_000).toFixed(1)}m`;\n }\n return `${(ms / 3_600_000).toFixed(1)}h`;\n}\n\n","export let urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","import { webcrypto as crypto } from 'node:crypto'\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\nfunction fillPool(bytes) {\n if (bytes < 0 || bytes > 1024) throw new RangeError('Wrong ID size')\n if (!pool || pool.length < bytes) {\n pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n crypto.getRandomValues(pool)\n poolOffset = 0\n } else if (poolOffset + bytes > pool.length) {\n crypto.getRandomValues(pool)\n poolOffset = 0\n }\n poolOffset += bytes\n}\nexport function random(bytes) {\n fillPool((bytes |= 0))\n return pool.subarray(poolOffset - bytes, poolOffset)\n}\nexport function customRandom(alphabet, defaultSize, getRandom) {\n let safeByteCutoff = 256 - (256 % alphabet.length)\n if (safeByteCutoff === 256) {\n let mask = alphabet.length - 1\n return (size = defaultSize) => {\n if (!size) return ''\n let id = ''\n while (true) {\n let bytes = getRandom(size)\n let i = size\n while (i--) {\n id += alphabet[bytes[i] & mask]\n if (id.length >= size) return id\n }\n }\n }\n }\n let step = Math.ceil((1.6 * 256 * defaultSize) / safeByteCutoff)\n return (size = defaultSize) => {\n if (!size) return ''\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let i = step\n while (i--) {\n if (bytes[i] < safeByteCutoff) {\n id += alphabet[bytes[i] % alphabet.length]\n if (id.length >= size) return id\n }\n }\n }\n }\n}\nexport function customAlphabet(alphabet, size = 21) {\n return customRandom(alphabet, size, random)\n}\nexport function nanoid(size = 21) {\n fillPool((size |= 0))\n let id = ''\n for (let i = poolOffset - size; i < poolOffset; i++) {\n id += scopedUrlAlphabet[pool[i] & 63]\n }\n return id\n}\n","import { mkdir } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { nanoid } from \"nanoid\";\n\nimport type { ErrorInfo } from \"./types.js\";\nimport { formatDuration as formatDurationV2 } from \"./utils/duration.js\";\n\n/** Default folder under the user home for AgentInspect data. */\nexport const DEFAULT_TRACE_DIR_NAME = \".agent-inspect\";\n\n/** Subfolder where JSONL run traces are stored. */\nexport const RUNS_DIR_NAME = \"runs\";\n\n/** Writable trace root when the default home path cannot be used. */\nexport const FALLBACK_TRACE_DIR = path.join(\n os.tmpdir(),\n \"agent-inspect\",\n RUNS_DIR_NAME,\n);\n\n/** Maximum display length for run/step names before truncation. */\nexport const MAX_NAME_LENGTH = 100;\n\n/** Returns `run_` + a 10-character nanoid segment. */\nexport function createRunId(): string {\n return `run_${nanoid(10)}`;\n}\n\n/** Returns `step_` + a 10-character nanoid segment. */\nexport function createStepId(): string {\n return `step_${nanoid(10)}`;\n}\n\n/** Formats a duration for CLI display (v0.2 rules). */\nexport function formatDuration(ms: number): string {\n return formatDurationV2(ms);\n}\n\n/**\n * Formats a Unix timestamp (ms) as local `YYYY-MM-DD HH:mm:ss`.\n * Invalid values yield `\"Invalid date\"` (no throw).\n */\nexport function formatTimestamp(timestamp: number): string {\n if (!Number.isFinite(timestamp)) {\n return \"Invalid date\";\n }\n const d = new Date(timestamp);\n if (Number.isNaN(d.getTime())) {\n return \"Invalid date\";\n }\n const y = d.getFullYear();\n const mo = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n const h = String(d.getHours()).padStart(2, \"0\");\n const min = String(d.getMinutes()).padStart(2, \"0\");\n const s = String(d.getSeconds()).padStart(2, \"0\");\n return `${y}-${mo}-${day} ${h}:${min}:${s}`;\n}\n\n/**\n * Default directory for trace files: `~/DEFAULT_TRACE_DIR_NAME/RUNS_DIR_NAME`.\n * Falls back to {@link FALLBACK_TRACE_DIR} when home cannot be resolved.\n */\nexport function getDefaultTraceDir(): string {\n const envDir = process.env.AGENT_INSPECT_TRACE_DIR;\n if (typeof envDir === \"string\" && envDir.trim() !== \"\") {\n return envDir.trim();\n }\n try {\n const home = os.homedir();\n if (typeof home !== \"string\" || home.trim() === \"\") {\n return FALLBACK_TRACE_DIR;\n }\n return path.join(home, DEFAULT_TRACE_DIR_NAME, RUNS_DIR_NAME);\n } catch {\n return FALLBACK_TRACE_DIR;\n }\n}\n\n/**\n * Full path to the JSONL trace file for a run.\n * `runId` is passed through `path.basename` to avoid traversal; empty ids become `run_unknown`.\n */\nexport function getTraceFilePath(runId: string, traceDir?: string): string {\n const baseDir = traceDir ?? getDefaultTraceDir();\n let safeId =\n typeof runId === \"string\" && runId.trim() !== \"\" ? runId.trim() : \"run_unknown\";\n safeId = path.basename(safeId);\n if (safeId === \"\" || safeId === \".\" || safeId === \"..\") {\n safeId = \"run_unknown\";\n }\n return path.join(baseDir, `${safeId}.jsonl`);\n}\n\n/**\n * Ensures a trace directory exists (recursive). Tries {@link FALLBACK_TRACE_DIR} on failure.\n * Returns the directory path that callers should prefer: primary, fallback, or original if both mkdir attempts fail.\n * Emits concise `[AgentInspect]` warnings on failure; never throws.\n */\nexport async function ensureTraceDir(traceDir: string): Promise<string> {\n const primary = path.resolve(traceDir);\n try {\n await mkdir(primary, { recursive: true });\n return primary;\n } catch {\n warn(`Failed to create trace directory: ${primary}`);\n const fallback = path.resolve(FALLBACK_TRACE_DIR);\n try {\n await mkdir(fallback, { recursive: true });\n return fallback;\n } catch {\n warn(`Failed to create fallback trace directory: ${fallback}`);\n return primary;\n }\n }\n}\n\n/**\n * Normalizes any thrown/caught value into {@link ErrorInfo}.\n * Never throws (circular structures and non-JSON values fall back to a generic message).\n */\nexport function formatError(error: unknown): ErrorInfo {\n if (error instanceof Error) {\n const out: ErrorInfo = { message: error.message };\n if (typeof error.stack === \"string\" && error.stack.length > 0) {\n out.stack = error.stack;\n }\n return out;\n }\n if (typeof error === \"string\") {\n return { message: error };\n }\n if (error === null) {\n return { message: \"Unknown error: null\" };\n }\n if (error === undefined) {\n return { message: \"Unknown error: undefined\" };\n }\n if (\n typeof error === \"number\" ||\n typeof error === \"boolean\" ||\n typeof error === \"bigint\"\n ) {\n return { message: String(error) };\n }\n if (typeof error === \"object\") {\n try {\n return { message: JSON.stringify(error) };\n } catch {\n return { message: \"Unknown error\" };\n }\n }\n return { message: \"Unknown error\" };\n}\n\n/**\n * Truncates a display name to `maxLength`, appending `\"...\"` when shortened.\n * Empty or non-string input becomes `\"unnamed\"`.\n */\nexport function truncateName(name: string, maxLength = MAX_NAME_LENGTH): string {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"unnamed\";\n }\n const trimmed = name.trim();\n if (trimmed.length <= maxLength) {\n return trimmed;\n }\n const ellipsis = \"...\";\n const head = Math.max(0, maxLength - ellipsis.length);\n return `${trimmed.slice(0, head)}${ellipsis}`;\n}\n\n/**\n * Instrumentation-only warning to stderr. Not a general-purpose logger.\n * Optional `error` is summarized via {@link formatError} (message only).\n */\nexport function warn(message: string, error?: unknown): void {\n const base = `[AgentInspect] ${message}`;\n if (error === undefined) {\n console.warn(base);\n return;\n }\n console.warn(`${base}: ${formatError(error).message}`);\n}\n","import type { InspectKind } from \"../types/inspect-event.js\";\nimport type {\n ErrorInfo,\n RunStatus,\n StepMetadata,\n StepStatus,\n StepType,\n TraceEvent,\n} from \"../types.js\";\nimport {\n isPersistedInspectEvent,\n type PersistedInspectEvent,\n type PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\n\nexport interface PersistedToTraceEventOptions {\n /**\n * Stable index within the source event list.\n * Used for deterministic timestamps when only one instant is known.\n */\n eventIndex?: number;\n}\n\nfunction parseIsoToMs(iso: string): number {\n const parsed = Date.parse(iso);\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction mapInspectKindToStepType(kind: InspectKind): StepType {\n switch (kind) {\n case \"LLM\":\n return \"llm\";\n case \"TOOL\":\n return \"tool\";\n case \"DECISION\":\n return \"decision\";\n case \"RUN\":\n return \"run\";\n default:\n return \"logic\";\n }\n}\n\nfunction mapPersistedStatusToStepStatus(\n status: PersistedInspectEvent[\"status\"],\n): StepStatus | undefined {\n switch (status) {\n case \"ok\":\n return \"success\";\n case \"error\":\n return \"error\";\n case \"running\":\n return \"running\";\n default:\n return undefined;\n }\n}\n\nfunction mapPersistedStatusToRunStatus(\n status: PersistedInspectEvent[\"status\"],\n): RunStatus | undefined {\n switch (status) {\n case \"ok\":\n return \"success\";\n case \"error\":\n return \"error\";\n case \"running\":\n return \"running\";\n default:\n return undefined;\n }\n}\n\nfunction mapPersistedError(\n error: PersistedInspectEvent[\"error\"],\n attributes: Record<string, unknown> | undefined,\n): ErrorInfo | undefined {\n if (!error?.message) return undefined;\n const out: ErrorInfo = { message: error.message };\n const stack =\n typeof attributes?.errorStack === \"string\" &&\n attributes.errorStack.length > 0\n ? attributes.errorStack\n : undefined;\n if (stack) {\n out.stack = stack;\n }\n return out;\n}\n\nfunction mapTokenUsageToMetadata(\n tokenUsage: PersistedTokenUsage | undefined,\n attributes: Record<string, unknown> | undefined,\n): StepMetadata | undefined {\n const metadata: StepMetadata = {};\n if (attributes?.metadata && typeof attributes.metadata === \"object\") {\n Object.assign(metadata, attributes.metadata as Record<string, unknown>);\n }\n if (tokenUsage) {\n metadata.tokens = {\n ...(tokenUsage.input !== undefined ? { input: tokenUsage.input } : {}),\n ...(tokenUsage.output !== undefined ? { output: tokenUsage.output } : {}),\n ...(tokenUsage.total !== undefined ? { total: tokenUsage.total } : {}),\n ...(tokenUsage.cached !== undefined ? { cached: tokenUsage.cached } : {}),\n };\n }\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction pickRunMetadata(\n attributes: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n if (!attributes) return undefined;\n const metadata =\n attributes.metadata && typeof attributes.metadata === \"object\"\n ? { ...(attributes.metadata as Record<string, unknown>) }\n : {};\n for (const key of [\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n \"groupId\",\n ] as const) {\n const value = attributes[key];\n if (typeof value === \"string\" && value.trim() !== \"\") {\n metadata[key] = value;\n }\n }\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction resolveStepId(event: PersistedInspectEvent): string {\n const attrs = event.attributes;\n if (attrs && typeof attrs.stepId === \"string\" && attrs.stepId.trim() !== \"\") {\n return attrs.stepId;\n }\n return event.eventId;\n}\n\nfunction resolveStepType(event: PersistedInspectEvent): StepType {\n const attrs = event.attributes;\n if (attrs && typeof attrs.stepType === \"string\") {\n const t = attrs.stepType;\n if (\n t === \"run\" ||\n t === \"llm\" ||\n t === \"tool\" ||\n t === \"decision\" ||\n t === \"logic\" ||\n t === \"state\" ||\n t === \"custom\"\n ) {\n return t;\n }\n }\n return mapInspectKindToStepType(event.kind);\n}\n\nfunction resolveTimes(event: PersistedInspectEvent): {\n timestamp: number;\n startTime: number;\n endTime: number;\n} {\n const timestamp = parseIsoToMs(event.timestamp);\n const startTime =\n event.startedAt !== undefined ? parseIsoToMs(event.startedAt) : timestamp;\n let endTime =\n event.endedAt !== undefined ? parseIsoToMs(event.endedAt) : timestamp;\n if (\n event.durationMs !== undefined &&\n Number.isFinite(event.durationMs) &&\n event.durationMs >= 0 &&\n event.endedAt === undefined\n ) {\n endTime = startTime + event.durationMs;\n }\n return { timestamp, startTime, endTime };\n}\n\nfunction fromLegacyRunStarted(event: PersistedInspectEvent): TraceEvent {\n const { timestamp, startTime } = resolveTimes(event);\n const out: Extract<TraceEvent, { event: \"run_started\" }> = {\n schemaVersion: \"0.1\",\n event: \"run_started\",\n timestamp,\n runId: event.runId,\n name: event.name,\n startTime,\n };\n const metadata = pickRunMetadata(event.attributes);\n if (metadata) out.metadata = metadata;\n return out;\n}\n\nfunction fromLegacyRunCompleted(event: PersistedInspectEvent): TraceEvent {\n const { timestamp, endTime } = resolveTimes(event);\n const status = mapPersistedStatusToRunStatus(event.status) ?? \"success\";\n const out: Extract<TraceEvent, { event: \"run_completed\" }> = {\n schemaVersion: \"0.1\",\n event: \"run_completed\",\n timestamp,\n runId: event.runId,\n status: status === \"running\" ? \"success\" : status,\n endTime,\n durationMs: event.durationMs ?? Math.max(0, endTime - timestamp),\n };\n const error = mapPersistedError(event.error, event.attributes);\n if (error) out.error = error;\n return out;\n}\n\nfunction fromLegacyStepStarted(event: PersistedInspectEvent): TraceEvent {\n const { timestamp, startTime } = resolveTimes(event);\n const out: Extract<TraceEvent, { event: \"step_started\" }> = {\n schemaVersion: \"0.1\",\n event: \"step_started\",\n timestamp,\n runId: event.runId,\n stepId: resolveStepId(event),\n name: event.name,\n type: resolveStepType(event),\n startTime,\n };\n if (event.parentId !== undefined) out.parentId = event.parentId;\n const metadata = mapTokenUsageToMetadata(event.tokenUsage, event.attributes);\n if (metadata) out.metadata = metadata;\n return out;\n}\n\nfunction fromLegacyStepCompleted(event: PersistedInspectEvent): TraceEvent {\n const { timestamp, endTime } = resolveTimes(event);\n const status = mapPersistedStatusToStepStatus(event.status) ?? \"success\";\n const out: Extract<TraceEvent, { event: \"step_completed\" }> = {\n schemaVersion: \"0.1\",\n event: \"step_completed\",\n timestamp,\n runId: event.runId,\n stepId: resolveStepId(event),\n status: status === \"running\" ? \"success\" : status,\n endTime,\n durationMs: event.durationMs ?? Math.max(0, endTime - timestamp),\n };\n const error = mapPersistedError(event.error, event.attributes);\n if (error) out.error = error;\n return out;\n}\n\nfunction fromLegacyOutcomeObserved(event: PersistedInspectEvent): TraceEvent {\n const attrs = event.attributes ?? {};\n const observedAtRaw = attrs.observedAt;\n const observedAt =\n typeof observedAtRaw === \"string\"\n ? Date.parse(observedAtRaw)\n : typeof observedAtRaw === \"number\" && Number.isFinite(observedAtRaw)\n ? observedAtRaw\n : resolveTimes(event).timestamp;\n const status = attrs.outcomeStatus;\n const out: Extract<TraceEvent, { event: \"outcome_observed\" }> = {\n schemaVersion: \"0.1\",\n event: \"outcome_observed\",\n timestamp: observedAt,\n runId: event.runId,\n outcomeId:\n typeof attrs.outcomeId === \"string\" ? attrs.outcomeId : event.eventId,\n name: event.name,\n expectation:\n typeof attrs.expectation === \"string\" ? attrs.expectation : event.name,\n status:\n status === \"passed\" ||\n status === \"failed\" ||\n status === \"unknown\" ||\n status === \"skipped\"\n ? status\n : \"unknown\",\n observedAt,\n };\n if (event.parentId !== undefined) out.parentId = event.parentId;\n if (typeof attrs.method === \"string\") out.method = attrs.method as never;\n if (attrs.actual !== undefined) out.actual = attrs.actual;\n if (event.outputSummary !== undefined) out.actual = event.outputSummary;\n if (attrs.evidence !== undefined) out.evidence = attrs.evidence;\n return out;\n}\n\nfunction fromNativeOutcome(event: PersistedInspectEvent): TraceEvent[] {\n return [fromLegacyOutcomeObserved(event)];\n}\n\nfunction fromNativeRun(event: PersistedInspectEvent): TraceEvent[] {\n const { timestamp, startTime, endTime } = resolveTimes(event);\n const runStatus = mapPersistedStatusToRunStatus(event.status);\n const out: TraceEvent[] = [];\n\n if (runStatus === \"running\" || event.startedAt !== undefined) {\n const started: Extract<TraceEvent, { event: \"run_started\" }> = {\n schemaVersion: \"0.1\",\n event: \"run_started\",\n timestamp,\n runId: event.runId,\n name: event.name,\n startTime,\n };\n const metadata = pickRunMetadata(event.attributes);\n if (metadata) started.metadata = metadata;\n out.push(started);\n }\n\n if (runStatus === \"success\" || runStatus === \"error\" || event.endedAt !== undefined) {\n const completed: Extract<TraceEvent, { event: \"run_completed\" }> = {\n schemaVersion: \"0.1\",\n event: \"run_completed\",\n timestamp,\n runId: event.runId,\n status: runStatus === \"error\" ? \"error\" : \"success\",\n endTime,\n durationMs: event.durationMs ?? Math.max(0, endTime - startTime),\n };\n const error = mapPersistedError(event.error, event.attributes);\n if (error) completed.error = error;\n out.push(completed);\n }\n\n if (out.length === 0) {\n out.push(fromLegacyRunStarted(event));\n }\n\n return out;\n}\n\nfunction fromNativeStep(event: PersistedInspectEvent): TraceEvent[] {\n const { timestamp, startTime, endTime } = resolveTimes(event);\n const stepStatus = mapPersistedStatusToStepStatus(event.status);\n const stepId = resolveStepId(event);\n const out: TraceEvent[] = [];\n\n const shouldEmitStarted =\n stepStatus === \"running\" ||\n event.startedAt !== undefined ||\n stepStatus === \"success\" ||\n stepStatus === \"error\";\n\n if (shouldEmitStarted) {\n const started: Extract<TraceEvent, { event: \"step_started\" }> = {\n schemaVersion: \"0.1\",\n event: \"step_started\",\n timestamp,\n runId: event.runId,\n stepId,\n name: event.name,\n type: resolveStepType(event),\n startTime,\n };\n if (event.parentId !== undefined) started.parentId = event.parentId;\n const metadata = mapTokenUsageToMetadata(event.tokenUsage, event.attributes);\n if (metadata) started.metadata = metadata;\n out.push(started);\n }\n\n if (\n stepStatus === \"success\" ||\n stepStatus === \"error\" ||\n event.endedAt !== undefined ||\n event.durationMs !== undefined\n ) {\n const completed: Extract<TraceEvent, { event: \"step_completed\" }> = {\n schemaVersion: \"0.1\",\n event: \"step_completed\",\n timestamp,\n runId: event.runId,\n stepId,\n status: stepStatus === \"error\" ? \"error\" : \"success\",\n endTime,\n durationMs: event.durationMs ?? Math.max(0, endTime - startTime),\n };\n const error = mapPersistedError(event.error, event.attributes);\n if (error) completed.error = error;\n out.push(completed);\n }\n\n if (out.length === 0) {\n out.push(fromLegacyStepStarted(event));\n }\n\n return out;\n}\n\n/**\n * Maps one v0.2 {@link PersistedInspectEvent} to zero or more v0.1 {@link TraceEvent} rows\n * for inspection commands. Does not mutate `event`.\n */\nexport function persistedInspectEventToTraceEvents(\n event: PersistedInspectEvent,\n): TraceEvent[] {\n if (!isPersistedInspectEvent(event)) {\n throw new Error(\"Invalid PersistedInspectEvent: failed isPersistedInspectEvent\");\n }\n\n const legacyEvent = event.attributes?.legacyEvent;\n if (legacyEvent === \"run_started\") return [fromLegacyRunStarted(event)];\n if (legacyEvent === \"run_completed\") return [fromLegacyRunCompleted(event)];\n if (legacyEvent === \"step_started\") return [fromLegacyStepStarted(event)];\n if (legacyEvent === \"step_completed\") return [fromLegacyStepCompleted(event)];\n if (legacyEvent === \"outcome_observed\") return [fromLegacyOutcomeObserved(event)];\n\n if (event.kind === \"RUN\") {\n return fromNativeRun(event);\n }\n\n if (event.kind === \"OUTCOME\") {\n return fromNativeOutcome(event);\n }\n\n return fromNativeStep(event);\n}\n\n/**\n * Maps persisted v0.2 events to v0.1 trace events for inspection.\n */\nexport function persistedInspectEventsToTraceEvents(\n events: readonly PersistedInspectEvent[],\n options?: PersistedToTraceEventOptions,\n): TraceEvent[] {\n const out: TraceEvent[] = [];\n events.forEach((event, index) => {\n const rows = persistedInspectEventToTraceEvents(event);\n if (rows.length === 0 && options?.eventIndex !== undefined) {\n void options.eventIndex;\n void index;\n }\n out.push(...rows);\n });\n return out;\n}\n","import type { RedactionRule } from \"./types/log-config.js\";\n\n/**\n * Discriminator for what kind of work a {@link Step} represents.\n * `\"decision\"` captures agent branching/choices; other values cover runs, LLM calls, tools, and user-defined steps.\n */\nexport type StepType =\n | \"run\"\n | \"llm\"\n | \"tool\"\n | \"decision\"\n | \"logic\"\n | \"state\"\n | \"custom\";\n\n/** Lifecycle state of a single {@link Step}. */\nexport type StepStatus = \"running\" | \"success\" | \"error\";\n\n/** Lifecycle state of an entire {@link Run}. */\nexport type RunStatus = \"running\" | \"success\" | \"error\";\n\n/** Structured error attached to a run or step when status is `\"error\"`. */\nexport interface ErrorInfo {\n message: string;\n stack?: string;\n}\n\n/**\n * Optional token counts for a step (e.g. LLM usage).\n * Reserved for future roadmap; MVP does not compute or persist token usage.\n */\nexport interface TokenMetadata {\n input?: number;\n output?: number;\n total?: number;\n cached?: number;\n}\n\n/** Arbitrary structured fields for a step; safe extensions use string keys. */\nexport interface StepMetadata {\n model?: string;\n toolName?: string;\n tokens?: TokenMetadata;\n retryCount?: number;\n [key: string]: unknown;\n}\n\n/**\n * One traced agent run (root of an execution tree).\n * MVP intentionally omits `input` / `output` on the run to limit PII, secrets, and serialization risk.\n */\nexport interface Run {\n id: string;\n name: string;\n status: RunStatus;\n startTime: number;\n endTime?: number;\n durationMs?: number;\n error?: ErrorInfo;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * One node in the execution tree under a {@link Run}.\n * MVP intentionally omits `input` / `output`; capture/redaction may come in a later version.\n */\nexport interface Step {\n id: string;\n runId: string;\n parentId?: string;\n name: string;\n type: StepType;\n status: StepStatus;\n startTime: number;\n endTime?: number;\n durationMs?: number;\n error?: ErrorInfo;\n metadata?: StepMetadata;\n}\n\n/** Version of the JSONL trace line schema consumed by AgentInspect tooling. */\nexport type TraceSchemaVersion = \"0.1\";\n\n/**\n * Status for lightweight trace metadata extraction.\n * `\"unknown\"` means the file contained valid events but a run status could not be determined safely.\n */\nexport type TraceMetadataStatus = \"success\" | \"error\" | \"running\" | \"unknown\";\n\nexport interface TraceMetadata {\n runId: string;\n name?: string;\n status: TraceMetadataStatus;\n startedAt?: number;\n endedAt?: number;\n durationMs?: number;\n eventCount: number;\n filePath: string;\n fileSize: number;\n createdAt: Date;\n}\n\nexport interface RunSummary {\n runId: string;\n name?: string;\n status: TraceMetadataStatus;\n durationMs?: number;\n totalSteps: number;\n llmSteps: number;\n toolSteps: number;\n logicSteps: number;\n errorSteps: number;\n maxDepth: number;\n longestStep?: {\n name: string;\n durationMs: number;\n type: string;\n };\n totalTokens?: {\n input: number;\n output: number;\n /** Present only when every token-bearing step has a supplied or derivable total. */\n total?: number;\n /** Sum of supplied cached counts; cached is not added to total. */\n cached?: number;\n };\n}\n\n/** Fields shared by every persisted trace event line. */\nexport interface TraceEventBase {\n schemaVersion: TraceSchemaVersion;\n event: string;\n timestamp: number;\n}\n\n/** Emitted when a run begins. */\nexport interface RunStartedEvent extends TraceEventBase {\n event: \"run_started\";\n runId: string;\n name: string;\n startTime: number;\n metadata?: Record<string, unknown>;\n}\n\n/** Emitted when a run finishes successfully or with an error. */\nexport interface RunCompletedEvent extends TraceEventBase {\n event: \"run_completed\";\n runId: string;\n status: \"success\" | \"error\";\n endTime: number;\n durationMs: number;\n error?: ErrorInfo;\n}\n\n/** Emitted when a step begins (including nested steps under `parentId`). */\nexport interface StepStartedEvent extends TraceEventBase {\n event: \"step_started\";\n runId: string;\n stepId: string;\n parentId?: string;\n name: string;\n type: StepType;\n startTime: number;\n metadata?: StepMetadata;\n}\n\n/**\n * Emitted when a step finishes (success or failure).\n * Failures use `status: \"error\"` and optional {@link ErrorInfo}; there is no separate `step_failed` event in MVP.\n */\nexport interface StepCompletedEvent extends TraceEventBase {\n event: \"step_completed\";\n runId: string;\n stepId: string;\n status: \"success\" | \"error\";\n endTime: number;\n durationMs: number;\n error?: ErrorInfo;\n}\n\n/** Emitted when an external-world outcome is observed (v4.4+). */\nexport interface OutcomeObservedEvent extends TraceEventBase {\n event: \"outcome_observed\";\n runId: string;\n outcomeId: string;\n parentId?: string;\n name: string;\n expectation: string;\n status: \"passed\" | \"failed\" | \"unknown\" | \"skipped\";\n method?:\n | \"dom\"\n | \"accessibility\"\n | \"snapshot\"\n | \"network\"\n | \"storage\"\n | \"filesystem\"\n | \"database\"\n | \"queue\"\n | \"custom\";\n actual?: unknown;\n evidence?: unknown;\n observedAt: number;\n}\n\n/** Discriminated union of all MVP trace events written as JSONL lines. */\nexport type TraceEvent =\n | RunStartedEvent\n | RunCompletedEvent\n | StepStartedEvent\n | StepCompletedEvent\n | OutcomeObservedEvent;\n\n/** Named redaction presets for trace writing and share-safe exports (v1.3.0+). */\nexport type RedactionProfile = \"local\" | \"share\" | \"strict\";\n\n/** Optional correlation fields for grouping and cross-run tracing (v1.3.0+). */\nexport interface TraceCorrelationMetadata {\n correlationId?: string;\n requestId?: string;\n decisionId?: string;\n groupId?: string;\n}\n\n/** Options for `inspectRun()` and `maybeInspectRun()`. */\nexport interface InspectRunOptions extends TraceCorrelationMetadata {\n traceDir?: string;\n silent?: boolean;\n metadata?: Record<string, unknown>;\n /**\n * When `false`, runs `fn` with no trace file, no execution context, and no terminal output.\n * Omitted or `true` preserves default tracing behavior.\n */\n enabled?: boolean;\n /**\n * Redact sensitive metadata keys before writing JSONL. Default `true` (conservative keys).\n * Pass `false` to persist metadata as-is (explicit opt-out).\n */\n redact?: boolean | { rules?: RedactionRule[] };\n /**\n * Redaction preset for trace metadata. Default `local` (same keys as default redaction).\n * `share` and `strict` add extra key-based redaction and tighter string bounds.\n * Ignored when `redact: false`.\n */\n redactionProfile?: RedactionProfile;\n /** Max UTF-8 bytes for a serialized trace event line. Default 65536. */\n maxEventBytes?: number;\n /** Max length for string metadata values (non-preview keys). Default 2000. */\n maxMetadataValueLength?: number;\n /** Max length for preview-like metadata keys (contains `preview`). Default 500. */\n maxPreviewLength?: number;\n}\n\n/** Options passed when opening a logical step (implemented in a later step). */\nexport interface StepOptions {\n type?: StepType;\n metadata?: StepMetadata;\n}\n\n/** Options for `observe()` — same surface as {@link InspectRunOptions} in MVP. */\nexport type ObserveOptions = InspectRunOptions;\n\n/**\n * Resolved settings for the active run while tracing is enabled.\n * Populated by runtime code in a later step; defined here for `context.ts`.\n */\nexport interface ExecutionContext {\n runId: string;\n runName: string;\n traceDir: string;\n silent: boolean;\n metadata?: Record<string, unknown>;\n}\n\n/** Stack position of the step currently executing (used by future context tracking). */\nexport interface ActiveStepContext {\n stepId: string;\n parentId?: string;\n depth: number;\n}\n\nconst STEP_TYPES: readonly StepType[] = [\n \"run\",\n \"llm\",\n \"tool\",\n \"decision\",\n \"logic\",\n \"state\",\n \"custom\",\n] as const;\n\nconst STEP_STATUSES: readonly StepStatus[] = [\n \"running\",\n \"success\",\n \"error\",\n] as const;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** Returns true if `value` is one of the MVP {@link StepType} literals. */\nexport function isStepType(value: unknown): value is StepType {\n return (\n typeof value === \"string\" &&\n (STEP_TYPES as readonly string[]).includes(value)\n );\n}\n\n/** Returns true if `value` is one of the MVP {@link StepStatus} literals. */\nexport function isStepStatus(value: unknown): value is StepStatus {\n return (\n typeof value === \"string\" &&\n (STEP_STATUSES as readonly string[]).includes(value)\n );\n}\n\n/**\n * Narrowing guard for a {@link TraceEvent} object with required MVP fields.\n * Does not deeply validate optional `metadata` shapes.\n */\nexport function isTraceEvent(value: unknown): value is TraceEvent {\n if (!isRecord(value)) return false;\n if (value.schemaVersion !== \"0.1\") return false;\n if (typeof value.timestamp !== \"number\") return false;\n if (typeof value.event !== \"string\") return false;\n\n switch (value.event) {\n case \"run_started\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.name === \"string\" &&\n typeof value.startTime === \"number\"\n );\n }\n case \"run_completed\": {\n return (\n typeof value.runId === \"string\" &&\n (value.status === \"success\" || value.status === \"error\") &&\n typeof value.endTime === \"number\" &&\n typeof value.durationMs === \"number\"\n );\n }\n case \"step_started\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.stepId === \"string\" &&\n typeof value.name === \"string\" &&\n isStepType(value.type) &&\n typeof value.startTime === \"number\"\n );\n }\n case \"step_completed\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.stepId === \"string\" &&\n (value.status === \"success\" || value.status === \"error\") &&\n typeof value.endTime === \"number\" &&\n typeof value.durationMs === \"number\"\n );\n }\n case \"outcome_observed\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.outcomeId === \"string\" &&\n typeof value.name === \"string\" &&\n typeof value.expectation === \"string\" &&\n (value.status === \"passed\" ||\n value.status === \"failed\" ||\n value.status === \"unknown\" ||\n value.status === \"skipped\") &&\n typeof value.observedAt === \"number\"\n );\n }\n default:\n return false;\n }\n}\n","import { persistedInspectEventToTraceEvents } from \"./persisted/to-trace-event.js\";\nimport { isPersistedInspectEvent } from \"./types/persisted-inspect-event.js\";\nimport type { PersistedInspectEvent } from \"./types/persisted-inspect-event.js\";\nimport { isTraceEvent } from \"./types.js\";\nimport type { TraceEvent } from \"./types.js\";\nimport { warn } from \"./utils.js\";\n\nexport type TraceJsonlFormat = \"0.1\" | \"0.2\" | \"1.0\" | \"mixed\" | \"empty\";\n\nexport type ParsedTraceJsonlRow =\n | { format: \"0.1\"; event: TraceEvent; sourceLine: number }\n | { format: \"0.2\"; event: PersistedInspectEvent; sourceLine: number }\n | { format: \"1.0\"; event: PersistedInspectEvent; sourceLine: number };\n\nexport interface ParseTraceJsonlResult {\n format: TraceJsonlFormat;\n /** Count of valid source JSONL rows before any one-to-many normalization. */\n sourceEventCount: number;\n events: TraceEvent[];\n persisted: PersistedInspectEvent[];\n /** Valid source rows in JSONL order, before cross-version normalization. */\n rows: ParsedTraceJsonlRow[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction detectLineFormat(parsed: unknown): \"0.1\" | \"0.2\" | \"1.0\" | \"unknown\" {\n if (!isRecord(parsed)) return \"unknown\";\n if (parsed.schemaVersion === \"0.1\") return \"0.1\";\n if (parsed.schemaVersion === \"0.2\") return \"0.2\";\n if (parsed.schemaVersion === \"1.0\") return \"1.0\";\n return \"unknown\";\n}\n\nexport interface ParseTraceJsonlOptions {\n validate?: (value: unknown) => value is TraceEvent;\n /** Emit parse warnings through the standard AgentInspect warning channel (default true). */\n warnings?: boolean;\n}\n\n/**\n * Parses JSONL content into normalized v0.1 {@link TraceEvent} rows.\n * Accepts homogenous v0.1, v0.2, or v1.0 files; mixed files are converted with a warning.\n */\nexport function parseTraceJsonl(\n raw: string,\n options: ParseTraceJsonlOptions = {},\n): ParseTraceJsonlResult {\n const validate = options.validate ?? isTraceEvent;\n const emitWarning = (message: string): void => {\n if (options.warnings !== false) warn(message);\n };\n const persisted: PersistedInspectEvent[] = [];\n const traceEvents: TraceEvent[] = [];\n const rows: ParsedTraceJsonlRow[] = [];\n let sourceEventCount = 0;\n let saw01 = false;\n let saw02 = false;\n let saw10 = false;\n let lineNumber = 0;\n\n for (const line of raw.split(/\\r?\\n/)) {\n lineNumber += 1;\n const trimmed = line.trim();\n if (trimmed === \"\") continue;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed) as unknown;\n } catch {\n emitWarning(\"Skipped invalid JSON line in trace file\");\n continue;\n }\n\n const format = detectLineFormat(parsed);\n if (format === \"0.1\") {\n saw01 = true;\n if (validate(parsed)) {\n sourceEventCount += 1;\n traceEvents.push(parsed);\n rows.push({ format: \"0.1\", event: parsed, sourceLine: lineNumber });\n } else {\n emitWarning(\"Skipped invalid trace event line in trace file\");\n }\n continue;\n }\n\n if (format === \"0.2\" || format === \"1.0\") {\n if (format === \"0.2\") saw02 = true;\n else saw10 = true;\n if (isPersistedInspectEvent(parsed)) {\n sourceEventCount += 1;\n persisted.push(parsed);\n rows.push({ format, event: parsed, sourceLine: lineNumber });\n traceEvents.push(...persistedInspectEventToTraceEvents(parsed));\n } else {\n emitWarning(\"Skipped invalid persisted inspect event line in trace file\");\n }\n continue;\n }\n\n emitWarning(\"Skipped trace line with unknown schemaVersion\");\n }\n\n const seenFormats = [saw01, saw02, saw10].filter(Boolean).length;\n if (seenFormats > 1) {\n emitWarning(\n \"Trace file mixes AgentInspect schemaVersion rows; normalizing all rows\",\n );\n }\n\n let format: TraceJsonlFormat = \"empty\";\n if (seenFormats > 1) format = \"mixed\";\n else if (saw01) format = \"0.1\";\n else if (saw02) format = \"0.2\";\n else if (saw10) format = \"1.0\";\n\n return { format, sourceEventCount, events: traceEvents, persisted, rows };\n}\n\n/**\n * Returns a user-facing message when a trace file uses an unsupported schema version.\n */\nexport function unknownTraceFormatMessage(): string {\n return (\n \"Unsupported trace format. Expected schemaVersion 0.1 (TraceEvent), 0.2 (PersistedInspectEvent), or 1.0 (PersistedInspectEvent).\"\n );\n}\n","import crypto from \"node:crypto\";\n\nimport type { RedactionRule } from \"../types/log-config.js\";\n\nexport const DEFAULT_REDACT_KEYS = [\n \"authorization\",\n \"cookie\",\n \"token\",\n \"apiKey\",\n \"password\",\n \"secret\",\n \"email\",\n] as const;\n\nexport interface RedactorOptions {\n rules?: RedactionRule[];\n /** Additional exact keys (case-insensitive) to redact in addition to defaults. */\n extraKeys?: readonly string[];\n}\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction toKey(s: string): string {\n return s.toLowerCase();\n}\n\nfunction stableHash(value: string): string {\n const h = crypto.createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n return h.slice(0, 8);\n}\n\ntype CompiledRule =\n | { key: string; strategy: \"full\" }\n | { key: string; strategy: \"prefix\"; keep: number }\n | { key: string; strategy: \"hash\" };\n\nfunction compileRules(\n rules?: RedactionRule[],\n extraKeys?: readonly string[],\n): CompiledRule[] {\n const out = new Map<string, CompiledRule>();\n\n const set = (r: CompiledRule) => {\n const k = toKey(r.key);\n out.set(k, { ...r, key: k } as CompiledRule);\n };\n\n for (const k of DEFAULT_REDACT_KEYS) {\n set({ key: k, strategy: \"full\" });\n }\n\n for (const k of extraKeys ?? []) {\n if (typeof k === \"string\" && k.length > 0) {\n set({ key: k, strategy: \"full\" });\n }\n }\n\n for (const r of rules ?? []) {\n if (typeof r === \"string\") {\n set({ key: r, strategy: \"full\" });\n continue;\n }\n const key = r.key;\n if (r.strategy === \"full\") set({ key, strategy: \"full\" });\n if (r.strategy === \"hash\") set({ key, strategy: \"hash\" });\n if (r.strategy === \"prefix\") {\n set({ key, strategy: \"prefix\", keep: typeof r.keep === \"number\" ? r.keep : 8 });\n }\n }\n\n return [...out.values()];\n}\n\nexport class Redactor {\n readonly #rules: CompiledRule[];\n\n constructor(options?: RedactorOptions) {\n this.#rules = compileRules(options?.rules, options?.extraKeys);\n }\n\n redactValue(key: string, value: unknown): unknown {\n const k = toKey(key);\n const rule = this.#rules.find((r) => r.key === k);\n if (!rule) {\n return this.#redactNested(value);\n }\n\n if (rule.strategy === \"full\") return \"[REDACTED]\";\n const asString =\n typeof value === \"string\"\n ? value\n : typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\"\n ? String(value)\n : undefined;\n\n if (rule.strategy === \"prefix\") {\n if (asString === undefined) return \"[REDACTED]\";\n const keep = Math.max(0, Math.floor(rule.keep));\n return asString.length <= keep ? `${asString}…` : `${asString.slice(0, keep)}…`;\n }\n\n if (rule.strategy === \"hash\") {\n if (asString === undefined) return \"[HASH:unknown]\";\n return `[HASH:${stableHash(asString)}]`;\n }\n\n return this.#redactNested(value);\n }\n\n redactRecord(record: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(record)) {\n out[k] = this.redactValue(k, v);\n }\n return out;\n }\n\n #redactNested(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((v) => this.#redactNested(v));\n }\n if (isRecord(value)) {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n out[k] = this.redactValue(k, v);\n }\n return out;\n }\n return value;\n }\n}\n\n","import type { RedactionProfile } from \"./types.js\";\n\n/** Extra keys redacted under the `share` profile (in addition to {@link DEFAULT_REDACT_KEYS}). */\nexport const SHARE_PROFILE_EXTRA_KEYS = [\n \"userEmail\",\n \"customerEmail\",\n \"phone\",\n \"phoneNumber\",\n \"address\",\n \"ip\",\n \"ipAddress\",\n \"sessionId\",\n \"requestId\",\n \"correlationId\",\n \"decisionId\",\n \"groupId\",\n \"customerId\",\n \"userId\",\n \"accountId\",\n \"tenantId\",\n \"orgId\",\n \"organizationId\",\n \"traceId\",\n \"spanId\",\n \"parentSpanId\",\n] as const;\n\n/** Extra keys redacted under the `strict` profile (in addition to share keys). */\nexport const STRICT_PROFILE_EXTRA_KEYS = [\n \"prompt\",\n \"completion\",\n \"input\",\n \"output\",\n \"inputPreview\",\n \"outputPreview\",\n \"message\",\n \"messages\",\n \"transcript\",\n \"context\",\n \"document\",\n \"documents\",\n \"chunk\",\n \"chunks\",\n \"retrieval\",\n \"query\",\n] as const;\n\nexport interface ResolvedRedactionProfile {\n profile: RedactionProfile;\n extraKeys: readonly string[];\n maxMetadataValueLengthCap?: number;\n maxPreviewLengthCap?: number;\n}\n\n/** Resolves named profile behavior (keys + metadata string caps). */\nexport function resolveRedactionProfile(\n profile: RedactionProfile = \"local\",\n): ResolvedRedactionProfile {\n switch (profile) {\n case \"local\":\n return { profile: \"local\", extraKeys: [] };\n case \"share\":\n return {\n profile: \"share\",\n extraKeys: SHARE_PROFILE_EXTRA_KEYS,\n maxMetadataValueLengthCap: 500,\n maxPreviewLengthCap: 200,\n };\n case \"strict\":\n return {\n profile: \"strict\",\n extraKeys: [...SHARE_PROFILE_EXTRA_KEYS, ...STRICT_PROFILE_EXTRA_KEYS],\n maxMetadataValueLengthCap: 200,\n maxPreviewLengthCap: 80,\n };\n default:\n return { profile: \"local\", extraKeys: [] };\n }\n}\n\nfunction isPreviewKey(key: string): boolean {\n return key.toLowerCase().includes(\"preview\");\n}\n\n/**\n * Applies profile metadata string caps. User-provided lower limits are preserved.\n */\nexport function applyProfileMetadataCaps(\n maxMetadataValueLength: number,\n maxPreviewLength: number,\n resolved: ResolvedRedactionProfile,\n): { maxMetadataValueLength: number; maxPreviewLength: number } {\n let meta = maxMetadataValueLength;\n let preview = maxPreviewLength;\n\n if (resolved.maxMetadataValueLengthCap !== undefined) {\n meta = Math.min(meta, resolved.maxMetadataValueLengthCap);\n }\n if (resolved.maxPreviewLengthCap !== undefined) {\n preview = Math.min(preview, resolved.maxPreviewLengthCap);\n }\n\n return { maxMetadataValueLength: meta, maxPreviewLength: preview };\n}\n\nexport function truncateStringForProfile(\n value: string,\n key: string,\n maxMetadataValueLength: number,\n maxPreviewLength: number,\n): string {\n const max = isPreviewKey(key) ? maxPreviewLength : maxMetadataValueLength;\n if (max <= 0) return \"…\";\n if (value.length <= max) return value;\n return `${value.slice(0, max)}…`;\n}\n","import { appendFile, readdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type { TraceEvent } from \"./types.js\";\nimport { isStepType } from \"./types.js\";\nimport {\n DEFAULT_MAX_EVENT_BYTES,\n prepareTraceEventForDisk,\n resolveTraceSafetyOptions,\n} from \"./trace-event-safety.js\";\nimport { parseTraceJsonl } from \"./read-trace.js\";\nimport {\n ensureTraceDir,\n FALLBACK_TRACE_DIR,\n getTraceFilePath,\n warn,\n} from \"./utils.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim() !== \"\";\n}\n\nfunction finiteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction optionalErrorInfo(value: unknown): boolean {\n if (value === undefined) return true;\n if (!isRecord(value)) return false;\n if (typeof value.message !== \"string\") return false;\n if (\"stack\" in value && value.stack !== undefined) {\n if (typeof value.stack !== \"string\") return false;\n }\n return true;\n}\n\n/**\n * Strict MVP validation before writing JSONL. Rejects empty ids, non-finite times, and malformed payloads.\n */\nexport function validateEvent(event: unknown): event is TraceEvent {\n if (!isRecord(event)) return false;\n if (event.schemaVersion !== \"0.1\") return false;\n if (!finiteNumber(event.timestamp)) return false;\n if (typeof event.event !== \"string\") return false;\n\n switch (event.event) {\n case \"run_started\": {\n if (\n !nonEmptyString(event.runId) ||\n !nonEmptyString(event.name) ||\n !finiteNumber(event.startTime)\n ) {\n return false;\n }\n if (event.metadata !== undefined && !isRecord(event.metadata)) {\n return false;\n }\n return true;\n }\n case \"run_completed\": {\n return (\n nonEmptyString(event.runId) &&\n (event.status === \"success\" || event.status === \"error\") &&\n finiteNumber(event.endTime) &&\n finiteNumber(event.durationMs) &&\n optionalErrorInfo(event.error)\n );\n }\n case \"step_started\": {\n if (\n !nonEmptyString(event.runId) ||\n !nonEmptyString(event.stepId) ||\n !nonEmptyString(event.name) ||\n !isStepType(event.type) ||\n !finiteNumber(event.startTime)\n ) {\n return false;\n }\n if (event.parentId !== undefined && typeof event.parentId !== \"string\") {\n return false;\n }\n if (event.metadata !== undefined && !isRecord(event.metadata)) {\n return false;\n }\n return true;\n }\n case \"step_completed\": {\n return (\n nonEmptyString(event.runId) &&\n nonEmptyString(event.stepId) &&\n (event.status === \"success\" || event.status === \"error\") &&\n finiteNumber(event.endTime) &&\n finiteNumber(event.durationMs) &&\n optionalErrorInfo(event.error)\n );\n }\n case \"outcome_observed\": {\n return (\n nonEmptyString(event.runId) &&\n nonEmptyString(event.outcomeId) &&\n nonEmptyString(event.name) &&\n nonEmptyString(event.expectation) &&\n (event.status === \"passed\" ||\n event.status === \"failed\" ||\n event.status === \"unknown\" ||\n event.status === \"skipped\") &&\n finiteNumber(event.observedAt)\n );\n }\n default:\n return false;\n }\n}\n\n/** Serializes a trace line as compact JSON without a trailing newline. */\nexport function serializeEvent(event: TraceEvent): string {\n try {\n return JSON.stringify(event);\n } catch {\n return \"\";\n }\n}\n\n/**\n * Creates (or truncates) an empty JSONL file for a run. Uses {@link ensureTraceDir} then {@link getTraceFilePath}.\n * On failure, retries once under {@link FALLBACK_TRACE_DIR}.\n */\nexport async function initializeTraceFile(\n runId: string,\n traceDir: string,\n): Promise<string | undefined> {\n try {\n const usable = await ensureTraceDir(traceDir);\n const filePath = getTraceFilePath(runId, usable);\n await writeFile(filePath, \"\", \"utf-8\");\n return filePath;\n } catch (e) {\n warn(\"Failed to initialize trace file\", e);\n }\n\n try {\n const usable = await ensureTraceDir(FALLBACK_TRACE_DIR);\n const filePath = getTraceFilePath(runId, usable);\n await writeFile(filePath, \"\", \"utf-8\");\n return filePath;\n } catch (e) {\n warn(\"Failed to initialize trace file on fallback directory\", e);\n return undefined;\n }\n}\n\n/**\n * Appends one validated JSONL line for `event.runId`. Falls back to {@link FALLBACK_TRACE_DIR} on append failure.\n */\nfunction ensureEventWithinBounds(event: TraceEvent): TraceEvent {\n const line = serializeEvent(event);\n if (line === \"\") return event;\n const bytes = Buffer.byteLength(line, \"utf8\");\n if (bytes <= DEFAULT_MAX_EVENT_BYTES) return event;\n return prepareTraceEventForDisk(event, resolveTraceSafetyOptions());\n}\n\nexport async function writeTraceEvent(\n event: TraceEvent,\n traceDir: string,\n): Promise<void> {\n const bounded = ensureEventWithinBounds(event);\n\n if (!validateEvent(bounded)) {\n warn(\"Skipped invalid trace event (validation failed)\");\n return;\n }\n\n const line = serializeEvent(bounded);\n if (line === \"\") {\n warn(\"Skipped trace event (serialization failed)\");\n return;\n }\n\n const payload = `${line}\\n`;\n\n const tryAppend = async (dir: string): Promise<boolean> => {\n try {\n const usable = await ensureTraceDir(dir);\n const filePath = getTraceFilePath(event.runId, usable);\n await appendFile(filePath, payload, \"utf-8\");\n return true;\n } catch {\n return false;\n }\n };\n\n if (await tryAppend(traceDir)) {\n return;\n }\n\n warn(`Failed to append trace event for run ${event.runId}`);\n\n if (await tryAppend(FALLBACK_TRACE_DIR)) {\n return;\n }\n\n warn(\"Failed to append trace event to fallback directory\");\n}\n\n/**\n * Reads raw JSONL file contents for a run, or `undefined` if missing or unreadable.\n */\nexport async function readTraceFile(\n runId: string,\n traceDir: string,\n): Promise<string | undefined> {\n try {\n const filePath = getTraceFilePath(runId, traceDir);\n return await readFile(filePath, \"utf-8\");\n } catch (e) {\n if (e && typeof e === \"object\" && \"code\" in e && e.code === \"ENOENT\") {\n return undefined;\n }\n warn(\"Unexpected error reading trace file\", e);\n return undefined;\n }\n}\n\n/**\n * Parses JSONL into validated {@link TraceEvent} rows (v0.1 native or v0.2 normalized).\n * Invalid lines are skipped with a warning.\n */\nexport async function readTraceEvents(\n runId: string,\n traceDir: string,\n): Promise<TraceEvent[]> {\n try {\n const filePath = getTraceFilePath(runId, traceDir);\n return await readTraceEventsFromFile(filePath);\n } catch (e) {\n warn(\"Failed to read trace events\", e);\n return [];\n }\n}\n\n/**\n * Reads and normalizes trace events from an exact file path.\n * Used by directory scans where the embedded run id may differ from the basename.\n */\nexport async function readTraceEventsFromFile(\n filePath: string,\n): Promise<TraceEvent[]> {\n try {\n const raw = await readFile(filePath, \"utf-8\");\n return parseTraceJsonl(raw, { validate: validateEvent }).events;\n } catch (e) {\n if (e && typeof e === \"object\" && \"code\" in e && e.code === \"ENOENT\") {\n return [];\n }\n warn(\"Failed to read trace events from file\", e);\n return [];\n }\n}\n\n/**\n * Lists `.jsonl` file names in `traceDir`, newest by mtime first (name sort as tie-breaker).\n */\nexport async function listTraceFiles(traceDir: string): Promise<string[]> {\n try {\n const usable = path.resolve(traceDir);\n const names = await readdir(usable);\n const jsonl = names.filter((n) => n.endsWith(\".jsonl\"));\n const withStat = await Promise.all(\n jsonl.map(async (name) => {\n try {\n const st = await stat(path.join(usable, name));\n return { name, mtime: st.mtimeMs };\n } catch {\n return { name, mtime: 0 };\n }\n }),\n );\n withStat.sort((a, b) => {\n if (b.mtime !== a.mtime) return b.mtime - a.mtime;\n return a.name.localeCompare(b.name);\n });\n return withStat.map((x) => x.name);\n } catch {\n return [];\n }\n}\n\n/** Maps a `.jsonl` file name to its run id (basename only; no traversal). */\nexport function getRunIdFromTraceFileName(fileName: string): string | undefined {\n try {\n const base = path.basename(fileName);\n if (!base.endsWith(\".jsonl\")) return undefined;\n const id = base.slice(0, -\".jsonl\".length);\n return id === \"\" ? undefined : id;\n } catch {\n return undefined;\n }\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","import type { InspectRunOptions, TraceCorrelationMetadata } from \"./types.js\";\n\nexport const TRACE_CORRELATION_KEYS = [\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n \"groupId\",\n] as const satisfies readonly (keyof TraceCorrelationMetadata)[];\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0;\n}\n\n/** Extracts known correlation keys from a metadata record. */\nexport function extractCorrelationMetadata(\n record: Record<string, unknown> | undefined,\n): TraceCorrelationMetadata | undefined {\n if (!record) {\n return undefined;\n }\n\n const out: TraceCorrelationMetadata = {};\n let found = false;\n\n for (const key of TRACE_CORRELATION_KEYS) {\n const value = record[key];\n if (isNonEmptyString(value)) {\n out[key] = value;\n found = true;\n }\n }\n\n return found ? out : undefined;\n}\n\n/**\n * Builds `run_started` metadata from optional run metadata and top-level correlation fields.\n * Top-level correlation options override the same keys in `options.metadata`.\n */\nexport function buildRunStartedMetadata(\n options?: Pick<\n InspectRunOptions,\n | \"metadata\"\n | \"correlationId\"\n | \"requestId\"\n | \"decisionId\"\n | \"groupId\"\n >,\n): Record<string, unknown> | undefined {\n if (!options) {\n return undefined;\n }\n\n const merged: Record<string, unknown> =\n options.metadata !== undefined ? { ...options.metadata } : {};\n\n if (isNonEmptyString(options.correlationId)) {\n merged.correlationId = options.correlationId;\n }\n if (isNonEmptyString(options.requestId)) {\n merged.requestId = options.requestId;\n }\n if (isNonEmptyString(options.decisionId)) {\n merged.decisionId = options.decisionId;\n }\n if (isNonEmptyString(options.groupId)) {\n merged.groupId = options.groupId;\n }\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport { extractCorrelationMetadata } from \"./correlation-metadata.js\";\nimport type { ExecutionContext, TraceCorrelationMetadata } from \"./types.js\";\nimport {\n resolveTraceSafetyOptions,\n type TraceSafetyOptions,\n} from \"./trace-event-safety.js\";\n\ntype RuntimeExecutionContext = ExecutionContext & {\n currentStepId?: string;\n currentDepth: number;\n traceSafety: TraceSafetyOptions;\n};\n\nconst storage = new AsyncLocalStorage<RuntimeExecutionContext>();\n\nfunction toPublicContext(ctx: RuntimeExecutionContext): ExecutionContext {\n return {\n runId: ctx.runId,\n runName: ctx.runName,\n traceDir: ctx.traceDir,\n silent: ctx.silent,\n metadata: ctx.metadata,\n };\n}\n\nfunction invoke<T>(fn: () => T | Promise<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n try {\n Promise.resolve(fn()).then(resolve, reject);\n } catch (e) {\n reject(e);\n }\n });\n}\n\n/** Returns the active run context, without internal step fields. */\nexport function getCurrentContext(): ExecutionContext | undefined {\n try {\n const s = storage.getStore();\n if (!s) return undefined;\n return toPublicContext(s);\n } catch {\n return undefined;\n }\n}\n\n/** Active `runId` when inside `runWithContext`, else `undefined`. */\nexport function getCurrentRunId(): string | undefined {\n try {\n return storage.getStore()?.runId;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Correlation metadata for the active run (`correlationId`, `requestId`, `decisionId`, `groupId`).\n * `undefined` outside `inspectRun` / `maybeInspectRun` or when no correlation fields were set.\n */\nexport function getCurrentCorrelationMetadata():\n | TraceCorrelationMetadata\n | undefined {\n try {\n return extractCorrelationMetadata(storage.getStore()?.metadata);\n } catch {\n return undefined;\n }\n}\n\n/** Active `runName` when inside `runWithContext`, else `undefined`. */\nexport function getCurrentRunName(): string | undefined {\n try {\n return storage.getStore()?.runName;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Active step id in this async scope (parent for nested `step()` calls).\n * `undefined` at run root or outside any run.\n */\nexport function getCurrentStepId(): string | undefined {\n try {\n return storage.getStore()?.currentStepId;\n } catch {\n return undefined;\n }\n}\n\n/** Alias of {@link getCurrentStepId} for readability in step instrumentation. */\nexport function getParentStepId(): string | undefined {\n return getCurrentStepId();\n}\n\n/**\n * Nesting depth: `0` at run root, increments by one per nested `runWithStepContext`.\n * Returns `0` outside any run.\n */\nexport function getCurrentDepth(): number {\n try {\n const d = storage.getStore()?.currentDepth;\n return typeof d === \"number\" && Number.isFinite(d) ? d : 0;\n } catch {\n return 0;\n }\n}\n\nexport function hasActiveContext(): boolean {\n try {\n return storage.getStore() !== undefined;\n } catch {\n return false;\n }\n}\n\nexport function getTraceDirFromContext(): string | undefined {\n try {\n return storage.getStore()?.traceDir;\n } catch {\n return undefined;\n }\n}\n\nexport function isSilentContext(): boolean {\n try {\n const s = storage.getStore();\n return s ? s.silent : false;\n } catch {\n return false;\n }\n}\n\n/** Resolved trace safety settings for the active run (redaction + size bounds). */\nexport function getTraceSafetyFromContext(): TraceSafetyOptions | undefined {\n try {\n return storage.getStore()?.traceSafety;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Runs `fn` with a fresh AgentInspect run context (depth 0, no active step).\n * Propagates sync/async results and rejections; does not swallow user errors.\n */\nexport function runWithContext<T>(\n context: ExecutionContext,\n fn: () => Promise<T> | T,\n traceSafety: TraceSafetyOptions = resolveTraceSafetyOptions(),\n): Promise<T> {\n const runtime: RuntimeExecutionContext = {\n runId: context.runId,\n runName: context.runName,\n traceDir: context.traceDir,\n silent: context.silent,\n metadata: context.metadata,\n traceSafety,\n currentDepth: 0,\n };\n\n return new Promise((resolve, reject) => {\n storage.run(runtime, () => {\n try {\n Promise.resolve(fn()).then(resolve, reject);\n } catch (e) {\n reject(e);\n }\n });\n });\n}\n\n/**\n * Runs `fn` with `stepId` as the active step (incremented depth).\n * If no run is active, runs `fn` without altering async context.\n */\nexport function runWithStepContext<T>(\n stepId: string,\n fn: () => Promise<T> | T,\n): Promise<T> {\n let parent: RuntimeExecutionContext | undefined;\n try {\n parent = storage.getStore();\n } catch {\n parent = undefined;\n }\n\n if (!parent) {\n return invoke(fn);\n }\n\n const derived: RuntimeExecutionContext = {\n runId: parent.runId,\n runName: parent.runName,\n traceDir: parent.traceDir,\n silent: parent.silent,\n metadata: parent.metadata,\n traceSafety: parent.traceSafety,\n currentStepId: stepId,\n currentDepth: parent.currentDepth + 1,\n };\n\n return new Promise((resolve, reject) => {\n storage.run(derived, () => {\n try {\n Promise.resolve(fn()).then(resolve, reject);\n } catch (e) {\n reject(e);\n }\n });\n });\n}\n","import chalk from \"chalk\";\n\nimport { isSilentContext } from \"./context.js\";\nimport type { ErrorInfo, RunStatus, StepStatus } from \"./types.js\";\nimport { formatDuration, truncateName } from \"./utils.js\";\n\n/** Two spaces per nesting level in terminal output. */\nexport const TERMINAL_INDENT = \" \";\n\n/** Max display length for names in terminal output. */\nexport const MAX_TERMINAL_NAME_LENGTH = 80;\n\n/** Max nesting depth used for indentation (prevents huge indents). */\nexport const MAX_TERMINAL_DEPTH = 10;\n\nfunction normalizeDepth(depth: number): number {\n if (!Number.isFinite(depth) || depth < 0) {\n return 0;\n }\n return Math.min(Math.floor(depth), MAX_TERMINAL_DEPTH);\n}\n\nfunction safePrint(line = \"\"): void {\n try {\n console.log(line);\n } catch {\n /* never break callers */\n }\n}\n\n/** Indentation string for a nesting depth (capped, never negative). */\nexport function getIndent(depth: number): string {\n return TERMINAL_INDENT.repeat(normalizeDepth(depth));\n}\n\n/** Truncates a display name for terminal use; invalid input becomes `\"unnamed\"`. */\nexport function formatTerminalName(name: string): string {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"unnamed\";\n }\n return truncateName(name, MAX_TERMINAL_NAME_LENGTH);\n}\n\nfunction getStatusIcon(status: StepStatus | RunStatus): string {\n if (status === \"success\") return chalk.green(\"✔\");\n if (status === \"error\") return chalk.red(\"✖\");\n return chalk.yellow(\"⏳\");\n}\n\n/** Renders a single step line (colored); does not consult silent mode. */\nexport function renderStepLine(\n name: string,\n durationMs: number | undefined,\n status: StepStatus,\n depth?: number,\n): string {\n try {\n const nm = formatTerminalName(name);\n const ind = getIndent(depth ?? 0);\n if (status === \"running\" && durationMs === undefined) {\n return `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n }\n const hasDur =\n durationMs !== undefined && Number.isFinite(durationMs as number);\n const dur = hasDur ? formatDuration(durationMs as number) : undefined;\n if (status === \"running\") {\n return dur !== undefined\n ? `${ind}${chalk.yellow(\"⏳\")} ${nm} (${dur})`\n : `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n }\n if (!hasDur || dur === undefined) {\n return `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n }\n if (status === \"success\") {\n return `${ind}${getStatusIcon(\"success\")} ${nm} (${dur})`;\n }\n return `${ind}${getStatusIcon(\"error\")} ${nm} (${dur})`;\n } catch {\n return \"\";\n }\n}\n\n/** Renders an error summary line (no stack in MVP). */\nexport function renderErrorLine(error: ErrorInfo, depth?: number): string {\n try {\n const msg =\n typeof error.message === \"string\" ? error.message : \"\";\n const ind = getIndent((depth ?? 0) + 1);\n return `${ind}Error: ${msg}`;\n } catch {\n return \"\";\n }\n}\n\n/** Plain-text run summary lines (no chalk) for stable testing and CLI reuse. */\nexport function renderRunSummary(\n durationMs: number,\n status: RunStatus,\n traceFilePath?: string,\n): string[] {\n try {\n const dur = Number.isFinite(durationMs)\n ? formatDuration(durationMs)\n : formatDuration(0);\n const head =\n status === \"error\" ? `Failed in ${dur}` : `Completed in ${dur}`;\n const lines = [head];\n if (traceFilePath !== undefined && traceFilePath.trim() !== \"\") {\n lines.push(`Trace: ${traceFilePath}`);\n }\n return lines;\n } catch {\n return [];\n }\n}\n\n/** Prints run header with icon and dim run id. */\nexport function printRunStart(runId: string, name: string): void {\n if (isSilentContext()) return;\n try {\n safePrint(\"\");\n const header = `${chalk.cyan.bold(\"🔍 AgentInspect:\")} ${formatTerminalName(name)} ${chalk.dim(`(${runId})`)}`;\n safePrint(header);\n } catch {\n /* noop */\n }\n}\n\n/** Prints a running step line. */\nexport function printStepStart(name: string, depth = 0): void {\n if (isSilentContext()) return;\n try {\n safePrint(renderStepLine(name, undefined, \"running\", depth));\n } catch {\n /* noop */\n }\n}\n\n/** Prints a completed step line with duration and status icon. */\nexport function printStepComplete(\n name: string,\n durationMs: number,\n status: StepStatus,\n depth = 0,\n): void {\n if (isSilentContext()) return;\n try {\n safePrint(renderStepLine(name, durationMs, status, depth));\n } catch {\n /* noop */\n }\n}\n\n/** Prints a structured error line (message only, no stack). */\nexport function printError(error: ErrorInfo, depth = 0): void {\n if (isSilentContext()) return;\n try {\n safePrint(renderErrorLine(error, depth));\n } catch {\n /* noop */\n }\n}\n\n/** Prints run completion summary and optional trace path. */\nexport function printRunComplete(\n _name: string,\n _runId: string,\n durationMs: number,\n status: RunStatus,\n traceFilePath?: string,\n): void {\n if (isSilentContext()) return;\n try {\n const lines = renderRunSummary(durationMs, status, traceFilePath);\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!;\n if (i === 0) {\n const color =\n status === \"error\"\n ? chalk.red\n : status === \"running\"\n ? chalk.yellow\n : chalk.green;\n safePrint(color(line));\n } else {\n safePrint(chalk.dim(line));\n }\n }\n } catch {\n /* noop */\n }\n}\n\n/** Prints which step failed. */\nexport function printFailedAt(stepName: string): void {\n if (isSilentContext()) return;\n try {\n safePrint(`Failed at: ${formatTerminalName(stepName)}`);\n } catch {\n /* noop */\n }\n}\n","import type { Stats } from \"node:fs\";\nimport { readdir, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { getDefaultTraceDir } from \"./utils.js\";\n\nexport interface TraceDirectoryOptions {\n dir?: string;\n}\n\nexport function resolveTraceDir(options: TraceDirectoryOptions = {}): string {\n if (typeof options.dir === \"string\" && options.dir.trim() !== \"\") {\n return options.dir.trim();\n }\n const envDir = process.env.AGENT_INSPECT_TRACE_DIR;\n if (typeof envDir === \"string\" && envDir.trim() !== \"\") {\n return envDir.trim();\n }\n return getDefaultTraceDir();\n}\n\nexport class TraceDirectory {\n readonly #dir: string;\n\n constructor(options: TraceDirectoryOptions = {}) {\n this.#dir = resolveTraceDir(options);\n }\n\n getPath(filename?: string): string {\n return filename ? path.join(this.#dir, filename) : this.#dir;\n }\n\n async list(): Promise<string[]> {\n try {\n const files = await readdir(this.#dir);\n return files.filter((f) => f.endsWith(\".jsonl\"));\n } catch (e) {\n if (e && typeof e === \"object\" && \"code\" in e && e.code === \"ENOENT\") {\n return [];\n }\n throw e;\n }\n }\n\n async getFileStats(filename: string): Promise<Stats> {\n return await stat(this.getPath(filename));\n }\n}\n\n","import { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type {\n RunCompletedEvent,\n RunStartedEvent,\n StepCompletedEvent,\n StepStartedEvent,\n TraceEvent,\n TraceMetadata,\n TraceMetadataStatus,\n RunSummary,\n StepType,\n StepStatus,\n} from \"./types.js\";\nimport { parseTraceJsonl } from \"./read-trace.js\";\n\nfunction isFiniteNumber(v: unknown): v is number {\n return typeof v === \"number\" && Number.isFinite(v);\n}\n\nfunction parseIsoToMs(value: string | undefined): number | undefined {\n if (value === undefined) return undefined;\n const parsed = Date.parse(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nexport async function extractMetadata(\n filePath: string,\n _quickScan?: boolean,\n): Promise<TraceMetadata> {\n const stats = await stat(filePath);\n\n let runIdFromFile = path.basename(filePath);\n if (runIdFromFile.endsWith(\".jsonl\")) {\n runIdFromFile = runIdFromFile.slice(0, -\".jsonl\".length);\n }\n\n const raw = await readFile(filePath, \"utf-8\");\n const parsedTrace = parseTraceJsonl(raw, { warnings: false });\n\n let runId: string | undefined;\n let name: string | undefined;\n let startedAt: number | undefined;\n let endedAt: number | undefined;\n let explicitDurationMs: number | undefined;\n\n let hasRunStarted = false;\n let hasRunCompleted = false;\n let runCompletedStatus: \"success\" | \"error\" | undefined;\n let anyStepError = false;\n const anyKnownEvent = parsedTrace.sourceEventCount > 0;\n let persistedStatus: TraceMetadataStatus | undefined;\n\n const persistedRun = parsedTrace.persisted.find(\n (event) => event.kind === \"RUN\",\n );\n if (persistedRun) {\n runId = persistedRun.runId;\n if (persistedRun.name.trim() !== \"\") {\n name = persistedRun.name;\n }\n startedAt =\n parseIsoToMs(persistedRun.startedAt) ??\n parseIsoToMs(persistedRun.timestamp);\n endedAt = parseIsoToMs(persistedRun.endedAt);\n if (isFiniteNumber(persistedRun.durationMs)) {\n explicitDurationMs = persistedRun.durationMs;\n if (endedAt === undefined && startedAt !== undefined) {\n endedAt = startedAt + persistedRun.durationMs;\n }\n }\n if (persistedRun.status === \"ok\") persistedStatus = \"success\";\n else if (persistedRun.status === \"error\") persistedStatus = \"error\";\n else if (persistedRun.status === \"running\") persistedStatus = \"running\";\n else if (persistedRun.status === \"unknown\") persistedStatus = \"unknown\";\n } else {\n runId = parsedTrace.persisted[0]?.runId;\n }\n\n for (const e of parsedTrace.events) {\n if (\n runId === undefined &&\n typeof (e as { runId?: unknown }).runId === \"string\"\n ) {\n runId = (e as { runId: string }).runId;\n }\n\n if (e.event === \"run_started\") {\n hasRunStarted = true;\n const rs = e as RunStartedEvent;\n if (typeof rs.name === \"string\" && rs.name.trim() !== \"\") {\n name = rs.name;\n }\n if (isFiniteNumber(rs.startTime)) {\n startedAt = rs.startTime;\n } else if (isFiniteNumber(rs.timestamp)) {\n startedAt = rs.timestamp;\n }\n }\n\n if (e.event === \"run_completed\") {\n hasRunCompleted = true;\n const rc = e as RunCompletedEvent;\n runCompletedStatus = rc.status;\n if (isFiniteNumber(rc.endTime)) endedAt = rc.endTime;\n else if (isFiniteNumber(rc.timestamp)) endedAt = rc.timestamp;\n if (isFiniteNumber(rc.durationMs)) explicitDurationMs = rc.durationMs;\n }\n\n if (e.event === \"step_completed\") {\n const sc = e as StepCompletedEvent;\n if (sc.status === \"error\") {\n anyStepError = true;\n }\n }\n }\n\n const resolvedRunId = runId ?? runIdFromFile;\n\n let status: TraceMetadataStatus = \"unknown\";\n if (\n hasRunCompleted &&\n (runCompletedStatus === \"success\" || runCompletedStatus === \"error\")\n ) {\n status = runCompletedStatus;\n } else if (anyStepError) {\n // If run_completed is missing, but at least one step failed, treat as error.\n status = \"error\";\n } else if (persistedStatus !== undefined) {\n status = persistedStatus;\n } else if (hasRunStarted && !hasRunCompleted) {\n status = \"running\";\n } else if (anyKnownEvent) {\n status = \"unknown\";\n } else {\n status = \"unknown\";\n }\n\n const durationMs =\n explicitDurationMs ??\n (startedAt !== undefined &&\n endedAt !== undefined &&\n Number.isFinite(startedAt) &&\n Number.isFinite(endedAt) &&\n endedAt >= startedAt\n ? endedAt - startedAt\n : undefined);\n\n return {\n runId: resolvedRunId,\n name,\n status,\n startedAt,\n endedAt,\n durationMs,\n eventCount: parsedTrace.sourceEventCount,\n filePath,\n fileSize: stats.size,\n createdAt: stats.birthtime,\n };\n}\n\ntype StepAgg = {\n type: StepType;\n name: string;\n status: StepStatus;\n durationMs?: number;\n parentId?: string;\n tokensInput?: number;\n tokensOutput?: number;\n tokensTotal?: number;\n tokensCached?: number;\n};\n\nfunction isNonNegativeFiniteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nexport function buildRunSummary(events: TraceEvent[]): RunSummary {\n const started = events.find(\n (e): e is RunStartedEvent => e.event === \"run_started\",\n );\n const completed = events.filter(\n (e): e is RunCompletedEvent => e.event === \"run_completed\",\n );\n const lastCompleted = completed[completed.length - 1];\n\n const runId = started?.runId ?? events.find((e: any) => typeof e.runId === \"string\")?.runId ?? \"unknown-run\";\n\n const name =\n typeof started?.name === \"string\" && started.name.trim() !== \"\"\n ? started.name\n : undefined;\n\n const status: TraceMetadataStatus = lastCompleted\n ? lastCompleted.status\n : started\n ? \"running\"\n : \"unknown\";\n\n const durationMs =\n lastCompleted && isFiniteNumber(lastCompleted.durationMs)\n ? lastCompleted.durationMs\n : undefined;\n\n const startedAt =\n started && isFiniteNumber(started.startTime)\n ? started.startTime\n : undefined;\n\n const steps = new Map<string, StepAgg>();\n\n for (const e of events) {\n if (e.event === \"step_started\") {\n const s = e as StepStartedEvent;\n steps.set(s.stepId, {\n type: s.type,\n name: s.name,\n status: \"running\",\n parentId: s.parentId,\n tokensInput:\n isNonNegativeFiniteNumber(s.metadata?.tokens?.input)\n ? s.metadata.tokens.input\n : undefined,\n tokensOutput:\n isNonNegativeFiniteNumber(s.metadata?.tokens?.output)\n ? s.metadata.tokens.output\n : undefined,\n tokensTotal: isNonNegativeFiniteNumber(s.metadata?.tokens?.total)\n ? s.metadata.tokens.total\n : undefined,\n tokensCached: isNonNegativeFiniteNumber(s.metadata?.tokens?.cached)\n ? s.metadata.tokens.cached\n : undefined,\n });\n }\n }\n\n for (const e of events) {\n if (e.event === \"step_completed\") {\n const c = e as StepCompletedEvent;\n const existing = steps.get(c.stepId);\n if (!existing) continue;\n existing.status = c.status;\n existing.durationMs = c.durationMs;\n }\n }\n\n let totalSteps = 0;\n let llmSteps = 0;\n let toolSteps = 0;\n let logicSteps = 0;\n let errorSteps = 0;\n let maxDepth = 0;\n let longestStep: RunSummary[\"longestStep\"] | undefined;\n\n let totalTokensInput = 0;\n let totalTokensOutput = 0;\n let totalTokensTotal = 0;\n let totalTokensCached = 0;\n let tokenBearingSteps = 0;\n let stepsWithKnownTotal = 0;\n let hasCachedTokens = false;\n\n const depthCache = new Map<string, number>();\n const computeDepth = (stepId: string): number => {\n const cached = depthCache.get(stepId);\n if (cached !== undefined) return cached;\n const node = steps.get(stepId);\n if (!node) return 0;\n const parent = node.parentId;\n if (typeof parent !== \"string\" || parent.trim() === \"\" || !steps.has(parent)) {\n depthCache.set(stepId, 0);\n return 0;\n }\n // Depth is parent depth + 1. Cap at a sane limit to avoid cycles.\n const d = Math.min(1000, computeDepth(parent) + 1);\n depthCache.set(stepId, d);\n return d;\n };\n\n for (const [id, s] of steps.entries()) {\n totalSteps += 1;\n if (s.type === \"llm\") llmSteps += 1;\n else if (s.type === \"tool\") toolSteps += 1;\n else logicSteps += 1;\n\n if (s.status === \"error\") errorSteps += 1;\n const depth = computeDepth(id);\n if (depth > maxDepth) maxDepth = depth;\n\n if (typeof s.durationMs === \"number\" && Number.isFinite(s.durationMs)) {\n if (!longestStep || s.durationMs > longestStep.durationMs) {\n longestStep = { name: s.name, durationMs: s.durationMs, type: s.type };\n }\n }\n\n if (\n s.tokensInput !== undefined ||\n s.tokensOutput !== undefined ||\n s.tokensTotal !== undefined ||\n s.tokensCached !== undefined\n ) {\n tokenBearingSteps += 1;\n if (s.tokensInput !== undefined) totalTokensInput += s.tokensInput;\n if (s.tokensOutput !== undefined) totalTokensOutput += s.tokensOutput;\n\n if (s.tokensTotal !== undefined) {\n totalTokensTotal += s.tokensTotal;\n stepsWithKnownTotal += 1;\n } else if (s.tokensInput !== undefined && s.tokensOutput !== undefined) {\n totalTokensTotal += s.tokensInput + s.tokensOutput;\n stepsWithKnownTotal += 1;\n }\n\n if (s.tokensCached !== undefined) {\n totalTokensCached += s.tokensCached;\n hasCachedTokens = true;\n }\n }\n }\n\n const summary: RunSummary = {\n runId,\n name,\n status,\n durationMs,\n totalSteps,\n llmSteps,\n toolSteps,\n logicSteps,\n errorSteps,\n maxDepth,\n ...(longestStep ? { longestStep } : {}),\n ...(tokenBearingSteps > 0\n ? {\n totalTokens: {\n input: totalTokensInput,\n output: totalTokensOutput,\n ...(stepsWithKnownTotal === tokenBearingSteps\n ? { total: totalTokensTotal }\n : {}),\n ...(hasCachedTokens ? { cached: totalTokensCached } : {}),\n },\n }\n : {}),\n };\n\n // startedAt isn't in RunSummary spec, but keep deterministic results: ignore.\n void startedAt;\n return summary;\n}\n","import type { TraceMetadata, TraceMetadataStatus } from \"./types.js\";\nimport { parseDuration } from \"./utils/duration.js\";\n\nexport interface TraceFilterOptions {\n status?: TraceMetadataStatus;\n name?: string;\n since?: string;\n limit?: number;\n}\n\nfunction toLower(s: string | undefined): string {\n return typeof s === \"string\" ? s.toLowerCase() : \"\";\n}\n\nexport function filterTraces(\n traces: TraceMetadata[],\n options: TraceFilterOptions,\n): TraceMetadata[] {\n const input = [...traces];\n\n let out = input.filter((t) => {\n if (options.status && t.status !== options.status) return false;\n\n if (options.name) {\n const q = options.name.toLowerCase();\n const hay = `${toLower(t.name)} ${toLower(t.runId)}`;\n if (!hay.includes(q)) return false;\n }\n\n if (options.since) {\n const windowMs = parseDuration(options.since);\n const cutoff = Date.now() - windowMs;\n const started = typeof t.startedAt === \"number\" ? t.startedAt : undefined;\n const basis = started ?? t.createdAt.getTime();\n if (!Number.isFinite(basis) || basis < cutoff) return false;\n }\n\n return true;\n });\n\n out.sort((a, b) => {\n const aTime = (typeof a.startedAt === \"number\" ? a.startedAt : undefined) ?? a.createdAt.getTime();\n const bTime = (typeof b.startedAt === \"number\" ? b.startedAt : undefined) ?? b.createdAt.getTime();\n return bTime - aTime;\n });\n\n if (typeof options.limit === \"number\" && Number.isFinite(options.limit)) {\n const n = Math.max(0, Math.floor(options.limit));\n out = out.slice(0, n);\n }\n\n return out;\n}\n\n","import type {\n RunCompletedEvent,\n RunStartedEvent,\n StepCompletedEvent,\n StepStartedEvent,\n StepStatus,\n StepType,\n TraceEvent,\n TraceMetadataStatus,\n} from \"./types.js\";\nimport { formatDuration, formatTimestamp } from \"./utils.js\";\n\nexport type TimelineFocus = \"all\" | \"slow\";\n\nexport interface TimelineEntry {\n stepId: string;\n name: string;\n type: StepType;\n status: StepStatus;\n depth: number;\n startedAt: number;\n offsetMs: number;\n durationMs?: number;\n isError: boolean;\n slow?: boolean;\n streaming?: {\n chunkCount?: number;\n streamDurationMs?: number;\n streamedCharCount?: number;\n };\n}\n\nexport interface RunTimeline {\n runId: string;\n name?: string;\n status: TraceMetadataStatus;\n startedAt?: number;\n endedAt?: number;\n durationMs?: number;\n correlation?: {\n correlationId?: string;\n requestId?: string;\n decisionId?: string;\n groupId?: string;\n };\n entries: TimelineEntry[];\n}\n\nexport interface TimelineOptions {\n focus?: TimelineFocus;\n slowTopN?: number;\n}\n\nfunction finite(n: unknown): n is number {\n return typeof n === \"number\" && Number.isFinite(n);\n}\n\nfunction pickStreamingMeta(\n metadata: Record<string, unknown> | undefined,\n): TimelineEntry[\"streaming\"] | undefined {\n if (!metadata || typeof metadata !== \"object\") return undefined;\n const chunkCount = metadata.chunkCount;\n const streamDurationMs = metadata.streamDurationMs;\n const streamedCharCount = metadata.streamedCharCount;\n if (\n !finite(chunkCount) &&\n !finite(streamDurationMs) &&\n !finite(streamedCharCount)\n ) {\n return undefined;\n }\n return {\n ...(finite(chunkCount) ? { chunkCount } : {}),\n ...(finite(streamDurationMs) ? { streamDurationMs } : {}),\n ...(finite(streamedCharCount) ? { streamedCharCount } : {}),\n };\n}\n\nfunction pickCorrelation(\n metadata: Record<string, unknown> | undefined,\n): RunTimeline[\"correlation\"] | undefined {\n if (!metadata || typeof metadata !== \"object\") return undefined;\n const out: NonNullable<RunTimeline[\"correlation\"]> = {};\n for (const key of [\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n \"groupId\",\n ] as const) {\n const v = metadata[key];\n if (typeof v === \"string\" && v.trim() !== \"\") {\n out[key] = v;\n }\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nexport function buildRunTimeline(\n events: TraceEvent[],\n options: TimelineOptions = {},\n): RunTimeline {\n const started = events.find(\n (e): e is RunStartedEvent => e.event === \"run_started\",\n );\n const completed = events.filter(\n (e): e is RunCompletedEvent => e.event === \"run_completed\",\n );\n const lastCompleted = completed[completed.length - 1];\n\n const runId =\n started?.runId ??\n events.find((e) => typeof (e as { runId?: string }).runId === \"string\")\n ?.runId ??\n \"unknown-run\";\n\n const runStart =\n started && finite(started.startTime)\n ? started.startTime\n : started && finite(started.timestamp)\n ? started.timestamp\n : undefined;\n\n const status: TraceMetadataStatus = lastCompleted\n ? lastCompleted.status\n : started\n ? \"running\"\n : \"unknown\";\n\n const steps = new Map<\n string,\n {\n name: string;\n type: StepType;\n parentId?: string;\n startedAt: number;\n status: StepStatus;\n durationMs?: number;\n metadata?: Record<string, unknown>;\n }\n >();\n\n for (const e of events) {\n if (e.event === \"step_started\") {\n const s = e as StepStartedEvent;\n steps.set(s.stepId, {\n name: s.name,\n type: s.type,\n parentId: s.parentId,\n startedAt: finite(s.startTime) ? s.startTime : s.timestamp,\n status: \"running\",\n metadata: s.metadata as Record<string, unknown> | undefined,\n });\n }\n }\n\n for (const e of events) {\n if (e.event !== \"step_completed\") continue;\n const c = e as StepCompletedEvent;\n const node = steps.get(c.stepId);\n if (!node) continue;\n node.status = c.status;\n if (finite(c.durationMs)) node.durationMs = c.durationMs;\n }\n\n const depthCache = new Map<string, number>();\n const computeDepth = (stepId: string): number => {\n const cached = depthCache.get(stepId);\n if (cached !== undefined) return cached;\n const node = steps.get(stepId);\n if (!node) return 0;\n const parent = node.parentId;\n if (\n typeof parent !== \"string\" ||\n parent.trim() === \"\" ||\n !steps.has(parent)\n ) {\n depthCache.set(stepId, 0);\n return 0;\n }\n const d = Math.min(1000, computeDepth(parent) + 1);\n depthCache.set(stepId, d);\n return d;\n };\n\n const entries: TimelineEntry[] = [];\n for (const [stepId, s] of steps.entries()) {\n const offsetMs =\n runStart !== undefined && finite(s.startedAt)\n ? Math.max(0, s.startedAt - runStart)\n : 0;\n entries.push({\n stepId,\n name: s.name,\n type: s.type,\n status: s.status,\n depth: computeDepth(stepId),\n startedAt: s.startedAt,\n offsetMs,\n durationMs: s.durationMs,\n isError: s.status === \"error\",\n streaming: pickStreamingMeta(s.metadata),\n });\n }\n\n entries.sort((a, b) => a.startedAt - b.startedAt);\n\n const slowTopN = options.slowTopN ?? 3;\n if (options.focus === \"slow\" && entries.length > 0) {\n const ranked = [...entries]\n .filter((e) => finite(e.durationMs))\n .sort((a, b) => (b.durationMs ?? 0) - (a.durationMs ?? 0));\n const slowIds = new Set(\n ranked.slice(0, slowTopN).map((e) => e.stepId),\n );\n for (const e of entries) {\n if (slowIds.has(e.stepId)) e.slow = true;\n }\n }\n\n return {\n runId,\n name:\n typeof started?.name === \"string\" && started.name.trim() !== \"\"\n ? started.name\n : undefined,\n status,\n startedAt: runStart,\n endedAt:\n lastCompleted && finite(lastCompleted.endTime)\n ? lastCompleted.endTime\n : undefined,\n durationMs:\n lastCompleted && finite(lastCompleted.durationMs)\n ? lastCompleted.durationMs\n : undefined,\n correlation: pickCorrelation(\n started?.metadata as Record<string, unknown> | undefined,\n ),\n entries,\n };\n}\n\nexport interface RenderTimelineOptions {\n focus?: TimelineFocus;\n}\n\nexport function renderTimeline(\n timeline: RunTimeline,\n options: RenderTimelineOptions = {},\n): string {\n const lines: string[] = [];\n lines.push(`Timeline: ${timeline.name ?? timeline.runId}`);\n lines.push(`Run ID: ${timeline.runId}`);\n lines.push(`Status: ${timeline.status}`);\n if (timeline.startedAt !== undefined) {\n lines.push(`Started: ${formatTimestamp(timeline.startedAt)}`);\n }\n if (timeline.durationMs !== undefined) {\n lines.push(`Duration: ${formatDuration(timeline.durationMs)}`);\n }\n if (timeline.correlation) {\n const parts = Object.entries(timeline.correlation)\n .filter(([, v]) => typeof v === \"string\")\n .map(([k, v]) => `${k}=${v}`);\n if (parts.length > 0) {\n lines.push(`Correlation: ${parts.join(\", \")}`);\n }\n }\n lines.push(\"\");\n lines.push(\"Steps (chronological):\");\n\n const show = timeline.entries.filter((e) => {\n if (options.focus === \"slow\") return e.slow === true;\n return true;\n });\n\n if (show.length === 0) {\n lines.push(\n options.focus === \"slow\"\n ? \"(no steps with duration for slow focus)\"\n : \"(no steps)\",\n );\n return lines.join(\"\\n\");\n }\n\n for (const e of show) {\n const prefix = e.slow ? \"[slow] \" : \"\";\n const typeTag =\n e.type === \"llm\" ? \"llm\" : e.type === \"tool\" ? \"tool\" : e.type;\n const dur =\n e.durationMs !== undefined ? formatDuration(e.durationMs) : \"-\";\n const err = e.isError ? \" error\" : \"\";\n const off = formatDuration(e.offsetMs);\n let line = `${prefix}+${off} ${typeTag}:${e.name} (${dur})${err}`;\n if (e.streaming?.chunkCount !== undefined) {\n line += ` chunks=${e.streaming.chunkCount}`;\n }\n if (e.streaming?.streamDurationMs !== undefined) {\n line += ` stream=${formatDuration(e.streaming.streamDurationMs)}`;\n }\n lines.push(line);\n }\n\n return lines.join(\"\\n\");\n}\n","import type {\n RunCompletedEvent,\n RunStartedEvent,\n StepCompletedEvent,\n StepStartedEvent,\n TraceCorrelationMetadata,\n TraceEvent,\n TraceMetadataStatus,\n} from \"./types.js\";\nimport { buildRunSummary } from \"./trace-metadata.js\";\nimport { formatDuration } from \"./utils.js\";\n\nexport interface RunWhatSummary {\n runId: string;\n name?: string;\n status: TraceMetadataStatus;\n durationMs?: number;\n totalSteps: number;\n llmSteps: number;\n toolSteps: number;\n logicSteps: number;\n errorSteps: number;\n maxDepth: number;\n longestStep?: {\n name: string;\n durationMs: number;\n type: string;\n };\n totalTokens?: {\n input: number;\n output: number;\n total?: number;\n cached?: number;\n };\n correlation?: TraceCorrelationMetadata;\n failedStepNames: string[];\n runErrorMessage?: string;\n}\n\nfunction pickCorrelation(\n metadata: Record<string, unknown> | undefined,\n): TraceCorrelationMetadata | undefined {\n if (!metadata) return undefined;\n const out: TraceCorrelationMetadata = {};\n for (const key of [\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n \"groupId\",\n ] as const) {\n const value = metadata[key];\n if (typeof value === \"string\" && value.trim() !== \"\") {\n out[key] = value;\n }\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction stepMixLine(summary: RunWhatSummary): string {\n const parts: string[] = [];\n if (summary.llmSteps > 0) parts.push(`${summary.llmSteps} LLM`);\n if (summary.toolSteps > 0) parts.push(`${summary.toolSteps} tool`);\n if (summary.logicSteps > 0) parts.push(`${summary.logicSteps} logic`);\n return parts.length > 0 ? parts.join(\", \") : \"none\";\n}\n\nfunction outcomeLine(summary: RunWhatSummary): string {\n if (summary.status === \"success\") {\n return summary.errorSteps > 0\n ? \"Completed with step errors recorded.\"\n : \"Completed successfully.\";\n }\n if (summary.status === \"error\") {\n if (summary.failedStepNames.length > 0) {\n const names = summary.failedStepNames.slice(0, 3).join(\", \");\n const suffix =\n summary.failedStepNames.length > 3\n ? ` (+${summary.failedStepNames.length - 3} more)`\n : \"\";\n return `Failed at step(s): ${names}${suffix}.`;\n }\n if (summary.runErrorMessage) {\n return `Run failed: ${summary.runErrorMessage}`;\n }\n return \"Run failed.\";\n }\n if (summary.status === \"running\") {\n return \"Run is still in progress (no run_completed).\";\n }\n return \"Outcome unknown — inspect events may be incomplete.\";\n}\n\n/**\n * Build a concise inspection summary for `what` / report workflows.\n * Read-only over in-memory v0.1 {@link TraceEvent} rows.\n */\nexport function buildRunWhatSummary(events: TraceEvent[]): RunWhatSummary {\n const base = buildRunSummary(events);\n const started = events.find(\n (e): e is RunStartedEvent => e.event === \"run_started\",\n );\n const completed = events.filter(\n (e): e is RunCompletedEvent => e.event === \"run_completed\",\n );\n const lastCompleted = completed[completed.length - 1];\n\n const failedStepNames: string[] = [];\n const stepNames = new Map<string, string>();\n for (const e of events) {\n if (e.event === \"step_started\") {\n const s = e as StepStartedEvent;\n stepNames.set(s.stepId, s.name);\n }\n }\n for (const e of events) {\n if (e.event === \"step_completed\") {\n const sc = e as StepCompletedEvent;\n if (sc.status === \"error\") {\n failedStepNames.push(stepNames.get(sc.stepId) ?? sc.stepId);\n }\n }\n }\n\n return {\n runId: base.runId,\n name: base.name,\n status: base.status,\n durationMs: base.durationMs,\n totalSteps: base.totalSteps,\n llmSteps: base.llmSteps,\n toolSteps: base.toolSteps,\n logicSteps: base.logicSteps,\n errorSteps: base.errorSteps,\n maxDepth: base.maxDepth,\n longestStep: base.longestStep,\n totalTokens: base.totalTokens,\n correlation: pickCorrelation(started?.metadata),\n failedStepNames,\n runErrorMessage: lastCompleted?.error?.message,\n };\n}\n\nexport interface RenderWhatOptions {\n /** Include correlation ids when present (default true). */\n correlation?: boolean;\n}\n\n/**\n * Render a human-readable `what` summary (plain text, no ANSI).\n */\nexport function renderRunWhat(\n summary: RunWhatSummary,\n options: RenderWhatOptions = {},\n): string {\n const showCorrelation = options.correlation !== false;\n const lines: string[] = [];\n const label = summary.name ?? summary.runId;\n lines.push(`What: ${label}`);\n\n const duration =\n summary.durationMs !== undefined ? formatDuration(summary.durationMs) : \"—\";\n lines.push(\n `Status: ${summary.status} · Duration: ${duration} · Steps: ${summary.totalSteps} (${stepMixLine(summary)})`,\n );\n\n if (summary.totalTokens) {\n const tokenParts = [\n `${summary.totalTokens.input} in`,\n `${summary.totalTokens.output} out`,\n ];\n if (summary.totalTokens.total !== undefined) {\n tokenParts.push(`${summary.totalTokens.total} total`);\n }\n if (summary.totalTokens.cached !== undefined) {\n tokenParts.push(`${summary.totalTokens.cached} cached`);\n }\n lines.push(`Tokens: ${tokenParts.join(\" / \")}`);\n }\n\n if (showCorrelation && summary.correlation) {\n const parts: string[] = [];\n if (summary.correlation.correlationId) {\n parts.push(`correlationId=${summary.correlation.correlationId}`);\n }\n if (summary.correlation.requestId) {\n parts.push(`requestId=${summary.correlation.requestId}`);\n }\n if (summary.correlation.decisionId) {\n parts.push(`decisionId=${summary.correlation.decisionId}`);\n }\n if (summary.correlation.groupId) {\n parts.push(`groupId=${summary.correlation.groupId}`);\n }\n if (parts.length > 0) {\n lines.push(`Correlation: ${parts.join(\", \")}`);\n }\n }\n\n lines.push(`Outcome: ${outcomeLine(summary)}`);\n\n if (summary.longestStep && summary.totalSteps > 0) {\n lines.push(\n `Slowest: ${summary.longestStep.name} (${formatDuration(summary.longestStep.durationMs)}, ${summary.longestStep.type})`,\n );\n }\n\n if (summary.maxDepth > 0) {\n lines.push(`Max depth: ${summary.maxDepth}`);\n }\n\n return lines.join(\"\\n\");\n}\n","import { Redactor } from \"./logs/redactor.js\";\nimport { resolveRedactionProfile } from \"./redaction-profiles.js\";\nimport type { RedactionProfile } from \"./types.js\";\nimport type { InspectNode, InspectRunTree } from \"./types/inspect-event.js\";\n\nexport type ExplainMode = \"dry-run\" | \"local\";\n\nexport interface ExplainFact {\n id: string;\n label: string;\n value: unknown;\n source: \"trace\";\n confidence: \"observed\";\n}\n\nexport interface ExplainInference {\n id: string;\n label: string;\n text: string;\n evidence: string[];\n confidence: \"deterministic\";\n}\n\nexport interface ExplainResult {\n mode: ExplainMode;\n runId: string;\n name?: string;\n status?: string;\n redactionProfile: RedactionProfile;\n facts: ExplainFact[];\n inferences: ExplainInference[];\n notes: string[];\n}\n\nexport interface ExplainOptions {\n mode?: ExplainMode;\n redactionProfile?: RedactionProfile;\n}\n\ninterface FlatNode {\n node: InspectNode;\n index: number;\n}\n\nfunction flatten(nodes: InspectNode[], out: FlatNode[] = []): FlatNode[] {\n for (const node of nodes) {\n out.push({ node, index: out.length + 1 });\n flatten(node.children, out);\n }\n return out;\n}\n\nfunction redactValue(\n redactor: Redactor,\n key: string,\n value: unknown,\n): unknown {\n return redactor.redactValue(key, value);\n}\n\nfunction fact(\n id: string,\n label: string,\n value: unknown,\n redactor: Redactor,\n): ExplainFact {\n return {\n id,\n label,\n value: redactValue(redactor, id.split(\".\").at(-1) ?? id, value),\n source: \"trace\",\n confidence: \"observed\",\n };\n}\n\nfunction topKinds(run: InspectRunTree): string[] {\n return Object.entries(run.metadata.kinds)\n .filter(([, count]) => count > 0)\n .sort((a, b) => {\n if (b[1] !== a[1]) return b[1] - a[1];\n return a[0].localeCompare(b[0]);\n })\n .slice(0, 5)\n .map(([kind, count]) => `${kind}:${count}`);\n}\n\nfunction countErrorNodes(nodes: FlatNode[]): number {\n return nodes.filter((entry) => entry.node.event.status === \"error\").length;\n}\n\nfunction slowestNode(nodes: FlatNode[]): FlatNode | undefined {\n return nodes\n .filter((entry) => entry.node.event.durationMs !== undefined)\n .sort((a, b) => {\n const delta = (b.node.event.durationMs ?? 0) - (a.node.event.durationMs ?? 0);\n return delta !== 0 ? delta : a.index - b.index;\n })[0];\n}\n\nfunction attributeFacts(nodes: FlatNode[], redactor: Redactor): ExplainFact[] {\n const facts: ExplainFact[] = [];\n for (const entry of nodes) {\n const attrs = entry.node.event.attributes;\n if (attrs === undefined) continue;\n for (const key of Object.keys(attrs).sort()) {\n facts.push({\n id: `node.${entry.index}.attributes.${key}`,\n label: `${entry.node.event.name} attribute ${key}`,\n value: redactValue(redactor, key, attrs[key]),\n source: \"trace\",\n confidence: \"observed\",\n });\n if (facts.length >= 8) return facts;\n }\n }\n return facts;\n}\n\nfunction buildFacts(run: InspectRunTree, redactor: Redactor): ExplainFact[] {\n const nodes = flatten(run.children);\n const facts = [\n fact(\"run.id\", \"Run id\", run.runId, redactor),\n fact(\"run.name\", \"Run name\", run.name ?? run.runId, redactor),\n fact(\"run.status\", \"Run status\", run.status ?? \"unknown\", redactor),\n fact(\"run.totalEvents\", \"Total events\", run.metadata.totalEvents, redactor),\n fact(\"run.stepCount\", \"Top-level step count\", run.children.length, redactor),\n fact(\"run.nodeCount\", \"Total node count\", nodes.length, redactor),\n fact(\"run.errorNodeCount\", \"Error node count\", countErrorNodes(nodes), redactor),\n fact(\"run.kinds\", \"Observed kind mix\", topKinds(run), redactor),\n ];\n if (run.durationMs !== undefined) {\n facts.push(fact(\"run.durationMs\", \"Run duration milliseconds\", run.durationMs, redactor));\n }\n const slowest = slowestNode(nodes);\n if (slowest !== undefined) {\n facts.push(\n fact(\"run.slowestNode\", \"Slowest observed node\", {\n name: slowest.node.event.name,\n kind: slowest.node.event.kind,\n durationMs: slowest.node.event.durationMs,\n }, redactor),\n );\n }\n facts.push(...attributeFacts(nodes, redactor));\n return facts;\n}\n\nfunction buildInferences(run: InspectRunTree, facts: ExplainFact[]): ExplainInference[] {\n const inferences: ExplainInference[] = [];\n const errorFact = facts.find((item) => item.id === \"run.errorNodeCount\");\n const kindFact = facts.find((item) => item.id === \"run.kinds\");\n const durationFact = facts.find((item) => item.id === \"run.durationMs\");\n const errorNodeCount =\n typeof errorFact?.value === \"number\" ? errorFact.value : 0;\n\n if (run.status === \"error\" || errorNodeCount > 0) {\n inferences.push({\n id: \"outcome.error\",\n label: \"Outcome\",\n text: \"The run recorded an error status or at least one error node.\",\n evidence: [\"run.status\", \"run.errorNodeCount\"],\n confidence: \"deterministic\",\n });\n } else if (run.status === \"ok\") {\n inferences.push({\n id: \"outcome.success\",\n label: \"Outcome\",\n text: \"The run completed without observed error nodes.\",\n evidence: [\"run.status\", \"run.errorNodeCount\"],\n confidence: \"deterministic\",\n });\n }\n\n if (kindFact !== undefined) {\n inferences.push({\n id: \"shape.kind-mix\",\n label: \"Trace shape\",\n text: \"The explanation is based on the observed event kind mix, not generated content.\",\n evidence: [kindFact.id],\n confidence: \"deterministic\",\n });\n }\n\n if (durationFact !== undefined) {\n inferences.push({\n id: \"timing.duration\",\n label: \"Timing\",\n text: \"Timing claims are limited to persisted duration fields in the trace.\",\n evidence: [durationFact.id],\n confidence: \"deterministic\",\n });\n }\n\n return inferences;\n}\n\n/**\n * Build a local, deterministic explanation payload from a reader-selected run.\n *\n * This helper performs no network I/O and does not call a model provider.\n */\nexport function buildLocalExplanation(\n run: InspectRunTree,\n options: ExplainOptions = {},\n): ExplainResult {\n const redactionProfile = options.redactionProfile ?? \"local\";\n const resolved = resolveRedactionProfile(redactionProfile);\n const redactor = new Redactor({ extraKeys: resolved.extraKeys });\n const mode = options.mode ?? \"local\";\n const facts = buildFacts(run, redactor);\n return {\n mode,\n runId: String(redactValue(redactor, \"runId\", run.runId)),\n ...(run.name !== undefined ? { name: String(redactValue(redactor, \"name\", run.name)) } : {}),\n ...(run.status !== undefined ? { status: run.status } : {}),\n redactionProfile,\n facts,\n inferences: mode === \"dry-run\" ? [] : buildInferences(run, facts),\n notes: [\n \"Generated locally without provider or network calls.\",\n \"Facts are observed from normalized trace data; inferences are deterministic labels.\",\n ],\n };\n}\n","import type { RunStartedEvent, TraceEvent, TraceMetadata } from \"./types.js\";\nimport { buildRunSummary } from \"./trace-metadata.js\";\nimport { filterTraces } from \"./trace-filter.js\";\nimport { readTraceEventsFromFile } from \"./storage.js\";\nimport { formatDuration } from \"./utils.js\";\n\nexport interface DurationStats {\n minMs?: number;\n maxMs?: number;\n avgMs?: number;\n p50Ms?: number;\n p95Ms?: number;\n}\n\nexport interface TraceStatsRankedRun {\n runId: string;\n name?: string;\n durationMs?: number;\n status: string;\n}\n\nexport interface TraceStatsRankedStep {\n runId: string;\n stepName: string;\n stepType: string;\n durationMs: number;\n}\n\nexport interface TraceStats {\n traceDir: string;\n since?: string;\n correlationId?: string;\n groupId?: string;\n totalRuns: number;\n successCount: number;\n errorCount: number;\n runningCount: number;\n unknownCount: number;\n errorRate: number;\n duration: DurationStats;\n totalSteps: number;\n avgStepsPerRun: number;\n totalLlmSteps: number;\n totalToolSteps: number;\n totalErrorSteps: number;\n slowestRuns: TraceStatsRankedRun[];\n slowestSteps: TraceStatsRankedStep[];\n}\n\nexport interface TraceStatsOptions {\n traceDir: string;\n since?: string;\n correlationId?: string;\n groupId?: string;\n slowRunLimit?: number;\n slowStepLimit?: number;\n}\n\nfunction percentile(sorted: number[], p: number): number | undefined {\n if (sorted.length === 0) return undefined;\n const idx = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n );\n return sorted[idx];\n}\n\nasync function readRunStartedMetadata(\n filePath: string,\n): Promise<Record<string, unknown> | undefined> {\n try {\n const events = await readTraceEventsFromFile(filePath);\n for (const event of events) {\n if (event.event !== \"run_started\") continue;\n const rs = event as RunStartedEvent;\n if (rs.metadata && typeof rs.metadata === \"object\") {\n return rs.metadata as Record<string, unknown>;\n }\n return undefined;\n }\n } catch {\n /* skip */\n }\n return undefined;\n}\n\nfunction metaMatchesCorrelation(\n metadata: Record<string, unknown> | undefined,\n correlationId?: string,\n groupId?: string,\n): boolean {\n if (correlationId) {\n const v = metadata?.correlationId;\n if (typeof v !== \"string\" || v !== correlationId) return false;\n }\n if (groupId) {\n const v = metadata?.groupId;\n if (typeof v !== \"string\" || v !== groupId) return false;\n }\n return true;\n}\n\nexport async function buildTraceStats(\n metas: TraceMetadata[],\n options: TraceStatsOptions,\n): Promise<TraceStats> {\n let filtered = filterTraces(metas, { since: options.since });\n\n if (options.correlationId || options.groupId) {\n const next: TraceMetadata[] = [];\n for (const m of filtered) {\n const md = await readRunStartedMetadata(m.filePath);\n if (metaMatchesCorrelation(md, options.correlationId, options.groupId)) {\n next.push(m);\n }\n }\n filtered = next;\n }\n\n let successCount = 0;\n let errorCount = 0;\n let runningCount = 0;\n let unknownCount = 0;\n const durations: number[] = [];\n let totalSteps = 0;\n let totalLlmSteps = 0;\n let totalToolSteps = 0;\n let totalErrorSteps = 0;\n const slowestRuns: TraceStatsRankedRun[] = [];\n const slowestSteps: TraceStatsRankedStep[] = [];\n\n for (const m of filtered) {\n if (m.status === \"success\") successCount += 1;\n else if (m.status === \"error\") errorCount += 1;\n else if (m.status === \"running\") runningCount += 1;\n else unknownCount += 1;\n\n if (\n typeof m.durationMs === \"number\" &&\n Number.isFinite(m.durationMs) &&\n m.durationMs >= 0\n ) {\n durations.push(m.durationMs);\n slowestRuns.push({\n runId: m.runId,\n name: m.name,\n durationMs: m.durationMs,\n status: m.status,\n });\n }\n\n try {\n const events = await readTraceEventsFromFile(m.filePath);\n if (events.length === 0) continue;\n const summary = buildRunSummary(events);\n totalSteps += summary.totalSteps;\n totalLlmSteps += summary.llmSteps;\n totalToolSteps += summary.toolSteps;\n totalErrorSteps += summary.errorSteps;\n\n const steps = collectCompletedSteps(events, m.runId);\n for (const s of steps) {\n slowestSteps.push(s);\n }\n } catch {\n /* skip malformed */\n }\n }\n\n slowestRuns.sort((a, b) => (b.durationMs ?? 0) - (a.durationMs ?? 0));\n slowestSteps.sort((a, b) => b.durationMs - a.durationMs);\n\n const runLimit = options.slowRunLimit ?? 5;\n const stepLimit = options.slowStepLimit ?? 5;\n const sortedDur = [...durations].sort((a, b) => a - b);\n const totalRuns = filtered.length;\n const errorRate = totalRuns > 0 ? errorCount / totalRuns : 0;\n const sumDur = durations.reduce((a, b) => a + b, 0);\n\n return {\n traceDir: options.traceDir,\n ...(options.since ? { since: options.since } : {}),\n ...(options.correlationId ? { correlationId: options.correlationId } : {}),\n ...(options.groupId ? { groupId: options.groupId } : {}),\n totalRuns,\n successCount,\n errorCount,\n runningCount,\n unknownCount,\n errorRate,\n duration: {\n ...(sortedDur.length > 0\n ? {\n minMs: sortedDur[0],\n maxMs: sortedDur[sortedDur.length - 1],\n avgMs: sumDur / sortedDur.length,\n p50Ms: percentile(sortedDur, 50),\n p95Ms: percentile(sortedDur, 95),\n }\n : {}),\n },\n totalSteps,\n avgStepsPerRun: totalRuns > 0 ? totalSteps / totalRuns : 0,\n totalLlmSteps,\n totalToolSteps,\n totalErrorSteps,\n slowestRuns: slowestRuns.slice(0, runLimit),\n slowestSteps: slowestSteps.slice(0, stepLimit),\n };\n}\n\nfunction collectCompletedSteps(\n events: TraceEvent[],\n runId: string,\n): TraceStatsRankedStep[] {\n const started = new Map<string, { name: string; type: string }>();\n const out: TraceStatsRankedStep[] = [];\n for (const e of events) {\n if (e.event === \"step_started\") {\n const s = e as { stepId: string; name: string; type: string };\n started.set(s.stepId, { name: s.name, type: s.type });\n }\n if (e.event === \"step_completed\") {\n const c = e as {\n stepId: string;\n durationMs?: number;\n status: string;\n };\n if (c.status !== \"success\" && c.status !== \"error\") continue;\n if (typeof c.durationMs !== \"number\" || !Number.isFinite(c.durationMs)) {\n continue;\n }\n const meta = started.get(c.stepId);\n out.push({\n runId,\n stepName: meta?.name ?? c.stepId,\n stepType: meta?.type ?? \"logic\",\n durationMs: c.durationMs,\n });\n }\n }\n return out;\n}\n\nexport function renderTraceStats(stats: TraceStats): string {\n const lines: string[] = [];\n lines.push(\"Trace stats (local)\");\n lines.push(`Directory: ${stats.traceDir}`);\n if (stats.since) lines.push(`Since: ${stats.since}`);\n if (stats.correlationId) lines.push(`Correlation ID: ${stats.correlationId}`);\n if (stats.groupId) lines.push(`Group ID: ${stats.groupId}`);\n lines.push(\"\");\n lines.push(`Runs: ${stats.totalRuns}`);\n lines.push(\n ` success: ${stats.successCount} error: ${stats.errorCount} running: ${stats.runningCount} unknown: ${stats.unknownCount}`,\n );\n lines.push(`Error rate: ${(stats.errorRate * 100).toFixed(1)}%`);\n if (stats.duration.avgMs !== undefined) {\n lines.push(\n `Duration: min ${formatDuration(stats.duration.minMs ?? 0)} | avg ${formatDuration(stats.duration.avgMs)} | p50 ${formatDuration(stats.duration.p50Ms ?? 0)} | p95 ${formatDuration(stats.duration.p95Ms ?? 0)} | max ${formatDuration(stats.duration.maxMs ?? 0)}`,\n );\n }\n lines.push(\"\");\n lines.push(`Steps: ${stats.totalSteps} (avg ${stats.avgStepsPerRun.toFixed(1)} per run)`);\n lines.push(\n ` LLM: ${stats.totalLlmSteps} tool: ${stats.totalToolSteps} errors: ${stats.totalErrorSteps}`,\n );\n if (stats.slowestRuns.length > 0) {\n lines.push(\"\");\n lines.push(\"Slowest runs:\");\n for (const r of stats.slowestRuns) {\n lines.push(\n ` ${r.runId} | ${r.name ?? \"-\"} | ${formatDuration(r.durationMs ?? 0)} | ${r.status}`,\n );\n }\n }\n if (stats.slowestSteps.length > 0) {\n lines.push(\"\");\n lines.push(\"Slowest steps:\");\n for (const s of stats.slowestSteps) {\n lines.push(\n ` ${s.runId} | ${s.stepType}:${s.stepName} | ${formatDuration(s.durationMs)}`,\n );\n }\n }\n return lines.join(\"\\n\");\n}\n","export type ObservedOutcomeStatus = \"passed\" | \"failed\" | \"unknown\" | \"skipped\";\n\nexport type ObservedOutcomeMethod =\n | \"dom\"\n | \"accessibility\"\n | \"snapshot\"\n | \"network\"\n | \"storage\"\n | \"filesystem\"\n | \"database\"\n | \"queue\"\n | \"custom\";\n\nexport interface ObservedOutcome {\n outcomeId: string;\n runId: string;\n parentId?: string;\n name: string;\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt: number;\n}\n\nexport interface ObserveOutcomeOptions {\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt?: number | string;\n}\n\nexport interface ObservedOutcomeSummary {\n total: number;\n passed: number;\n failed: number;\n unknown: number;\n skipped: number;\n outcomes: ObservedOutcome[];\n}\n\nexport const OBSERVED_OUTCOME_STATUSES: readonly ObservedOutcomeStatus[] = [\n \"passed\",\n \"failed\",\n \"unknown\",\n \"skipped\",\n];\n\nexport const OBSERVED_OUTCOME_METHODS: readonly ObservedOutcomeMethod[] = [\n \"dom\",\n \"accessibility\",\n \"snapshot\",\n \"network\",\n \"storage\",\n \"filesystem\",\n \"database\",\n \"queue\",\n \"custom\",\n];\n\nexport const OUTCOME_ATTRIBUTE_STATUS_KEY = \"outcomeStatus\";\nexport const OUTCOME_ATTRIBUTE_EXPECTATION_KEY = \"expectation\";\nexport const OUTCOME_ATTRIBUTE_METHOD_KEY = \"method\";\nexport const OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY = \"observedAt\";\nexport const OUTCOME_LEGACY_EVENT = \"outcome_observed\";\n","import type { TraceSafetyOptions } from \"../trace-event-safety.js\";\nimport { prepareMetadataForDisk } from \"../trace-event-safety.js\";\nimport type { OutcomeObservedEvent } from \"../types.js\";\nimport {\n OBSERVED_OUTCOME_METHODS,\n OBSERVED_OUTCOME_STATUSES,\n type ObserveOutcomeOptions,\n type ObservedOutcomeMethod,\n type ObservedOutcomeStatus,\n} from \"./types.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction normalizeName(name: string): string {\n const trimmed = name.trim();\n if (trimmed === \"\") {\n throw new Error(\"observeOutcome requires a non-empty name.\");\n }\n return trimmed.slice(0, 100);\n}\n\nfunction normalizeExpectation(value: string): string {\n const trimmed = value.trim();\n if (trimmed === \"\") {\n throw new Error(\"observeOutcome requires a non-empty expectation.\");\n }\n return trimmed.slice(0, 500);\n}\n\nexport function parseObservedOutcomeStatus(value: string): ObservedOutcomeStatus {\n const trimmed = value.trim().toLowerCase();\n if ((OBSERVED_OUTCOME_STATUSES as readonly string[]).includes(trimmed)) {\n return trimmed as ObservedOutcomeStatus;\n }\n throw new Error(\n `Unsupported observation status \"${value}\". Use passed, failed, unknown, or skipped.`,\n );\n}\n\nfunction parseMethod(value: string | undefined): ObservedOutcomeMethod | undefined {\n if (value === undefined || value.trim() === \"\") return undefined;\n const trimmed = value.trim().toLowerCase();\n if ((OBSERVED_OUTCOME_METHODS as readonly string[]).includes(trimmed)) {\n return trimmed as ObservedOutcomeMethod;\n }\n throw new Error(`Unsupported observation method \"${value}\".`);\n}\n\nfunction parseObservedAt(value: number | string | undefined, fallback: number): number {\n if (value === undefined) return fallback;\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\") {\n const parsed = Date.parse(value);\n if (Number.isFinite(parsed)) return parsed;\n }\n return fallback;\n}\n\nexport function normalizeObserveOutcomeInput(\n name: string,\n options: ObserveOutcomeOptions,\n nowMs: number = Date.now(),\n): {\n name: string;\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt: number;\n} {\n return {\n name: normalizeName(name),\n expectation: normalizeExpectation(options.expectation),\n status: options.status,\n ...(options.method !== undefined ? { method: parseMethod(options.method) } : {}),\n ...(options.actual !== undefined ? { actual: options.actual } : {}),\n ...(options.evidence !== undefined ? { evidence: options.evidence } : {}),\n observedAt: parseObservedAt(options.observedAt, nowMs),\n };\n}\n\nfunction boundPayload(\n value: unknown,\n opts: TraceSafetyOptions,\n): unknown {\n if (value === undefined) return undefined;\n if (!isRecord(value) && !Array.isArray(value)) {\n if (typeof value === \"string\") {\n return value.length > opts.maxMetadataValueLength\n ? `${value.slice(0, opts.maxMetadataValueLength)}…`\n : value;\n }\n return value;\n }\n return prepareMetadataForDisk(\n isRecord(value) ? value : { items: value },\n opts,\n );\n}\n\nexport function prepareOutcomeEventForDisk(\n event: OutcomeObservedEvent,\n opts: TraceSafetyOptions,\n): OutcomeObservedEvent {\n const actual = boundPayload(event.actual, opts);\n const evidence = boundPayload(event.evidence, opts);\n const next: OutcomeObservedEvent = {\n ...event,\n ...(actual !== undefined ? { actual } : {}),\n ...(evidence !== undefined ? { evidence } : {}),\n };\n if (\"actual\" in event && actual === undefined) {\n const { actual: _a, ...rest } = next;\n return rest;\n }\n if (\"evidence\" in event && evidence === undefined) {\n const { evidence: _e, ...rest } = next;\n return rest;\n }\n return next;\n}\n","import type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport type { TraceEvent } from \"../types.js\";\nimport {\n OUTCOME_ATTRIBUTE_EXPECTATION_KEY,\n OUTCOME_ATTRIBUTE_METHOD_KEY,\n OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY,\n OUTCOME_ATTRIBUTE_STATUS_KEY,\n OUTCOME_LEGACY_EVENT,\n type ObservedOutcome,\n type ObservedOutcomeMethod,\n type ObservedOutcomeStatus,\n type ObservedOutcomeSummary,\n} from \"./types.js\";\nimport { parseObservedOutcomeStatus } from \"./validate.js\";\n\nfunction isOutcomeStatus(value: unknown): value is ObservedOutcomeStatus {\n return (\n value === \"passed\" ||\n value === \"failed\" ||\n value === \"unknown\" ||\n value === \"skipped\"\n );\n}\n\nfunction parseMethod(value: unknown): ObservedOutcomeMethod | undefined {\n if (typeof value !== \"string\" || value.trim() === \"\") return undefined;\n return value as ObservedOutcomeMethod;\n}\n\nfunction fromOutcomeObservedEvent(event: Extract<TraceEvent, { event: \"outcome_observed\" }>): ObservedOutcome {\n return {\n outcomeId: event.outcomeId,\n runId: event.runId,\n ...(event.parentId !== undefined ? { parentId: event.parentId } : {}),\n name: event.name,\n expectation: event.expectation,\n status: event.status,\n ...(event.method !== undefined ? { method: event.method } : {}),\n ...(event.actual !== undefined ? { actual: event.actual } : {}),\n ...(event.evidence !== undefined ? { evidence: event.evidence } : {}),\n observedAt: event.observedAt,\n };\n}\n\nfunction fromPersistedOutcome(event: PersistedInspectEvent): ObservedOutcome | undefined {\n if (event.kind !== \"OUTCOME\") return undefined;\n const attrs = event.attributes ?? {};\n const statusRaw = attrs[OUTCOME_ATTRIBUTE_STATUS_KEY];\n if (!isOutcomeStatus(statusRaw)) return undefined;\n const expectation =\n typeof attrs[OUTCOME_ATTRIBUTE_EXPECTATION_KEY] === \"string\"\n ? attrs[OUTCOME_ATTRIBUTE_EXPECTATION_KEY]\n : event.name;\n const observedAtRaw = attrs[OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY];\n const observedAt =\n typeof observedAtRaw === \"string\"\n ? Date.parse(observedAtRaw)\n : typeof observedAtRaw === \"number\" && Number.isFinite(observedAtRaw)\n ? observedAtRaw\n : Date.parse(event.timestamp);\n return {\n outcomeId: event.eventId,\n runId: event.runId,\n ...(event.parentId !== undefined ? { parentId: event.parentId } : {}),\n name: event.name,\n expectation,\n status: statusRaw,\n ...(parseMethod(attrs[OUTCOME_ATTRIBUTE_METHOD_KEY]) !== undefined\n ? { method: parseMethod(attrs[OUTCOME_ATTRIBUTE_METHOD_KEY]) }\n : {}),\n ...(event.outputSummary !== undefined ? { actual: event.outputSummary } : {}),\n ...(attrs.evidence !== undefined ? { evidence: attrs.evidence } : {}),\n observedAt: Number.isFinite(observedAt) ? observedAt : Date.parse(event.timestamp),\n };\n}\n\nexport function extractOutcomesFromTraceEvents(events: readonly TraceEvent[]): ObservedOutcome[] {\n const out: ObservedOutcome[] = [];\n for (const event of events) {\n if (event.event === OUTCOME_LEGACY_EVENT) {\n out.push(fromOutcomeObservedEvent(event as Extract<TraceEvent, { event: \"outcome_observed\" }>));\n }\n }\n return out.sort((a, b) => a.observedAt - b.observedAt || a.name.localeCompare(b.name));\n}\n\nexport function extractOutcomesFromPersistedEvents(\n events: readonly PersistedInspectEvent[],\n): ObservedOutcome[] {\n const out: ObservedOutcome[] = [];\n for (const event of events) {\n const outcome = fromPersistedOutcome(event);\n if (outcome) out.push(outcome);\n }\n return out.sort((a, b) => a.observedAt - b.observedAt || a.name.localeCompare(b.name));\n}\n\nexport function summarizeObservedOutcomes(outcomes: readonly ObservedOutcome[]): ObservedOutcomeSummary {\n const summary: ObservedOutcomeSummary = {\n total: outcomes.length,\n passed: 0,\n failed: 0,\n unknown: 0,\n skipped: 0,\n outcomes: [...outcomes],\n };\n for (const outcome of outcomes) {\n summary[outcome.status] += 1;\n }\n return summary;\n}\n\nexport function outcomesMatchingStatus(\n outcomes: readonly ObservedOutcome[],\n statuses: readonly ObservedOutcomeStatus[],\n): ObservedOutcome[] {\n const set = new Set(statuses);\n return outcomes.filter((outcome) => set.has(outcome.status));\n}\n\nexport function parseObservationFilter(value: string | undefined): ObservedOutcomeStatus | undefined {\n if (value === undefined || value.trim() === \"\") return undefined;\n return parseObservedOutcomeStatus(value);\n}\n","import type { ObservedOutcome, ObservedOutcomeSummary } from \"./types.js\";\n\nfunction formatPayload(value: unknown): string {\n if (value === undefined) return \"\";\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function renderObservedOutcomesMarkdown(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"No observed outcomes recorded for this run.\";\n }\n const lines = [\n `Total: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})`,\n \"\",\n \"| Name | Status | Expectation | Method |\",\n \"| --- | --- | --- | --- |\",\n ];\n for (const outcome of summary.outcomes) {\n lines.push(\n `| ${outcome.name} | ${outcome.status} | ${outcome.expectation.replace(/\\|/g, \"\\\\|\")} | ${outcome.method ?? \"-\"} |`,\n );\n }\n return lines.join(\"\\n\");\n}\n\nexport function renderObservedOutcomesText(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"No observed outcomes recorded for this run.\";\n }\n const lines = [\n `Observed outcomes: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})`,\n ];\n for (const outcome of summary.outcomes) {\n const evidence = formatPayload(outcome.evidence);\n const suffix = evidence ? ` evidence=${evidence}` : \"\";\n lines.push(\n `- ${outcome.name} [${outcome.status}] ${outcome.expectation}${suffix}`,\n );\n }\n return lines.join(\"\\n\");\n}\n\nexport function renderObservedOutcomesHtml(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"<p>No observed outcomes recorded for this run.</p>\";\n }\n const rows = summary.outcomes\n .map((outcome: ObservedOutcome) => {\n const esc = (v: string) =>\n v.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n return `<tr><td>${esc(outcome.name)}</td><td>${esc(outcome.status)}</td><td>${esc(outcome.expectation)}</td><td>${esc(outcome.method ?? \"-\")}</td></tr>`;\n })\n .join(\"\");\n return `<p>Total: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})</p><table><thead><tr><th>Name</th><th>Status</th><th>Expectation</th><th>Method</th></tr></thead><tbody>${rows}</tbody></table>`;\n}\n","import type { StepCompletedEvent, StepStartedEvent, TraceEvent } from \"./types.js\";\nimport { extractMetadata } from \"./trace-metadata.js\";\nimport { filterTraces as filterTraceMetas } from \"./trace-filter.js\";\nimport { readTraceEventsFromFile } from \"./storage.js\";\nimport type { TraceMetadata, StepType } from \"./types.js\";\nimport { parseDuration } from \"./utils/duration.js\";\nimport {\n extractOutcomesFromTraceEvents,\n parseObservationFilter,\n} from \"./outcomes/index.js\";\n\nexport interface TraceSearchOptions {\n traceDir: string;\n since?: string;\n status?: \"success\" | \"error\" | \"running\" | \"unknown\";\n kind?: string;\n type?: string;\n name?: string;\n tool?: string;\n duration?: string;\n limit?: number;\n session?: string;\n correlateGroup?: boolean;\n observation?: string;\n}\n\nexport interface TraceSearchResult {\n runId: string;\n runName?: string;\n runStatus: string;\n stepId?: string;\n stepName?: string;\n stepType?: string;\n timestamp?: number;\n durationMs?: number;\n matchReason: string;\n matchedFields: string[];\n filePath: string;\n sessionId?: string;\n}\n\nexport interface ParsedDurationFilter {\n op: \">\" | \">=\" | \"<\" | \"<=\";\n ms: number;\n}\n\nexport function parseDurationFilter(expr: string): ParsedDurationFilter {\n const raw = expr.trim();\n const m = raw.match(/^(>=|<=|>|<)\\s*(.+)$/);\n if (!m) {\n throw new Error(\n `Invalid --duration \"${expr}\". Use forms like >5s, >=500ms, <2m.`,\n );\n }\n const op = m[1] as ParsedDurationFilter[\"op\"];\n const ms = parseDuration(m[2].trim());\n return { op, ms };\n}\n\nfunction durationMatches(\n valueMs: number | undefined,\n filter: ParsedDurationFilter,\n): boolean {\n if (valueMs === undefined || !Number.isFinite(valueMs)) return false;\n switch (filter.op) {\n case \">\":\n return valueMs > filter.ms;\n case \">=\":\n return valueMs >= filter.ms;\n case \"<\":\n return valueMs < filter.ms;\n case \"<=\":\n return valueMs <= filter.ms;\n default:\n return false;\n }\n}\n\nfunction normalizeStepTypeFilter(kind?: string, type?: string): string | undefined {\n const v = (kind ?? type)?.trim().toLowerCase();\n return v && v !== \"\" ? v : undefined;\n}\n\nfunction nameMatches(hay: string, needle: string): boolean {\n return hay.toLowerCase().includes(needle.toLowerCase());\n}\n\nexport async function searchTraces(\n metas: TraceMetadata[],\n options: TraceSearchOptions,\n): Promise<TraceSearchResult[]> {\n let filtered = filterTraceMetas(metas, { since: options.since });\n const stepTypeFilter = normalizeStepTypeFilter(options.kind, options.type);\n const nameQuery = options.name?.trim();\n const toolQuery = options.tool?.trim();\n let durationFilter: ParsedDurationFilter | undefined;\n if (options.duration) {\n durationFilter = parseDurationFilter(options.duration);\n }\n const limit = options.limit ?? 50;\n const sessionId = options.session?.trim();\n const observationStatus = parseObservationFilter(options.observation);\n\n const hasContentFilter = Boolean(\n options.status ||\n stepTypeFilter ||\n nameQuery ||\n toolQuery ||\n durationFilter ||\n observationStatus,\n );\n\n const results: TraceSearchResult[] = [];\n const sessionLabel = sessionId && sessionId !== \"\" ? sessionId : undefined;\n\n if (!hasContentFilter) {\n for (const m of filtered) {\n results.push({\n runId: m.runId,\n runName: m.name,\n runStatus: m.status,\n timestamp: m.startedAt,\n durationMs: m.durationMs,\n matchReason: sessionLabel\n ? `trace in session ${sessionLabel}`\n : \"trace in directory\",\n matchedFields: sessionLabel ? [\"run\", \"session\"] : [\"run\"],\n filePath: m.filePath,\n ...(sessionLabel ? { sessionId: sessionLabel } : {}),\n });\n }\n return results.slice(0, limit);\n }\n\n for (const m of filtered) {\n if (options.status && m.status !== options.status) continue;\n\n let events: TraceEvent[] = [];\n try {\n events = await readTraceEventsFromFile(m.filePath);\n } catch {\n continue;\n }\n if (events.length === 0) continue;\n\n const runMatches = matchRunLevel(m, {\n stepTypeFilter,\n nameQuery,\n toolQuery,\n durationFilter,\n statusFilter: options.status,\n });\n results.push(...runMatches);\n\n const stepMatches = matchStepLevel(m, events, {\n stepTypeFilter,\n nameQuery,\n toolQuery,\n durationFilter,\n statusFilter: options.status,\n });\n results.push(...stepMatches);\n\n if (observationStatus) {\n const outcomes = extractOutcomesFromTraceEvents(events);\n const matched = outcomes.filter((outcome) => outcome.status === observationStatus);\n for (const outcome of matched) {\n results.push({\n runId: m.runId,\n runName: m.name,\n runStatus: m.status,\n stepName: outcome.name,\n timestamp: outcome.observedAt,\n matchReason: `observation status=${outcome.status}`,\n matchedFields: [\"outcome.status\", \"outcome.name\"],\n filePath: m.filePath,\n });\n }\n }\n }\n\n results.sort((a, b) => {\n const ta = a.timestamp ?? 0;\n const tb = b.timestamp ?? 0;\n if (ta !== tb) return ta - tb;\n const runCmp = a.runId.localeCompare(b.runId);\n if (runCmp !== 0) return runCmp;\n return (a.stepName ?? \"\").localeCompare(b.stepName ?? \"\");\n });\n\n return results.slice(0, limit);\n}\n\nfunction matchRunLevel(\n m: TraceMetadata,\n opts: {\n stepTypeFilter?: string;\n nameQuery?: string;\n toolQuery?: string;\n durationFilter?: ParsedDurationFilter;\n statusFilter?: string;\n },\n): TraceSearchResult[] {\n if (opts.stepTypeFilter || opts.toolQuery) return [];\n const out: TraceSearchResult[] = [];\n const fields: string[] = [];\n\n if (opts.statusFilter && m.status === opts.statusFilter) {\n fields.push(\"run.status\");\n }\n if (opts.nameQuery && nameMatches(m.name ?? m.runId, opts.nameQuery)) {\n fields.push(\"run.name\");\n }\n if (\n opts.durationFilter &&\n durationMatches(m.durationMs, opts.durationFilter)\n ) {\n fields.push(\"run.durationMs\");\n }\n\n if (fields.length === 0) return out;\n\n out.push({\n runId: m.runId,\n runName: m.name,\n runStatus: m.status,\n timestamp: m.startedAt,\n durationMs: m.durationMs,\n matchReason: `run match: ${fields.join(\", \")}`,\n matchedFields: fields,\n filePath: m.filePath,\n });\n return out;\n}\n\nfunction matchStepLevel(\n m: TraceMetadata,\n events: TraceEvent[],\n opts: {\n stepTypeFilter?: string;\n nameQuery?: string;\n toolQuery?: string;\n durationFilter?: ParsedDurationFilter;\n statusFilter?: string;\n },\n): TraceSearchResult[] {\n const out: TraceSearchResult[] = [];\n const started = new Map<string, StepStartedEvent>();\n\n for (const e of events) {\n if (e.event === \"step_started\") {\n started.set((e as StepStartedEvent).stepId, e as StepStartedEvent);\n }\n }\n\n for (const e of events) {\n if (e.event !== \"step_completed\") continue;\n const c = e as StepCompletedEvent;\n const s = started.get(c.stepId);\n if (!s) continue;\n\n const fields: string[] = [];\n const stepType = s.type as StepType;\n\n if (opts.stepTypeFilter && stepType !== opts.stepTypeFilter) {\n continue;\n }\n\n const hasStepFilters =\n opts.stepTypeFilter ||\n opts.nameQuery ||\n opts.toolQuery ||\n opts.durationFilter ||\n opts.statusFilter === \"error\" ||\n opts.statusFilter === \"success\";\n\n if (!hasStepFilters) continue;\n\n if (opts.statusFilter === \"error\" && c.status === \"error\") {\n fields.push(\"step.status\");\n } else if (opts.statusFilter === \"success\" && c.status === \"success\") {\n fields.push(\"step.status\");\n } else if (opts.statusFilter === \"error\" || opts.statusFilter === \"success\") {\n continue;\n }\n\n if (opts.nameQuery) {\n if (!nameMatches(s.name, opts.nameQuery)) continue;\n fields.push(\"step.name\");\n }\n if (opts.toolQuery) {\n const toolName =\n typeof s.metadata?.toolName === \"string\"\n ? s.metadata.toolName\n : s.name;\n if (!nameMatches(toolName, opts.toolQuery)) continue;\n fields.push(\"step.tool\");\n }\n if (opts.durationFilter) {\n if (!durationMatches(c.durationMs, opts.durationFilter)) continue;\n fields.push(\"step.durationMs\");\n }\n if (opts.stepTypeFilter) {\n fields.push(\"step.type\");\n }\n\n if (fields.length === 0) continue;\n\n out.push({\n runId: m.runId,\n runName: m.name,\n runStatus: m.status,\n stepId: c.stepId,\n stepName: s.name,\n stepType,\n timestamp: s.startTime ?? s.timestamp,\n durationMs: c.durationMs,\n matchReason: `step match: ${fields.join(\", \")}`,\n matchedFields: fields,\n filePath: m.filePath,\n });\n }\n\n return out;\n}\n\nexport async function loadTraceMetadataList(\n _traceDir: string,\n fileNames: string[],\n getPath: (fileName: string) => string,\n): Promise<TraceMetadata[]> {\n const metas: TraceMetadata[] = [];\n for (const fileName of fileNames) {\n try {\n const filePath = getPath(fileName);\n const meta = await extractMetadata(filePath);\n metas.push(meta);\n } catch {\n /* skip */\n }\n }\n return metas;\n}\n","import type {\n ActivityEntry,\n ActivitySummary,\n BuildActivitySummaryOptions,\n SessionIndex,\n SessionStatus,\n SessionSummary,\n} from \"./types.js\";\n\nfunction statusLine(session: SessionSummary): string {\n const name =\n session.workflowId ??\n session.correlationId ??\n session.sessionId;\n const status = session.status;\n if (session.lastError) {\n return `${name} session ${session.sessionId} failed at ${session.lastError.message}`;\n }\n if (session.observationSummary) {\n return `${name} session ${session.sessionId} ${status} with observation warning`;\n }\n return `${name} session ${session.sessionId} ${status}`;\n}\n\nfunction parseSinceMs(since: string | undefined, nowMs: number): number {\n if (!since || since.trim() === \"\") return nowMs - 7 * 86_400_000;\n const trimmed = since.trim().toLowerCase();\n const match = /^(\\d+)([smhd])$/.exec(trimmed);\n if (!match) return nowMs - 7 * 86_400_000;\n const amount = Number.parseInt(match[1]!, 10);\n const unit = match[2];\n const mult =\n unit === \"s\" ? 1000 : unit === \"m\" ? 60_000 : unit === \"h\" ? 3_600_000 : 86_400_000;\n return nowMs - amount * mult;\n}\n\nfunction isFailed(status: SessionStatus): boolean {\n return status === \"error\";\n}\n\nfunction isStale(status: SessionStatus): boolean {\n return status === \"stale\";\n}\n\nfunction guardrailWarnings(session: SessionSummary): number {\n const summary = session.checkSummary;\n if (!summary) return 0;\n return summary.warn;\n}\n\n/**\n * Builds a deterministic activity summary from a session index (v4.2).\n * Read-only; does not mutate traces or invent relationships.\n */\nexport function buildActivitySummary(\n index: SessionIndex,\n options: BuildActivitySummaryOptions = {},\n): ActivitySummary {\n const nowMs = options.nowMs ?? Date.now();\n const sinceMs = parseSinceMs(options.since, nowMs);\n const sinceIso = new Date(sinceMs).toISOString();\n const limit =\n Number.isInteger(options.limit) && options.limit! > 0 ? options.limit! : 20;\n\n const inWindow = index.sessions.filter((session) => {\n const activityMs = Date.parse(session.lastActivity);\n return Number.isFinite(activityMs) && activityMs >= sinceMs;\n });\n\n const entries: ActivityEntry[] = [...inWindow]\n .sort((a, b) => Date.parse(b.lastActivity) - Date.parse(a.lastActivity))\n .slice(0, limit)\n .map((session) => ({\n sessionId: session.sessionId,\n status: session.status,\n summary: statusLine(session),\n lastActivity: session.lastActivity,\n runCount: session.runIds.length,\n }));\n\n let failed = 0;\n let stale = 0;\n let guardrailWarningTotal = 0;\n for (const session of inWindow) {\n if (isFailed(session.status)) failed += 1;\n if (isStale(session.status)) stale += 1;\n guardrailWarningTotal += guardrailWarnings(session);\n }\n\n return {\n since: sinceIso,\n sessions: inWindow.length,\n failed,\n stale,\n guardrailWarnings: guardrailWarningTotal,\n entries,\n };\n}\n\n/** Renders a human activity summary for terminal output. */\nexport function renderActivitySummaryHuman(\n summary: ActivitySummary,\n options?: { nowMs?: number },\n): string {\n const lines: string[] = [];\n const nowMs = options?.nowMs ?? Date.now();\n const todayStart = new Date(nowMs);\n todayStart.setHours(0, 0, 0, 0);\n const todayMs = todayStart.getTime();\n\n const today = summary.entries.filter(\n (entry) => Date.parse(entry.lastActivity) >= todayMs,\n );\n if (today.length > 0) {\n lines.push(\"Today\");\n for (const entry of today) {\n lines.push(` ${entry.summary}`);\n }\n lines.push(\"\");\n }\n\n lines.push(`Since ${summary.since}`);\n lines.push(` ${summary.sessions} sessions`);\n lines.push(` ${summary.failed} failed`);\n lines.push(` ${summary.stale} stale`);\n lines.push(` ${summary.guardrailWarnings} guardrail warnings`);\n\n return lines.join(\"\\n\");\n}\n","import { readTraceEventsFromFile } from \"../storage.js\";\nimport type { TraceMetadata } from \"../types.js\";\nimport type { SessionRunRecord } from \"./types.js\";\n\n/** Enriches trace metadata with run_started metadata for session indexing. */\nexport async function enrichSessionRunRecord(\n meta: TraceMetadata,\n): Promise<SessionRunRecord> {\n let metadata: Record<string, unknown> | undefined;\n try {\n const events = await readTraceEventsFromFile(meta.filePath);\n for (const event of events) {\n if (event.event !== \"run_started\") continue;\n if (event.metadata && typeof event.metadata === \"object\") {\n metadata = event.metadata as Record<string, unknown>;\n }\n break;\n }\n } catch {\n /* skip */\n }\n\n return {\n runId: meta.runId,\n name: meta.name,\n status: meta.status,\n startedAt: meta.startedAt,\n endedAt: meta.endedAt,\n durationMs: meta.durationMs,\n filePath: meta.filePath,\n metadata,\n };\n}\n\n/** Builds session run records from extracted trace metadata rows. */\nexport async function loadSessionRunRecords(\n metas: readonly TraceMetadata[],\n): Promise<SessionRunRecord[]> {\n const out: SessionRunRecord[] = [];\n for (const meta of metas) {\n out.push(await enrichSessionRunRecord(meta));\n }\n return out;\n}\n","import type { SessionWorkflowMetadata } from \"./types.js\";\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim() !== \"\";\n}\n\nfunction finitePositiveInt(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 1) {\n return undefined;\n }\n return Math.trunc(value);\n}\n\n/** Extracts session/workflow metadata from a run metadata or attributes bag. */\nexport function extractSessionWorkflowMetadata(\n record: Record<string, unknown> | undefined,\n): SessionWorkflowMetadata | undefined {\n if (!record) return undefined;\n\n const out: SessionWorkflowMetadata = {};\n let found = false;\n\n const assignString = (\n key: Exclude<keyof SessionWorkflowMetadata, \"attempt\">,\n value: unknown,\n ): void => {\n if (isNonEmptyString(value)) {\n out[key] = value.trim();\n found = true;\n }\n };\n\n assignString(\"sessionId\", record.sessionId);\n assignString(\"conversationId\", record.conversationId);\n assignString(\"groupId\", record.groupId);\n assignString(\"parentGroupId\", record.parentGroupId);\n assignString(\"retryOf\", record.retryOf);\n assignString(\"retryReason\", record.retryReason);\n assignString(\"handoffFrom\", record.handoffFrom);\n assignString(\"handoffTo\", record.handoffTo);\n assignString(\"subAgentId\", record.subAgentId);\n assignString(\"subAgentName\", record.subAgentName);\n assignString(\"jobId\", record.jobId);\n assignString(\"queueName\", record.queueName);\n assignString(\"workflowName\", record.workflowName);\n assignString(\"workflowStep\", record.workflowStep);\n assignString(\"toolCallId\", record.toolCallId);\n assignString(\"mcpToolCallId\", record.mcpToolCallId);\n assignString(\"linkedStepId\", record.linkedStepId);\n assignString(\"correlationId\", record.correlationId);\n assignString(\"requestId\", record.requestId);\n assignString(\"decisionId\", record.decisionId);\n\n const attempt = finitePositiveInt(record.attempt);\n if (attempt !== undefined) {\n out.attempt = attempt;\n found = true;\n }\n\n return found ? out : undefined;\n}\n\nexport function sessionKeyForRun(\n meta: SessionWorkflowMetadata | undefined,\n options?: { correlateByGroupId?: boolean },\n): string | undefined {\n if (meta?.sessionId) return meta.sessionId;\n if (options?.correlateByGroupId && meta?.groupId) {\n return `group:${meta.groupId}`;\n }\n return undefined;\n}\n","import { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type {\n EnrichSessionSummaryOptions,\n SessionCheckSummary,\n SessionLastError,\n SessionRunRecord,\n SessionStatus,\n SessionSummary,\n} from \"./types.js\";\n\nconst DEFAULT_STALE_THRESHOLD_MS = 86_400_000;\n\nconst EXPLICIT_STATUS_PRIORITY: Record<string, number> = {\n error: 5,\n waiting_input: 4,\n idle: 3,\n stale: 2,\n completed: 1,\n};\n\nconst EXPLICIT_SESSION_STATUSES = new Set<string>([\n \"running\",\n \"waiting_input\",\n \"idle\",\n \"completed\",\n \"error\",\n \"stale\",\n \"unknown\",\n]);\n\nfunction isExplicitSessionStatus(value: unknown): value is SessionStatus {\n return typeof value === \"string\" && EXPLICIT_SESSION_STATUSES.has(value);\n}\n\nfunction activityMs(run: SessionRunRecord): number {\n return run.endedAt ?? run.startedAt ?? 0;\n}\n\nfunction latestActivityMs(runs: readonly SessionRunRecord[]): number {\n let latest = 0;\n for (const run of runs) {\n const ms = activityMs(run);\n if (ms > latest) latest = ms;\n }\n return latest;\n}\n\nfunction earliestStart(runs: readonly SessionRunRecord[]): number | undefined {\n let earliest: number | undefined;\n for (const run of runs) {\n if (run.startedAt === undefined) continue;\n if (earliest === undefined || run.startedAt < earliest) {\n earliest = run.startedAt;\n }\n }\n return earliest;\n}\n\nfunction latestEndWhenAllEnded(runs: readonly SessionRunRecord[]): number | undefined {\n if (runs.length === 0) return undefined;\n let latest: number | undefined;\n for (const run of runs) {\n if (run.endedAt === undefined) return undefined;\n if (latest === undefined || run.endedAt > latest) latest = run.endedAt;\n }\n return latest;\n}\n\nfunction pickExplicitStatus(runs: readonly SessionRunRecord[]): SessionStatus | undefined {\n let best: SessionStatus | undefined;\n let bestPriority = 0;\n for (const run of runs) {\n const raw = run.metadata?.sessionStatus;\n if (!isExplicitSessionStatus(raw)) continue;\n const priority = EXPLICIT_STATUS_PRIORITY[raw] ?? 0;\n if (priority > bestPriority) {\n bestPriority = priority;\n best = raw;\n }\n }\n return best;\n}\n\nfunction deriveLastError(runs: readonly SessionRunRecord[]): SessionLastError | undefined {\n const errorRuns = runs\n .filter((run) => run.status === \"error\")\n .sort((a, b) => activityMs(b) - activityMs(a));\n const latest = errorRuns[0];\n if (!latest) return undefined;\n\n const meta = latest.metadata ?? {};\n const message =\n typeof meta.errorMessage === \"string\" && meta.errorMessage.trim() !== \"\"\n ? meta.errorMessage.trim()\n : (latest.name ?? latest.runId);\n const code =\n typeof meta.errorCode === \"string\" && meta.errorCode.trim() !== \"\"\n ? meta.errorCode.trim()\n : undefined;\n\n return { runId: latest.runId, message, code };\n}\n\nfunction deriveCheckSummary(\n runs: readonly SessionRunRecord[],\n): SessionCheckSummary | undefined {\n let pass = 0;\n let fail = 0;\n let warn = 0;\n let found = false;\n\n for (const run of runs) {\n const summary = run.metadata?.checkSummary;\n if (!summary || typeof summary !== \"object\") continue;\n const record = summary as Record<string, unknown>;\n if (typeof record.pass === \"number\") {\n pass += record.pass;\n found = true;\n }\n if (typeof record.fail === \"number\") {\n fail += record.fail;\n found = true;\n }\n if (typeof record.warn === \"number\") {\n warn += record.warn;\n found = true;\n }\n }\n\n return found ? { pass, fail, warn } : undefined;\n}\n\nfunction deriveObservationSummary(runs: readonly SessionRunRecord[]): string | undefined {\n for (const run of [...runs].sort((a, b) => activityMs(b) - activityMs(a))) {\n const value = run.metadata?.observationSummary;\n if (typeof value === \"string\" && value.trim() !== \"\") {\n return value.trim();\n }\n }\n return undefined;\n}\n\n/** Derives session status from run records per the v4.2 RFC (no timestamp-only causality). */\nexport function deriveSessionStatus(\n runs: readonly SessionRunRecord[],\n options: EnrichSessionSummaryOptions = {},\n): SessionStatus {\n if (runs.length === 0) return \"unknown\";\n\n if (runs.some((run) => run.status === \"running\")) return \"running\";\n\n const explicit = pickExplicitStatus(runs);\n if (explicit && explicit !== \"running\") return explicit;\n\n if (runs.some((run) => run.status === \"error\")) return \"error\";\n\n if (runs.every((run) => run.status === \"success\")) return \"completed\";\n\n const nowMs = options.nowMs ?? Date.now();\n const staleThresholdMs = options.staleThresholdMs ?? DEFAULT_STALE_THRESHOLD_MS;\n const lastMs = latestActivityMs(runs);\n if (lastMs > 0 && nowMs - lastMs > staleThresholdMs) return \"stale\";\n\n return \"unknown\";\n}\n\n/**\n * Enriches a session summary with v4.2 derived fields (status, timing, errors).\n * Pure function; does not read trace files.\n */\nexport function enrichSessionSummary(\n summary: Omit<\n SessionSummary,\n | \"status\"\n | \"lastActivity\"\n | \"retryCount\"\n | \"startedAt\"\n | \"endedAt\"\n | \"durationMs\"\n | \"correlationId\"\n | \"jobId\"\n | \"workflowId\"\n | \"lastError\"\n | \"observationSummary\"\n | \"checkSummary\"\n >,\n runs: readonly SessionRunRecord[],\n options: EnrichSessionSummaryOptions = {},\n): SessionSummary {\n const sessionRuns = runs\n .filter((run) => summary.runIds.includes(run.runId))\n .sort((a, b) => a.runId.localeCompare(b.runId));\n\n const startedAt = earliestStart(sessionRuns);\n const endedAt = latestEndWhenAllEnded(sessionRuns);\n const durationMs =\n startedAt !== undefined && endedAt !== undefined ? endedAt - startedAt : undefined;\n\n let correlationId: string | undefined;\n let jobId: string | undefined;\n let workflowId: string | undefined;\n for (const run of sessionRuns) {\n const meta = extractSessionWorkflowMetadata(run.metadata);\n if (!correlationId && meta?.correlationId) correlationId = meta.correlationId;\n if (!jobId && meta?.jobId) jobId = meta.jobId;\n if (!workflowId && meta?.workflowName) workflowId = meta.workflowName;\n else if (!workflowId && meta?.workflowStep) workflowId = meta.workflowStep;\n }\n\n const lastMs = latestActivityMs(sessionRuns);\n const lastActivity =\n lastMs > 0 ? new Date(lastMs).toISOString() : new Date(0).toISOString();\n\n const retryCount = summary.retries.filter(\n (retry) => retry.retryOf !== undefined || (retry.attempt ?? 0) > 1,\n ).length;\n\n return {\n ...summary,\n status: deriveSessionStatus(sessionRuns, options),\n startedAt,\n endedAt,\n durationMs,\n correlationId,\n jobId,\n workflowId,\n lastError: deriveLastError(sessionRuns),\n lastActivity,\n retryCount,\n observationSummary: deriveObservationSummary(sessionRuns),\n checkSummary: deriveCheckSummary(sessionRuns),\n };\n}\n","import type {\n TraceCheckDiagnostic,\n TraceCheckFinding,\n TraceCheckResult,\n TraceCheckStatus,\n TraceCheckSummary,\n} from \"../checks/index.js\";\nimport type { SessionWarning } from \"./types.js\";\n\nexport interface TraceSessionCheckResult extends TraceCheckResult {\n scopeKind: \"session\" | \"group\";\n scopeLabel: string;\n runIds: string[];\n runResults: Array<{ runId: string; status: TraceCheckStatus }>;\n sessionWarnings?: SessionWarning[];\n}\n\nfunction emptySummary(): TraceCheckSummary {\n return { passed: 0, failed: 0, warnings: 0, errors: 0 };\n}\n\nfunction mergeSummary(\n target: TraceCheckSummary,\n source: TraceCheckSummary,\n): TraceCheckSummary {\n return {\n passed: target.passed + source.passed,\n failed: target.failed + source.failed,\n warnings: target.warnings + source.warnings,\n errors: target.errors + source.errors,\n };\n}\n\nfunction sessionDiagnostic(\n code: \"AI_CHECK_INVALID_ARGUMENTS\" | \"AI_CHECK_TRACE_UNREADABLE\",\n message: string,\n): TraceCheckDiagnostic {\n return { code, message, severity: \"error\" };\n}\n\n/** Aggregates per-run check results for a session or group scope. */\nexport function aggregateSessionCheckResults(\n perRun: readonly TraceCheckResult[],\n scope: {\n scopeKind: \"session\" | \"group\";\n scopeLabel: string;\n runIds: string[];\n sessionWarnings?: SessionWarning[];\n notFound?: boolean;\n empty?: boolean;\n },\n): TraceSessionCheckResult {\n if (scope.notFound) {\n return {\n ok: false,\n status: \"error\",\n format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n scopeKind: scope.scopeKind,\n scopeLabel: scope.scopeLabel,\n runIds: [],\n runResults: [],\n summary: { ...emptySummary(), errors: 1 },\n findings: [],\n diagnostics: [\n sessionDiagnostic(\n \"AI_CHECK_INVALID_ARGUMENTS\",\n `${scope.scopeKind} not found: ${scope.scopeLabel}`,\n ),\n ],\n ...(scope.sessionWarnings?.length\n ? { sessionWarnings: [...scope.sessionWarnings] }\n : {}),\n };\n }\n\n if (scope.empty || perRun.length === 0) {\n return {\n ok: false,\n status: \"error\",\n format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n scopeKind: scope.scopeKind,\n scopeLabel: scope.scopeLabel,\n runIds: scope.runIds,\n runResults: [],\n summary: { ...emptySummary(), errors: 1 },\n findings: [],\n diagnostics: [\n sessionDiagnostic(\n \"AI_CHECK_TRACE_UNREADABLE\",\n `No readable traces in ${scope.scopeKind}: ${scope.scopeLabel}`,\n ),\n ],\n ...(scope.sessionWarnings?.length\n ? { sessionWarnings: [...scope.sessionWarnings] }\n : {}),\n };\n }\n\n let summary = emptySummary();\n const findings: TraceCheckFinding[] = [];\n const diagnostics: TraceCheckDiagnostic[] = [];\n const runResults: Array<{ runId: string; status: TraceCheckStatus }> = [];\n\n for (const result of perRun) {\n summary = mergeSummary(summary, result.summary);\n findings.push(...result.findings);\n diagnostics.push(...result.diagnostics);\n if (result.runId) {\n runResults.push({ runId: result.runId, status: result.status });\n }\n }\n\n runResults.sort((a, b) => a.runId.localeCompare(b.runId));\n findings.sort((a, b) => {\n const runCmp = (a.evidence[0]?.runId ?? \"\").localeCompare(\n b.evidence[0]?.runId ?? \"\",\n );\n if (runCmp !== 0) return runCmp;\n return a.ruleId.localeCompare(b.ruleId);\n });\n\n const hasErrors = diagnostics.some((item) => item.severity === \"error\");\n const status: TraceCheckStatus = hasErrors\n ? \"error\"\n : summary.failed > 0\n ? \"fail\"\n : \"pass\";\n\n return {\n ok: status === \"pass\",\n status,\n format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n scopeKind: scope.scopeKind,\n scopeLabel: scope.scopeLabel,\n runIds: scope.runIds,\n runResults,\n summary,\n findings,\n diagnostics,\n ...(scope.sessionWarnings?.length\n ? { sessionWarnings: [...scope.sessionWarnings] }\n : {}),\n };\n}\n","import {\n extractSessionWorkflowMetadata,\n sessionKeyForRun,\n} from \"./metadata.js\";\nimport { enrichSessionSummary } from \"./status.js\";\nimport type {\n BuildSessionIndexOptions,\n CriticalPathStep,\n HandoffEdge,\n RetryLink,\n SessionGroup,\n SessionIndex,\n SessionRunRecord,\n SessionSummary,\n SessionWarning,\n SessionWorkflowMetadata,\n} from \"./types.js\";\n\nfunction compareRuns(a: SessionRunRecord, b: SessionRunRecord): number {\n const aStart = a.startedAt ?? 0;\n const bStart = b.startedAt ?? 0;\n if (aStart !== bStart) return aStart - bStart;\n return a.runId.localeCompare(b.runId);\n}\n\nfunction buildGroups(\n runIds: string[],\n metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n): SessionGroup[] {\n const byGroup = new Map<string, SessionGroup>();\n\n for (const runId of runIds) {\n const groupId = metaByRunId.get(runId)?.groupId;\n if (!groupId) continue;\n const existing = byGroup.get(groupId);\n if (existing) {\n existing.runIds.push(runId);\n } else {\n byGroup.set(groupId, {\n groupId,\n parentGroupId: metaByRunId.get(runId)?.parentGroupId,\n runIds: [runId],\n });\n }\n }\n\n return [...byGroup.values()].map((group) => ({\n ...group,\n runIds: [...group.runIds].sort((a, b) => a.localeCompare(b)),\n }));\n}\n\nfunction buildHandoffs(\n runIds: string[],\n metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n warnings: SessionWarning[],\n sessionId: string,\n): HandoffEdge[] {\n const edges: HandoffEdge[] = [];\n const seen = new Set<string>();\n\n const pushEdge = (edge: HandoffEdge): void => {\n const key = `${edge.from}->${edge.to}:${edge.confidence}`;\n if (seen.has(key)) return;\n seen.add(key);\n edges.push(edge);\n };\n\n for (const runId of runIds) {\n const meta = metaByRunId.get(runId);\n if (!meta) continue;\n\n if (meta.handoffFrom && meta.handoffTo) {\n pushEdge({\n from: meta.handoffFrom,\n to: meta.handoffTo,\n source: \"manual\",\n confidence: \"explicit\",\n });\n continue;\n }\n\n if (meta.handoffFrom) {\n pushEdge({\n from: meta.handoffFrom,\n to: runId,\n source: \"manual\",\n confidence: \"explicit\",\n });\n }\n\n if (meta.handoffTo) {\n pushEdge({\n from: runId,\n to: meta.handoffTo,\n source: \"manual\",\n confidence: \"explicit\",\n });\n }\n\n if (\n meta.subAgentId &&\n meta.parentGroupId &&\n !meta.handoffFrom &&\n !meta.handoffTo\n ) {\n pushEdge({\n from: meta.parentGroupId,\n to: meta.subAgentId,\n source: \"inferred\",\n confidence: \"correlated\",\n });\n warnings.push({\n code: \"ambiguous-handoff-endpoints\",\n message:\n \"Handoff inferred from parentGroupId and subAgentId without explicit handoffFrom/handoffTo.\",\n runId,\n sessionId,\n });\n }\n }\n\n return edges.sort((a, b) => {\n const from = a.from.localeCompare(b.from);\n if (from !== 0) return from;\n return a.to.localeCompare(b.to);\n });\n}\n\nfunction buildRetries(\n runIds: string[],\n metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n warnings: SessionWarning[],\n sessionId: string,\n): RetryLink[] {\n const retries: RetryLink[] = [];\n\n for (const runId of runIds) {\n const meta = metaByRunId.get(runId);\n if (!meta) continue;\n\n if (meta.retryOf) {\n retries.push({\n runId,\n retryOf: meta.retryOf,\n attempt: meta.attempt,\n source: \"manual\",\n confidence: \"explicit\",\n });\n continue;\n }\n\n if (meta.attempt !== undefined && meta.attempt > 1) {\n retries.push({\n runId,\n attempt: meta.attempt,\n source: \"inferred\",\n confidence: \"correlated\",\n });\n warnings.push({\n code: \"ambiguous-retry-link\",\n message: \"attempt > 1 without retryOf; retry link is correlated only.\",\n runId,\n sessionId,\n });\n }\n }\n\n return retries.sort((a, b) => a.runId.localeCompare(b.runId));\n}\n\nfunction buildCriticalPath(\n runs: SessionRunRecord[],\n handoffs: HandoffEdge[],\n): CriticalPathStep[] {\n const runById = new Map(runs.map((run) => [run.runId, run]));\n const explicitTargets = new Set(\n handoffs\n .filter((edge) => edge.confidence === \"explicit\")\n .map((edge) => edge.to),\n );\n const explicitSources = new Set(\n handoffs\n .filter((edge) => edge.confidence === \"explicit\")\n .map((edge) => edge.from),\n );\n\n const ordered = [...runs].sort(compareRuns);\n const path: CriticalPathStep[] = [];\n const visited = new Set<string>();\n\n const pushRun = (\n run: SessionRunRecord,\n confidence: CriticalPathStep[\"confidence\"],\n source: CriticalPathStep[\"source\"],\n ): void => {\n if (visited.has(run.runId)) return;\n visited.add(run.runId);\n path.push({\n runId: run.runId,\n name: run.name,\n startedAt: run.startedAt,\n durationMs: run.durationMs,\n confidence,\n source,\n });\n };\n\n for (const edge of handoffs) {\n if (edge.confidence !== \"explicit\") continue;\n const fromRun = [...runById.values()].find(\n (run) =>\n run.runId === edge.from ||\n metaRunIdMatches(run, edge.from, runById),\n );\n const toRun = [...runById.values()].find(\n (run) =>\n run.runId === edge.to || metaRunIdMatches(run, edge.to, runById),\n );\n if (fromRun) pushRun(fromRun, \"explicit\", \"manual\");\n if (toRun) pushRun(toRun, \"explicit\", \"manual\");\n }\n\n for (const run of ordered) {\n if (visited.has(run.runId)) continue;\n const confidence =\n explicitTargets.has(run.runId) || explicitSources.has(run.runId)\n ? \"explicit\"\n : \"correlated\";\n pushRun(run, confidence, confidence === \"explicit\" ? \"manual\" : \"inferred\");\n }\n\n return path;\n}\n\nfunction metaRunIdMatches(\n run: SessionRunRecord,\n token: string,\n runById: Map<string, SessionRunRecord>,\n): boolean {\n const meta = extractSessionWorkflowMetadata(run.metadata);\n return (\n meta?.subAgentId === token ||\n meta?.groupId === token ||\n runById.has(token)\n );\n}\n\n/**\n * Builds a deterministic session index from local run records and metadata.\n * Does not read files or infer causality from timestamps alone.\n */\nexport function buildSessionIndex(\n inputRuns: readonly SessionRunRecord[],\n options: BuildSessionIndexOptions = {},\n): SessionIndex {\n const warnings: SessionWarning[] = [];\n const runs = [...inputRuns].sort(compareRuns);\n const metaByRunId = new Map<string, SessionWorkflowMetadata | undefined>();\n\n for (const run of runs) {\n metaByRunId.set(run.runId, extractSessionWorkflowMetadata(run.metadata));\n }\n\n const sessionsByKey = new Map<string, SessionRunRecord[]>();\n const unscopedRunIds: string[] = [];\n\n for (const run of runs) {\n const meta = metaByRunId.get(run.runId);\n const key = sessionKeyForRun(meta, {\n correlateByGroupId: options.correlateByGroupId === true,\n });\n if (!key) {\n unscopedRunIds.push(run.runId);\n continue;\n }\n const bucket = sessionsByKey.get(key) ?? [];\n bucket.push(run);\n sessionsByKey.set(key, bucket);\n }\n\n const sessions: SessionSummary[] = [...sessionsByKey.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([sessionId, sessionRuns]) => {\n const runIds = sessionRuns.map((run) => run.runId).sort();\n const handoffs = buildHandoffs(runIds, metaByRunId, warnings, sessionId);\n const retries = buildRetries(runIds, metaByRunId, warnings, sessionId);\n const groups = buildGroups(runIds, metaByRunId);\n const criticalPath = buildCriticalPath(sessionRuns, handoffs);\n\n const confidences = new Set(handoffs.map((edge) => edge.confidence));\n if (confidences.has(\"explicit\") && confidences.has(\"correlated\")) {\n warnings.push({\n code: \"mixed-confidence-group\",\n message: \"Session aggregates explicit and correlated handoff edges.\",\n sessionId,\n });\n }\n\n return enrichSessionSummary(\n {\n sessionId,\n runIds,\n groups,\n handoffs,\n retries,\n criticalPath,\n },\n runs,\n {\n nowMs: options.nowMs,\n staleThresholdMs: options.staleThresholdMs,\n },\n );\n });\n\n if (sessions.length === 0 && runs.length > 0) {\n warnings.push({\n code: \"missing-session-id\",\n message: \"No sessionId (or correlated groupId) found on input runs.\",\n });\n }\n\n warnings.sort((a, b) => {\n const code = a.code.localeCompare(b.code);\n if (code !== 0) return code;\n return (a.runId ?? \"\").localeCompare(b.runId ?? \"\");\n });\n\n return {\n runs,\n sessions,\n unscopedRunIds: unscopedRunIds.sort(),\n warnings,\n };\n}\n\nexport { extractSessionWorkflowMetadata, sessionKeyForRun } from \"./metadata.js\";\nexport { deriveSessionStatus, enrichSessionSummary } from \"./status.js\";\nexport {\n buildActivitySummary,\n renderActivitySummaryHuman,\n} from \"./activity.js\";\nexport type {\n ActivityEntry,\n ActivitySummary,\n BuildActivitySummaryOptions,\n BuildSessionIndexOptions,\n CriticalPathStep,\n EnrichSessionSummaryOptions,\n HandoffEdge,\n RetryLink,\n SessionCheckSummary,\n SessionConfidence,\n SessionEdgeSource,\n SessionGroup,\n SessionIndex,\n SessionLastError,\n SessionRunRecord,\n SessionStatus,\n SessionSummary,\n SessionWarning,\n SessionWorkflowMetadata,\n SessionWorkflowKey,\n} from \"./types.js\";\nexport { SESSION_WORKFLOW_KEYS } from \"./types.js\";\nexport { enrichSessionRunRecord, loadSessionRunRecords } from \"./load.js\";\nexport {\n filterMetasBySessionScope,\n traceMetasToSessionRunRecords,\n type SessionScopeOptions,\n type SessionScopeResult,\n} from \"./scope.js\";\nexport {\n groupSessionCohorts,\n type GroupSessionCohortsOptions,\n type SessionCohort,\n type SessionCohortKind,\n} from \"./cohort.js\";\nexport {\n aggregateSessionCheckResults,\n type TraceSessionCheckResult,\n} from \"./checks.js\";\n","import type { TraceMetadata } from \"../types.js\";\nimport { buildSessionIndex } from \"./index.js\";\nimport { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type { SessionRunRecord, SessionWarning } from \"./types.js\";\n\nexport interface SessionScopeOptions {\n sessionId?: string;\n groupId?: string;\n correlateByGroupId?: boolean;\n}\n\nexport interface SessionScopeResult {\n metas: TraceMetadata[];\n scopeLabel: string;\n scopeKind: \"session\" | \"group\";\n runIds: string[];\n warnings: SessionWarning[];\n notFound: boolean;\n}\n\nfunction metaToSessionRunRecord(meta: TraceMetadata): SessionRunRecord {\n return {\n runId: meta.runId,\n name: meta.name,\n status: meta.status,\n startedAt: meta.startedAt,\n endedAt: meta.endedAt,\n durationMs: meta.durationMs,\n filePath: meta.filePath,\n metadata: undefined,\n };\n}\n\n/** Filters trace metadata rows to runs in a session or group scope. */\nexport function filterMetasBySessionScope(\n metas: readonly TraceMetadata[],\n records: readonly SessionRunRecord[],\n options: SessionScopeOptions,\n): SessionScopeResult {\n const sessionId = options.sessionId?.trim();\n const groupId = options.groupId?.trim();\n const warnings: SessionWarning[] = [];\n\n if (sessionId) {\n const index = buildSessionIndex(records, {\n correlateByGroupId: options.correlateByGroupId === true,\n });\n warnings.push(...index.warnings);\n const session = index.sessions.find((item) => item.sessionId === sessionId);\n if (!session) {\n return {\n metas: [],\n scopeLabel: sessionId,\n scopeKind: \"session\",\n runIds: [],\n warnings,\n notFound: true,\n };\n }\n const runIdSet = new Set(session.runIds);\n const filtered = metas.filter((meta) => runIdSet.has(meta.runId));\n return {\n metas: filtered,\n scopeLabel: sessionId,\n scopeKind: \"session\",\n runIds: session.runIds,\n warnings,\n notFound: false,\n };\n }\n\n if (groupId) {\n const runIds = records\n .filter((run) => extractSessionWorkflowMetadata(run.metadata)?.groupId === groupId)\n .map((run) => run.runId)\n .sort();\n if (runIds.length === 0) {\n return {\n metas: [],\n scopeLabel: groupId,\n scopeKind: \"group\",\n runIds: [],\n warnings,\n notFound: true,\n };\n }\n const runIdSet = new Set(runIds);\n return {\n metas: metas.filter((meta) => runIdSet.has(meta.runId)),\n scopeLabel: groupId,\n scopeKind: \"group\",\n runIds,\n warnings,\n notFound: false,\n };\n }\n\n return {\n metas: [...metas],\n scopeLabel: \"\",\n scopeKind: \"session\",\n runIds: [],\n warnings,\n notFound: false,\n };\n}\n\n/** Lightweight metadata rows for scope resolution when run_started metadata is absent. */\nexport function traceMetasToSessionRunRecords(\n metas: readonly TraceMetadata[],\n): SessionRunRecord[] {\n return metas.map(metaToSessionRunRecord);\n}\n","import { createReadStream } from \"node:fs\";\nimport { createInterface } from \"node:readline\";\n\nimport { isTraceEvent } from \"./types.js\";\n\nconst KNOWN_EVENTS = new Set([\n \"run_started\",\n \"run_completed\",\n \"step_started\",\n \"step_completed\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction safeParse(line: string): unknown | undefined {\n try {\n return JSON.parse(line) as unknown;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Safety check for cleanup workflows: returns true only when the file appears to be an AgentInspect trace.\n * This should be conservative: false positives are more dangerous than false negatives.\n */\nexport async function isAgentInspectTrace(filePath: string): Promise<boolean> {\n try {\n const rl = createInterface({\n input: createReadStream(filePath, { encoding: \"utf8\" }),\n crlfDelay: Infinity,\n });\n\n let checked = 0;\n for await (const line of rl) {\n const trimmed = line.trim();\n if (trimmed === \"\") continue;\n const parsed = safeParse(trimmed);\n if (!parsed) continue;\n if (!isRecord(parsed)) continue;\n\n checked += 1;\n\n // Strong signal: a valid TraceEvent (schemaVersion 0.1 + known shape).\n if (isTraceEvent(parsed)) return true;\n\n // Secondary signal: recognizable event name + runId.\n const ev = parsed.event;\n const runId = parsed.runId;\n if (typeof ev === \"string\" && KNOWN_EVENTS.has(ev) && typeof runId === \"string\") {\n return true;\n }\n\n // If we found valid JSON objects but none look like AgentInspect, keep scanning a bit.\n if (checked >= 20) break;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n","import { parseDuration } from \"../utils/duration.js\";\nimport type { SessionIndex, SessionRunRecord } from \"../sessions/types.js\";\nimport type { BundleResolveOptions, BundleResolveResult } from \"./types.js\";\n\nfunction parseSinceCutoff(since: string): number {\n const trimmed = since.trim();\n if (trimmed === \"\") {\n throw new Error(\"--since requires a non-empty duration (e.g. 24h, 7d).\");\n }\n return Date.now() - parseDuration(trimmed);\n}\n\nfunction runActivityMs(run: SessionRunRecord): number | undefined {\n if (run.startedAt !== undefined && Number.isFinite(run.startedAt)) return run.startedAt;\n if (run.endedAt !== undefined && Number.isFinite(run.endedAt)) return run.endedAt;\n return undefined;\n}\n\nfunction runsInSinceWindow(\n runs: readonly SessionRunRecord[],\n since: string,\n): string[] {\n const cutoff = parseSinceCutoff(since);\n const ids: string[] = [];\n for (const run of runs) {\n const activity = runActivityMs(run);\n if (activity !== undefined && activity >= cutoff) {\n ids.push(run.runId);\n }\n }\n return ids.sort((a, b) => a.localeCompare(b));\n}\n\nfunction findSession(index: SessionIndex, sessionId: string) {\n return index.sessions.find((session) => session.sessionId === sessionId);\n}\n\n/**\n * Resolves which run ids belong in a bundle.\n *\n * @throws when target mode is missing, ambiguous, or yields zero runs.\n */\nexport function resolveBundleRunIds(\n index: SessionIndex,\n runs: readonly SessionRunRecord[],\n options: BundleResolveOptions,\n): BundleResolveResult {\n const runId = options.runId?.trim();\n const sessionId = options.sessionId?.trim();\n const since = options.since?.trim();\n\n const modes = [runId ? 1 : 0, sessionId ? 1 : 0, since ? 1 : 0].reduce((a, b) => a + b, 0);\n if (modes === 0) {\n throw new Error(\n \"bundle requires a run id, --session <sessionId>, or --since <duration>.\",\n );\n }\n if (modes > 1) {\n throw new Error(\n \"bundle accepts only one target: a run id, --session, or --since (not combined).\",\n );\n }\n\n if (runId) {\n const known = runs.some((run) => run.runId === runId);\n if (!known) {\n throw new Error(`Run \"${runId}\" was not found in the trace directory.`);\n }\n return { runIds: [runId] };\n }\n\n if (sessionId) {\n const session = findSession(index, sessionId);\n if (!session) {\n throw new Error(`Session \"${sessionId}\" was not found.`);\n }\n if (session.runIds.length === 0) {\n throw new Error(`Session \"${sessionId}\" has no runs to bundle.`);\n }\n return {\n runIds: [...session.runIds].sort((a, b) => a.localeCompare(b)),\n sessionId,\n };\n }\n\n const runIds = runsInSinceWindow(runs, since!);\n if (runIds.length === 0) {\n throw new Error(`No runs matched --since ${since}.`);\n }\n return { runIds, since };\n}\n","import type { BundleSafeStatus, BundleSafeStatusMetadata } from \"./types.js\";\n\nexport function aggregateBundleSafeStatus(statuses: readonly BundleSafeStatus[]): BundleSafeStatus {\n if (statuses.length === 0) return \"UNKNOWN\";\n if (statuses.some((status) => status === \"UNSAFE\")) return \"UNSAFE\";\n if (statuses.some((status) => status === \"UNKNOWN\")) return \"UNKNOWN\";\n if (statuses.some((status) => status === \"SAFE WITH WARNINGS\")) return \"SAFE WITH WARNINGS\";\n return \"SAFE\";\n}\n\nexport function toMetadataSafeStatus(status: BundleSafeStatus): BundleSafeStatusMetadata {\n if (status === \"SAFE WITH WARNINGS\") return \"SAFE_WITH_WARNINGS\";\n return status;\n}\n\nexport function bundleFailsOnSafety(\n status: BundleSafeStatus,\n allowUnsafe: boolean,\n): boolean {\n if (allowUnsafe) return false;\n return status === \"UNSAFE\" || status === \"UNKNOWN\";\n}\n","import { aggregateBundleSafeStatus, toMetadataSafeStatus } from \"./safety-status.js\";\nimport type {\n BundleCheckResults,\n BundleMetadata,\n BundlePlaceholderArtifact,\n BundleRedactionProfile,\n BundleResolveResult,\n} from \"./types.js\";\n\nconst BUNDLE_NOTE =\n \"Generated locally by AgentInspect. Bundles are derived copies for review — not compliance or security certification. Review before sharing.\";\n\nconst PLACEHOLDER_NOTE =\n \"No eval or performance artifacts were requested for this bundle.\";\n\nexport function buildBundleMetadata(parts: {\n agentInspectVersion: string;\n profile: BundleRedactionProfile;\n resolve: BundleResolveResult;\n checks: BundleCheckResults;\n files: string[];\n createdAt?: string;\n}): BundleMetadata {\n const aggregate = aggregateBundleSafeStatus(\n parts.checks.runs.map((run) => run.status),\n );\n return {\n createdAt: parts.createdAt ?? new Date().toISOString(),\n agentInspectVersion: parts.agentInspectVersion,\n redactionProfile: parts.profile,\n sourceTraceCount: parts.resolve.runIds.length,\n runIds: [...parts.resolve.runIds],\n safeStatus: toMetadataSafeStatus(aggregate),\n files: [...parts.files].sort((a, b) => a.localeCompare(b)),\n note: BUNDLE_NOTE,\n ...(parts.resolve.sessionId !== undefined ? { sessionId: parts.resolve.sessionId } : {}),\n ...(parts.resolve.since !== undefined ? { since: parts.resolve.since } : {}),\n };\n}\n\nexport function buildPlaceholderArtifact(): BundlePlaceholderArtifact {\n return {\n status: \"not_requested\",\n note: PLACEHOLDER_NOTE,\n };\n}\n","import type { BundleCheckResults, BundleMetadata, BundleRedactionReport } from \"./types.js\";\n\nfunction markdownTable(rows: readonly [string, string | number | undefined][]): string {\n const lines = [\"| Field | Value |\", \"| --- | --- |\"];\n for (const [key, value] of rows) {\n lines.push(`| ${key} | ${value ?? \"unknown\"} |`);\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Builds a human-readable bundle summary for `summary.md`.\n */\nexport function buildBundleSummaryMarkdown(parts: {\n metadata: BundleMetadata;\n checks: BundleCheckResults;\n redaction: BundleRedactionReport;\n}): string {\n const { metadata, checks, redaction } = parts;\n const lines: string[] = [\n \"# AgentInspect trace bundle\",\n \"\",\n metadata.note,\n \"\",\n \"## Overview\",\n \"\",\n markdownTable([\n [\"Created\", metadata.createdAt],\n [\"AgentInspect\", metadata.agentInspectVersion],\n [\"Redaction profile\", metadata.redactionProfile],\n [\"Safe status\", metadata.safeStatus],\n [\"Source traces\", metadata.sourceTraceCount],\n [\"Runs\", metadata.runIds.join(\", \")],\n ...(metadata.sessionId ? [[\"Session\", metadata.sessionId] as [string, string]] : []),\n ...(metadata.since ? [[\"Since\", metadata.since] as [string, string]] : []),\n ]),\n \"\",\n \"## Safety checks\",\n \"\",\n `Aggregate: **${checks.aggregateStatus}**`,\n \"\",\n ];\n\n for (const run of checks.runs) {\n lines.push(\n `- \\`${run.runId}\\`: ${run.status} (${run.findings} finding(s), ${run.errors} error(s), ${run.warnings} warning(s))`,\n );\n }\n\n lines.push(\"\", \"## Redaction\", \"\", `Total findings: ${redaction.totalFindings}`, \"\");\n for (const run of redaction.runs) {\n const detectors = run.detectors.length > 0 ? run.detectors.join(\", \") : \"none\";\n lines.push(`- \\`${run.runId}\\`: ${run.findings} finding(s); detectors: ${detectors}`);\n }\n\n lines.push(\n \"\",\n \"## Files\",\n \"\",\n ...metadata.files.map((file) => `- \\`${file}\\``),\n \"\",\n \"_Review every generated artifact before sharing outside your team._\",\n \"\",\n );\n\n return lines.join(\"\\n\");\n}\n","import path from \"node:path\";\n\n/**\n * Normalizes bundle output path. Strips a `.zip` suffix (folder-first MVP).\n */\nexport function normalizeBundleOutputPath(out: string): string {\n const trimmed = out.trim();\n if (trimmed === \"\") {\n throw new Error(\"--out requires a non-empty path.\");\n }\n const resolved = path.resolve(trimmed);\n if (resolved.toLowerCase().endsWith(\".zip\")) {\n return resolved.slice(0, -4);\n }\n return resolved;\n}\n\n/**\n * Default bundle directory when --out is omitted.\n */\nexport function defaultBundleOutputPath(runIds: readonly string[]): string {\n const label = runIds.length === 1 ? runIds[0]! : `multi-${runIds.length}`;\n const stamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n return path.resolve(`agent-inspect-bundle-${label}-${stamp}`);\n}\n","import type { RedactionProfile } from \"../types.js\";\n\nexport type SuiteCaseStatus = \"pass\" | \"fail\" | \"error\" | \"skipped\";\n\nexport type SuiteDiagnosticCode =\n | \"AI_SUITE_CONFIG_INVALID\"\n | \"AI_SUITE_CONFIG_LOAD_FAILED\"\n | \"AI_SUITE_CASE_TRACE_MISSING\"\n | \"AI_SUITE_CASE_CHECK_FAILED\"\n | \"AI_SUITE_CASE_EVAL_FAILED\"\n | \"AI_SUITE_CASE_OBSERVATION_FAILED\"\n | \"AI_SUITE_TRACE_UNREADABLE\";\n\nexport interface SuiteDiagnostic {\n code: SuiteDiagnosticCode;\n severity: \"error\" | \"warning\" | \"info\";\n message: string;\n caseId?: string;\n}\n\nexport interface SuiteCaseConfig {\n id: string;\n trace?: string;\n runId?: string;\n input?: string;\n requireTools?: string[];\n forbidTools?: string[];\n maxDurationMs?: number;\n expectedObservations?: string[];\n}\n\nexport interface SuiteChecksConfig {\n select?: string[];\n run?: {\n maxDurationMs?: number;\n maxDepth?: number;\n };\n tool?: {\n required?: string[];\n forbidden?: string[];\n };\n llm?: {\n allowedModels?: string[];\n maxTotalTokens?: number;\n };\n}\n\nexport interface SuiteEvalConfig {\n requireSuccess?: boolean;\n requiredTools?: string[];\n forbiddenTools?: string[];\n maxDurationMs?: number;\n maxDepth?: number;\n maxRetries?: number;\n maxTotalTokens?: number;\n}\n\nexport interface SuiteArtifactsConfig {\n outputDir?: string;\n}\n\nexport interface SuiteConfig {\n name: string;\n traces: string;\n cases: SuiteCaseConfig[];\n checks?: SuiteChecksConfig;\n eval?: SuiteEvalConfig;\n redactionProfile?: RedactionProfile;\n artifacts?: SuiteArtifactsConfig;\n baseline?: string;\n candidate?: string;\n}\n\nexport interface SuiteCaseResult {\n id: string;\n status: SuiteCaseStatus;\n tracePath?: string;\n runId?: string;\n checkOk?: boolean;\n evalOk?: boolean;\n observationsOk?: boolean;\n message?: string;\n diagnostics: SuiteDiagnostic[];\n}\n\nexport interface SuiteRunSummary {\n passed: number;\n failed: number;\n errors: number;\n skipped: number;\n}\n\nexport interface SuiteRunResult {\n ok: boolean;\n status: \"pass\" | \"fail\" | \"error\";\n suiteName: string;\n configPath: string;\n tracesDir: string;\n startedAt: string;\n finishedAt: string;\n summary: SuiteRunSummary;\n cases: SuiteCaseResult[];\n diagnostics: SuiteDiagnostic[];\n}\n\nexport interface LoadSuiteConfigOptions {\n configPath?: string;\n cwd?: string;\n}\n\nexport interface ValidateSuiteConfigResult {\n ok: boolean;\n diagnostics: SuiteDiagnostic[];\n}\n\nexport interface RunSuiteOptions {\n configPath?: string;\n cwd?: string;\n nowMs?: number;\n}\n\nexport interface RenderSuiteReportOptions {\n format?: \"markdown\" | \"json\";\n}\n\nexport const DEFAULT_SUITE_CONFIG_NAMES = [\n \"agent-inspect.suite.json\",\n \"agent-inspect.suite.js\",\n \"agent-inspect.suite.mjs\",\n \"agent-inspect.suite.cjs\",\n] as const;\n\nexport const DEFAULT_SUITE_ARTIFACTS_DIR = \".agent-inspect/suite-runs\";\n","import { access } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type {\n SuiteCaseConfig,\n SuiteConfig,\n SuiteDiagnostic,\n ValidateSuiteConfigResult,\n} from \"./types.js\";\n\nfunction diagnostic(\n code: SuiteDiagnostic[\"code\"],\n message: string,\n severity: SuiteDiagnostic[\"severity\"] = \"error\",\n caseId?: string,\n): SuiteDiagnostic {\n return { code, message, severity, ...(caseId !== undefined ? { caseId } : {}) };\n}\n\nfunction asString(value: unknown, label: string): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"string\" || value.trim() === \"\") {\n throw new Error(`${label} must be a non-empty string.`);\n }\n return value.trim();\n}\n\nfunction asStringArray(value: unknown, label: string): string[] | undefined {\n if (value === undefined) return undefined;\n if (!Array.isArray(value) || value.some((item) => typeof item !== \"string\")) {\n throw new Error(`${label} must be an array of strings.`);\n }\n return value;\n}\n\nfunction asPositiveNumber(value: unknown, label: string): number | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n throw new Error(`${label} must be a non-negative number.`);\n }\n return value;\n}\n\nfunction validateCaseConfig(\n value: unknown,\n index: number,\n): { caseConfig?: SuiteCaseConfig; diagnostics: SuiteDiagnostic[] } {\n const diagnostics: SuiteDiagnostic[] = [];\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n diagnostics.push(\n diagnostic(\"AI_SUITE_CONFIG_INVALID\", `cases[${index}] must be an object.`),\n );\n return { diagnostics };\n }\n\n const raw = value as Record<string, unknown>;\n try {\n const id = asString(raw.id, `cases[${index}].id`);\n if (id === undefined) {\n diagnostics.push(\n diagnostic(\"AI_SUITE_CONFIG_INVALID\", `cases[${index}].id is required.`),\n );\n return { diagnostics };\n }\n\n const trace = asString(raw.trace, `cases[${index}].trace`);\n const runId = asString(raw.runId, `cases[${index}].runId`);\n const input = asString(raw.input, `cases[${index}].input`);\n\n return {\n caseConfig: {\n id,\n ...(trace !== undefined ? { trace } : {}),\n ...(runId !== undefined ? { runId } : {}),\n ...(input !== undefined ? { input } : {}),\n ...(asStringArray(raw.requireTools, `cases[${index}].requireTools`) !== undefined\n ? { requireTools: asStringArray(raw.requireTools, `cases[${index}].requireTools`) }\n : {}),\n ...(asStringArray(raw.forbidTools, `cases[${index}].forbidTools`) !== undefined\n ? { forbidTools: asStringArray(raw.forbidTools, `cases[${index}].forbidTools`) }\n : {}),\n ...(asPositiveNumber(raw.maxDurationMs, `cases[${index}].maxDurationMs`) !== undefined\n ? {\n maxDurationMs: asPositiveNumber(\n raw.maxDurationMs,\n `cases[${index}].maxDurationMs`,\n ),\n }\n : {}),\n ...(asStringArray(\n raw.expectedObservations,\n `cases[${index}].expectedObservations`,\n ) !== undefined\n ? {\n expectedObservations: asStringArray(\n raw.expectedObservations,\n `cases[${index}].expectedObservations`,\n ),\n }\n : {}),\n },\n diagnostics,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n diagnostics.push(diagnostic(\"AI_SUITE_CONFIG_INVALID\", message));\n return { diagnostics };\n }\n}\n\nexport function normalizeSuiteConfig(value: unknown): SuiteConfig {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new Error(\"Suite config must export an object.\");\n }\n const raw = value as Record<string, unknown>;\n const name = asString(raw.name, \"name\");\n const traces = asString(raw.traces, \"traces\");\n if (name === undefined) throw new Error(\"name is required.\");\n if (traces === undefined) throw new Error(\"traces is required.\");\n\n if (!Array.isArray(raw.cases) || raw.cases.length === 0) {\n throw new Error(\"cases must be a non-empty array.\");\n }\n\n const cases: SuiteCaseConfig[] = [];\n for (let index = 0; index < raw.cases.length; index += 1) {\n const { caseConfig, diagnostics } = validateCaseConfig(raw.cases[index], index);\n if (diagnostics.length > 0) {\n throw new Error(diagnostics.map((item) => item.message).join(\"; \"));\n }\n if (caseConfig !== undefined) cases.push(caseConfig);\n }\n\n const ids = new Set<string>();\n for (const suiteCase of cases) {\n if (ids.has(suiteCase.id)) {\n throw new Error(`Duplicate case id \"${suiteCase.id}\".`);\n }\n ids.add(suiteCase.id);\n }\n\n const redactionProfile =\n raw.redactionProfile === \"local\" ||\n raw.redactionProfile === \"share\" ||\n raw.redactionProfile === \"strict\"\n ? raw.redactionProfile\n : undefined;\n if (\n raw.redactionProfile !== undefined &&\n redactionProfile === undefined\n ) {\n throw new Error('redactionProfile must be \"local\", \"share\", or \"strict\".');\n }\n\n const config: SuiteConfig = { name, traces, cases };\n if (raw.checks !== undefined) {\n if (typeof raw.checks !== \"object\" || Array.isArray(raw.checks)) {\n throw new Error(\"checks must be an object.\");\n }\n config.checks = raw.checks as SuiteConfig[\"checks\"];\n }\n if (raw.eval !== undefined) {\n if (typeof raw.eval !== \"object\" || Array.isArray(raw.eval)) {\n throw new Error(\"eval must be an object.\");\n }\n config.eval = raw.eval as SuiteConfig[\"eval\"];\n }\n if (raw.artifacts !== undefined) {\n if (typeof raw.artifacts !== \"object\" || Array.isArray(raw.artifacts)) {\n throw new Error(\"artifacts must be an object.\");\n }\n const outputDir = asString(\n (raw.artifacts as Record<string, unknown>).outputDir,\n \"artifacts.outputDir\",\n );\n config.artifacts = outputDir !== undefined ? { outputDir } : {};\n }\n if (raw.baseline !== undefined) {\n const baseline = asString(raw.baseline, \"baseline\");\n if (baseline !== undefined) config.baseline = baseline;\n }\n if (raw.candidate !== undefined) {\n const candidate = asString(raw.candidate, \"candidate\");\n if (candidate !== undefined) config.candidate = candidate;\n }\n if (redactionProfile !== undefined) config.redactionProfile = redactionProfile;\n return config;\n}\n\nexport async function validateSuiteConfig(\n config: SuiteConfig,\n options: { configDir: string },\n): Promise<ValidateSuiteConfigResult> {\n const diagnostics: SuiteDiagnostic[] = [];\n const tracesDir = path.resolve(options.configDir, config.traces);\n try {\n await access(tracesDir);\n } catch {\n diagnostics.push(\n diagnostic(\"AI_SUITE_CONFIG_INVALID\", `traces directory not found: ${tracesDir}`),\n );\n }\n\n for (const suiteCase of config.cases) {\n if (suiteCase.input !== undefined) {\n const inputPath = path.resolve(options.configDir, suiteCase.input);\n try {\n await access(inputPath);\n } catch {\n diagnostics.push(\n diagnostic(\n \"AI_SUITE_CONFIG_INVALID\",\n `input fixture not found: ${suiteCase.input}`,\n \"warning\",\n suiteCase.id,\n ),\n );\n }\n }\n }\n\n return { ok: diagnostics.every((item) => item.severity !== \"error\"), diagnostics };\n}\n","import { access, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport {\n DEFAULT_SUITE_CONFIG_NAMES,\n type LoadSuiteConfigOptions,\n type SuiteConfig,\n type SuiteDiagnostic,\n} from \"./types.js\";\nimport { normalizeSuiteConfig } from \"./validate.js\";\n\nconst CONFIG_EXTENSIONS = new Set([\".json\", \".js\", \".mjs\", \".cjs\"]);\nconst TS_CONFIG_EXTENSIONS = new Set([\".ts\", \".mts\", \".cts\"]);\n\nfunction diagnostic(\n code: SuiteDiagnostic[\"code\"],\n message: string,\n): SuiteDiagnostic {\n return { code, message, severity: \"error\" };\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n await access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function resolveSuiteConfigPath(\n options: LoadSuiteConfigOptions = {},\n): Promise<string> {\n const cwd = path.resolve(options.cwd ?? process.cwd());\n if (options.configPath !== undefined && options.configPath.trim() !== \"\") {\n return path.resolve(cwd, options.configPath.trim());\n }\n\n for (const name of DEFAULT_SUITE_CONFIG_NAMES) {\n const candidate = path.join(cwd, name);\n if (await fileExists(candidate)) return candidate;\n }\n\n throw new Error(\n `No suite config found. Create one with \\`agent-inspect suite init\\` or pass --config.`,\n );\n}\n\nexport async function loadSuiteConfig(\n options: LoadSuiteConfigOptions = {},\n): Promise<{ config: SuiteConfig; configPath: string; configDir: string }> {\n let configPath: string;\n try {\n configPath = await resolveSuiteConfigPath(options);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw Object.assign(new Error(message), {\n diagnostics: [diagnostic(\"AI_SUITE_CONFIG_LOAD_FAILED\", message)],\n });\n }\n\n const extension = path.extname(configPath);\n if (TS_CONFIG_EXTENSIONS.has(extension)) {\n const message =\n \"TypeScript suite configs require an explicit precompiled JavaScript config or future --config-loader support.\";\n throw Object.assign(new Error(message), {\n diagnostics: [diagnostic(\"AI_SUITE_CONFIG_LOAD_FAILED\", message)],\n });\n }\n if (!CONFIG_EXTENSIONS.has(extension)) {\n const message = \"Unsupported suite config extension. Use .json, .js, .mjs, or .cjs.\";\n throw Object.assign(new Error(message), {\n diagnostics: [diagnostic(\"AI_SUITE_CONFIG_LOAD_FAILED\", message)],\n });\n }\n\n try {\n let raw: unknown;\n if (extension === \".json\") {\n raw = JSON.parse(await readFile(configPath, \"utf-8\"));\n } else {\n const mod = await import(pathToFileURL(configPath).href);\n raw = \"default\" in mod ? mod.default : mod;\n }\n const config = normalizeSuiteConfig(raw);\n return {\n config,\n configPath,\n configDir: path.dirname(configPath),\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw Object.assign(new Error(message), {\n diagnostics: [diagnostic(\"AI_SUITE_CONFIG_LOAD_FAILED\", message)],\n });\n }\n}\n\nexport function defaultSuiteConfigTemplate(): SuiteConfig {\n return {\n name: \"my-agent-suite\",\n traces: \"./.agent-inspect\",\n cases: [\n {\n id: \"example-case\",\n runId: \"example-run\",\n requireTools: [\"searchDocs\"],\n maxDurationMs: 30_000,\n expectedObservations: [\"answerReady\"],\n },\n ],\n checks: {\n select: [\"run.status\"],\n },\n redactionProfile: \"local\",\n artifacts: {\n outputDir: \".agent-inspect/suite-runs\",\n },\n };\n}\n","import type { TraceReadResult, TraceReadWarning } from \"../readers/index.js\";\nimport type {\n AttributionConfidence,\n InspectNode,\n InspectRunTree,\n} from \"../types/inspect-event.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport {\n extractOutcomesFromPersistedEvents,\n outcomesMatchingStatus,\n type ObservedOutcomeStatus,\n} from \"../outcomes/index.js\";\n\n/**\n * Experimental trace-check finding severity.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport type TraceCheckSeverity = \"error\" | \"warning\" | \"info\";\n\n/**\n * Experimental trace-check rule category.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport type TraceCheckRuleCategory =\n | \"run\"\n | \"tool\"\n | \"llm\"\n | \"structure\"\n | \"baseline\"\n | \"safety\"\n | \"reader\";\n\n/**\n * Experimental trace-check finding status.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport type TraceCheckFindingStatus = \"pass\" | \"fail\" | \"warning\";\n\n/**\n * Experimental trace-check aggregate status.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport type TraceCheckStatus = \"pass\" | \"fail\" | \"error\";\n\n/**\n * Experimental stable diagnostic code for check execution and input errors.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport type TraceCheckDiagnosticCode =\n | \"AI_CHECK_INVALID_ARGUMENTS\"\n | \"AI_CHECK_INVALID_CONFIG\"\n | \"AI_CHECK_CONFIG_LOAD_FAILED\"\n | \"AI_CHECK_TRACE_UNREADABLE\"\n | \"AI_CHECK_UNSUPPORTED_FORMAT\"\n | \"AI_CHECK_AMBIGUOUS_FORMAT\"\n | \"AI_CHECK_RUN_SELECTION_REQUIRED\"\n | \"AI_CHECK_BASELINE_UNREADABLE\"\n | \"AI_CHECK_BASELINE_INCOMPATIBLE\"\n | \"AI_CHECK_RULE_FAILED\"\n | \"AI_CHECK_INTERNAL_ERROR\";\n\n/**\n * Experimental evidence pointing at trace data relevant to a finding.\n *\n * Evidence intentionally identifies runs/events/spans and bounded paths rather\n * than embedding raw prompts, outputs, request bodies, headers, or tool payloads.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckEvidence {\n runId?: string;\n eventId?: string;\n parentId?: string;\n traceId?: string;\n spanId?: string;\n kind?: string;\n name?: string;\n status?: string;\n path?: string;\n}\n\n/**\n * Experimental finding emitted by a trace-check rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckFinding {\n ruleId: string;\n severity: TraceCheckSeverity;\n status: TraceCheckFindingStatus;\n message: string;\n expected?: unknown;\n actual?: unknown;\n evidence: TraceCheckEvidence[];\n}\n\n/**\n * Experimental diagnostic emitted when check execution cannot complete normally.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckDiagnostic {\n code: TraceCheckDiagnosticCode;\n message: string;\n severity: TraceCheckSeverity;\n ruleId?: string;\n}\n\n/**\n * Experimental input projection for trace checks.\n *\n * The `read` value must come from `agent-inspect/readers` or an equivalent\n * already-normalized `TraceReadResult`. The checks engine does not read files\n * or reparse source payloads.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckInput {\n read: TraceReadResult;\n selectedRun?: InspectRunTree;\n sourceLabel?: string;\n}\n\n/**\n * Experimental normalized facts available to trace-check rules.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckFacts {\n format: string;\n runs: readonly InspectRunTree[];\n events: readonly PersistedInspectEvent[];\n readerWarnings: readonly TraceReadWarning[];\n unsupportedFields: readonly string[];\n sourceFiles: readonly string[];\n nodesByEventId: ReadonlyMap<string, InspectNode>;\n childrenByParentId: ReadonlyMap<string, readonly InspectNode[]>;\n rootNodes: readonly InspectNode[];\n}\n\n/**\n * Experimental rule evaluation context.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckContext extends TraceCheckFacts {\n selectedRun?: InspectRunTree;\n sourceLabel?: string;\n}\n\n/**\n * Experimental trace-check rule definition.\n *\n * Rules are synchronous and pure: they receive normalized facts and return\n * findings without reading files, mutating input, or performing network I/O.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckRule {\n id: string;\n category: TraceCheckRuleCategory;\n defaultSeverity: TraceCheckSeverity;\n evaluate(context: TraceCheckContext): readonly TraceCheckFinding[];\n}\n\n/**\n * Experimental options for `runTraceChecks`.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RunTraceChecksOptions {\n rules?: readonly TraceCheckRule[];\n select?: readonly string[];\n runId?: string;\n}\n\n/**\n * Experimental options for the built-in run status rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RunStatusRuleOptions {\n expected?: \"ok\" | \"error\" | \"running\";\n allowIncomplete?: boolean;\n}\n\n/**\n * Experimental options for the built-in run duration rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RunDurationRuleOptions {\n maxDurationMs: number;\n}\n\n/**\n * Experimental options for the built-in max step duration rule.\n */\nexport interface MaxStepDurationRuleOptions {\n maxDurationMs: number;\n}\n\n/**\n * Experimental options for stall detection (running / incomplete events).\n */\nexport interface StallDetectionRuleOptions {\n /** When true, events with startedAt but no endedAt also fail. */\n requireEndedAt?: boolean;\n}\n\n/**\n * Experimental options for the built-in event count rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RunEventCountRuleOptions {\n kind?: PersistedInspectEvent[\"kind\"];\n min?: number;\n max?: number;\n}\n\n/**\n * Experimental options for the built-in run depth rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RunDepthRuleOptions {\n maxDepth: number;\n}\n\n/**\n * Experimental options for the built-in tool usage rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface ToolUsageRuleOptions {\n required?: readonly string[];\n forbidden?: readonly string[];\n allowed?: readonly string[];\n minCount?: number;\n maxCount?: number;\n}\n\n/**\n * Experimental options for the built-in tool ordering rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface ToolOrderingRuleOptions {\n before: string;\n after: string;\n}\n\n/**\n * Experimental options for the built-in tool failure rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface ToolFailureRuleOptions {\n maxFailures?: number;\n maxRetries?: number;\n}\n\n/**\n * Experimental options for the built-in LLM usage rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface LlmUsageRuleOptions {\n allowedModels?: readonly string[];\n allowedProviders?: readonly string[];\n maxCalls?: number;\n maxInputTokens?: number;\n maxOutputTokens?: number;\n maxTotalTokens?: number;\n maxCachedTokens?: number;\n finishReasons?: readonly string[];\n}\n\n/**\n * Experimental options for the built-in structure incomplete rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface StructureIncompleteRuleOptions {\n allowRunning?: boolean;\n requireEndedAtForStarted?: boolean;\n}\n\n/**\n * Experimental options for the built-in structure orphan rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface StructureOrphanRuleOptions {\n allowMarkedUnresolved?: boolean;\n}\n\n/**\n * Experimental options for the built-in structure relationship rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface StructureRelationshipRuleOptions {\n minConfidence?: AttributionConfidence;\n requireParentBeforeChild?: boolean;\n requireTraceParentSpan?: boolean;\n}\n\n/**\n * Experimental options for the built-in structure parallel-width rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface StructureParallelWidthRuleOptions {\n maxChildren?: number;\n maxConcurrent?: number;\n}\n\n/**\n * Experimental options shared by built-in signal rules.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceSignalRuleOptions {\n required?: readonly string[];\n forbidden?: readonly string[];\n allowed?: readonly string[];\n minCount?: number;\n maxCount?: number;\n}\n\n/**\n * Experimental options for the built-in retrieval signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RetrievalRuleOptions extends TraceSignalRuleOptions {}\n\n/**\n * Experimental options for the built-in guardrail signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface GuardrailRuleOptions extends TraceSignalRuleOptions {}\n\n/**\n * Experimental options for the built-in decision signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface DecisionRuleOptions extends TraceSignalRuleOptions {}\n\n/**\n * Experimental options for the built-in safety redaction rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface SafetyRedactionRuleOptions {\n sensitiveKeys?: readonly string[];\n redactedMarkers?: readonly string[];\n maxFindings?: number;\n}\n\n/**\n * Experimental options for the built-in raw content path rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface SafetyRawContentRuleOptions {\n forbiddenKeys?: readonly string[];\n includeSummaries?: boolean;\n maxFindings?: number;\n}\n\n/**\n * Experimental secret pattern used by the built-in secret safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface SafetySecretPattern {\n id: string;\n pattern: RegExp;\n}\n\n/**\n * Experimental options for the built-in secret pattern safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface SafetySecretPatternRuleOptions {\n patterns?: readonly SafetySecretPattern[];\n maxStringLength?: number;\n maxFindings?: number;\n}\n\n/**\n * Experimental options for the built-in oversized attribute safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface SafetyOversizedAttributeRuleOptions {\n maxStringLength?: number;\n maxArrayLength?: number;\n maxObjectKeys?: number;\n maxSerializedBytes?: number;\n maxFindings?: number;\n}\n\n/**\n * Experimental options for the built-in baseline regression rule.\n *\n * The baseline must already be normalized through `agent-inspect/readers` or an\n * equivalent `TraceReadResult`; this rule does not read files or parse traces.\n * `durationToleranceMs` defaults to `0`, meaning exact duration comparison.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface BaselineRegressionRuleOptions {\n baseline: TraceCheckInput;\n baselineRunId?: string;\n durationToleranceMs?: number;\n compareFormat?: boolean;\n}\n\n/**\n * Experimental aggregate counts for trace-check results.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckSummary {\n passed: number;\n failed: number;\n warnings: number;\n errors: number;\n}\n\n/**\n * Experimental trace-check result.\n *\n * `status: \"fail\"` means rules ran and at least one error-severity finding\n * failed. `status: \"error\"` means execution could not complete because of\n * invalid input, invalid rule selection, or a thrown rule error.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckResult {\n ok: boolean;\n status: TraceCheckStatus;\n format: string;\n runId?: string;\n summary: TraceCheckSummary;\n findings: TraceCheckFinding[];\n diagnostics: TraceCheckDiagnostic[];\n}\n\nconst SEVERITY_RANK: Record<TraceCheckSeverity, number> = {\n error: 0,\n warning: 1,\n info: 2,\n};\n\nconst STATUS_RANK: Record<TraceCheckFindingStatus, number> = {\n fail: 0,\n warning: 1,\n pass: 2,\n};\n\nconst CONFIDENCE_RANK: Record<AttributionConfidence, number> = {\n unknown: 0,\n heuristic: 1,\n correlated: 2,\n explicit: 3,\n};\n\nconst DEFAULT_SENSITIVE_KEYS = [\n \"authorization\",\n \"cookie\",\n \"token\",\n \"apikey\",\n \"api_key\",\n \"password\",\n \"secret\",\n \"email\",\n];\n\nconst DEFAULT_RAW_CONTENT_KEYS = [\n \"body\",\n \"headers\",\n \"input\",\n \"messages\",\n \"output\",\n \"payload\",\n \"prompt\",\n \"requestbody\",\n \"request_body\",\n \"responsebody\",\n \"response_body\",\n \"rawprompt\",\n \"raw_prompt\",\n \"rawoutput\",\n \"raw_output\",\n \"toolinput\",\n \"tool_input\",\n \"tooloutput\",\n \"tool_output\",\n];\n\nconst DEFAULT_SECRET_PATTERNS: readonly SafetySecretPattern[] = [\n { id: \"bearer-token\", pattern: /Bearer\\s+[A-Za-z0-9._~+/-]{12,}=*/ },\n { id: \"openai-key\", pattern: /sk-[A-Za-z0-9_-]{16,}/ },\n { id: \"aws-access-key\", pattern: /AKIA[0-9A-Z]{16}/ },\n { id: \"github-token\", pattern: /gh[opsu]_[A-Za-z0-9_]{20,}/ },\n { id: \"key-value-secret\", pattern: /(api[_-]?key|token|password|secret)=\\S{8,}/i },\n];\n\ntype EventValueEntry = {\n event: PersistedInspectEvent;\n path: string;\n key?: string;\n value: unknown;\n};\n\nfunction compareStrings(a: string | undefined, b: string | undefined): number {\n return (a ?? \"\").localeCompare(b ?? \"\");\n}\n\nfunction diagnostic(\n code: TraceCheckDiagnosticCode,\n message: string,\n ruleId?: string,\n): TraceCheckDiagnostic {\n return {\n code,\n message,\n severity: \"error\",\n ...(ruleId ? { ruleId } : {}),\n };\n}\n\nfunction emptySummary(): TraceCheckSummary {\n return {\n passed: 0,\n failed: 0,\n warnings: 0,\n errors: 0,\n };\n}\n\nfunction errorResult(\n input: TraceCheckInput,\n diagnostics: readonly TraceCheckDiagnostic[],\n selectedRun?: InspectRunTree,\n): TraceCheckResult {\n return {\n ok: false,\n status: \"error\",\n format: input.read.format,\n ...(selectedRun ? { runId: selectedRun.runId } : {}),\n summary: {\n ...emptySummary(),\n errors: diagnostics.filter((item) => item.severity === \"error\").length,\n },\n findings: [],\n diagnostics: [...diagnostics],\n };\n}\n\nfunction flattenNodes(nodes: readonly InspectNode[]): InspectNode[] {\n return nodes.flatMap((node) => [node, ...flattenNodes(node.children)]);\n}\n\nfunction buildFacts(input: TraceCheckInput, selectedRun?: InspectRunTree): TraceCheckFacts {\n const scopedRuns = selectedRun ? [selectedRun] : input.read.runs;\n const scopedRunIds = new Set(scopedRuns.map((run) => run.runId));\n const scopedEvents =\n selectedRun === undefined\n ? input.read.events\n : input.read.events.filter((event) => scopedRunIds.has(event.runId));\n const nodes = flattenNodes(scopedRuns.flatMap((run) => run.children));\n const nodesByEventId = new Map<string, InspectNode>();\n const childrenByParentId = new Map<string, InspectNode[]>();\n\n for (const node of nodes) {\n nodesByEventId.set(node.event.eventId, node);\n const parentId = node.event.parentId;\n if (parentId) {\n const children = childrenByParentId.get(parentId) ?? [];\n children.push(node);\n childrenByParentId.set(parentId, children);\n }\n }\n\n return {\n format: input.read.format,\n runs: Object.freeze([...input.read.runs]),\n events: Object.freeze([...scopedEvents]),\n readerWarnings: Object.freeze([...input.read.warnings]),\n unsupportedFields: Object.freeze([...input.read.unsupportedFields]),\n sourceFiles: Object.freeze([...input.read.sourceFiles]),\n nodesByEventId,\n childrenByParentId,\n rootNodes: Object.freeze(scopedRuns.flatMap((run) => run.children)),\n };\n}\n\nfunction resolveSelectedRun(\n input: TraceCheckInput,\n runId?: string,\n): { run?: InspectRunTree; diagnostics: TraceCheckDiagnostic[] } {\n if (input.selectedRun) {\n if (runId && input.selectedRun.runId !== runId) {\n return {\n diagnostics: [\n diagnostic(\n \"AI_CHECK_INVALID_ARGUMENTS\",\n `Selected run ${input.selectedRun.runId} does not match requested run ${runId}.`,\n ),\n ],\n };\n }\n return { run: input.selectedRun, diagnostics: [] };\n }\n\n if (runId) {\n const run = input.read.runs.find((candidate) => candidate.runId === runId);\n if (!run) {\n return {\n diagnostics: [\n diagnostic(\"AI_CHECK_RUN_SELECTION_REQUIRED\", `Run not found: ${runId}.`),\n ],\n };\n }\n return { run, diagnostics: [] };\n }\n\n if (input.read.runs.length === 1) {\n return { run: input.read.runs[0], diagnostics: [] };\n }\n\n if (input.read.runs.length === 0) {\n return {\n diagnostics: [\n diagnostic(\"AI_CHECK_RUN_SELECTION_REQUIRED\", \"No runs are available for checks.\"),\n ],\n };\n }\n\n return {\n diagnostics: [\n diagnostic(\n \"AI_CHECK_RUN_SELECTION_REQUIRED\",\n \"Multiple runs are available; select a run before executing checks.\",\n ),\n ],\n };\n}\n\nfunction selectRules(\n rules: readonly TraceCheckRule[],\n selectedIds: readonly string[] | undefined,\n): { rules: TraceCheckRule[]; diagnostics: TraceCheckDiagnostic[] } {\n const diagnostics: TraceCheckDiagnostic[] = [];\n const byId = new Map<string, TraceCheckRule>();\n\n for (const rule of rules) {\n if (byId.has(rule.id)) {\n diagnostics.push(\n diagnostic(\"AI_CHECK_INVALID_CONFIG\", `Duplicate trace check rule id: ${rule.id}.`, rule.id),\n );\n continue;\n }\n byId.set(rule.id, rule);\n }\n\n if (selectedIds && selectedIds.length > 0) {\n const selected = new Set(selectedIds);\n for (const id of selected) {\n if (!byId.has(id)) {\n diagnostics.push(\n diagnostic(\"AI_CHECK_INVALID_CONFIG\", `Unknown trace check rule id: ${id}.`, id),\n );\n }\n }\n return {\n rules: [...byId.values()].filter((rule) => selected.has(rule.id)).sort(compareRules),\n diagnostics,\n };\n }\n\n return { rules: [...byId.values()].sort(compareRules), diagnostics };\n}\n\nfunction compareRules(a: TraceCheckRule, b: TraceCheckRule): number {\n return a.id.localeCompare(b.id);\n}\n\nfunction eventTimestamp(\n finding: TraceCheckFinding,\n eventById: ReadonlyMap<string, PersistedInspectEvent>,\n): string {\n const eventId = finding.evidence[0]?.eventId;\n return eventId ? eventById.get(eventId)?.timestamp ?? \"\" : \"\";\n}\n\nfunction compareFindings(\n eventById: ReadonlyMap<string, PersistedInspectEvent>,\n): (a: TraceCheckFinding, b: TraceCheckFinding) => number {\n return (a, b) => {\n if (SEVERITY_RANK[a.severity] !== SEVERITY_RANK[b.severity]) {\n return SEVERITY_RANK[a.severity] - SEVERITY_RANK[b.severity];\n }\n const byRule = a.ruleId.localeCompare(b.ruleId);\n if (byRule !== 0) return byRule;\n if (STATUS_RANK[a.status] !== STATUS_RANK[b.status]) {\n return STATUS_RANK[a.status] - STATUS_RANK[b.status];\n }\n const byRun = compareStrings(a.evidence[0]?.runId, b.evidence[0]?.runId);\n if (byRun !== 0) return byRun;\n const byTime = eventTimestamp(a, eventById).localeCompare(eventTimestamp(b, eventById));\n if (byTime !== 0) return byTime;\n const byEvent = compareStrings(a.evidence[0]?.eventId, b.evidence[0]?.eventId);\n if (byEvent !== 0) return byEvent;\n return compareStrings(a.evidence[0]?.path, b.evidence[0]?.path);\n };\n}\n\nfunction normalizeFinding(rule: TraceCheckRule, finding: TraceCheckFinding): TraceCheckFinding {\n return {\n ruleId: finding.ruleId || rule.id,\n severity: finding.severity ?? rule.defaultSeverity,\n status: finding.status,\n message: finding.message,\n ...(finding.expected !== undefined ? { expected: finding.expected } : {}),\n ...(finding.actual !== undefined ? { actual: finding.actual } : {}),\n evidence: [...(finding.evidence ?? [])],\n };\n}\n\nfunction summarize(\n findings: readonly TraceCheckFinding[],\n diagnostics: readonly TraceCheckDiagnostic[],\n): TraceCheckSummary {\n return {\n passed: findings.filter((finding) => finding.status === \"pass\").length,\n failed: findings.filter(\n (finding) => finding.status === \"fail\" && finding.severity === \"error\",\n ).length,\n warnings: findings.filter(\n (finding) => finding.status === \"warning\" || finding.severity === \"warning\",\n ).length,\n errors: diagnostics.filter((item) => item.severity === \"error\").length,\n };\n}\n\nfunction stringAttr(event: PersistedInspectEvent, keys: readonly string[]): string | undefined {\n for (const key of keys) {\n const value = event.attributes?.[key];\n if (typeof value === \"string\" && value.trim() !== \"\") return value;\n }\n return undefined;\n}\n\nfunction numericAttr(event: PersistedInspectEvent, keys: readonly string[]): number | undefined {\n for (const key of keys) {\n const value = event.attributes?.[key];\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n }\n return undefined;\n}\n\nfunction booleanAttr(event: PersistedInspectEvent, keys: readonly string[]): boolean | undefined {\n for (const key of keys) {\n const value = event.attributes?.[key];\n if (typeof value === \"boolean\") return value;\n }\n return undefined;\n}\n\nfunction stripPrefix(name: string, prefixes: readonly string[]): string {\n for (const prefix of prefixes) {\n if (name.startsWith(prefix)) return name.slice(prefix.length);\n }\n return name;\n}\n\nfunction eventEvidence(event: PersistedInspectEvent, path?: string): TraceCheckEvidence {\n return {\n runId: event.runId,\n eventId: event.eventId,\n parentId: event.parentId,\n traceId: event.trace?.traceId,\n spanId: event.trace?.spanId,\n kind: event.kind,\n name: event.name,\n status: event.status,\n ...(path ? { path } : {}),\n };\n}\n\nfunction runEvidence(run: InspectRunTree | undefined): TraceCheckEvidence[] {\n return run ? [{ runId: run.runId, name: run.name, status: run.status }] : [];\n}\n\nfunction failFinding(\n ruleId: string,\n message: string,\n evidence: readonly TraceCheckEvidence[],\n expected?: unknown,\n actual?: unknown,\n): TraceCheckFinding {\n return {\n ruleId,\n severity: \"error\",\n status: \"fail\",\n message,\n ...(expected !== undefined ? { expected } : {}),\n ...(actual !== undefined ? { actual } : {}),\n evidence: [...evidence],\n };\n}\n\nfunction toolName(event: PersistedInspectEvent): string {\n return (\n stringAttr(event, [\"toolName\", \"tool\"]) ??\n stripPrefix(event.name, [\"tool:\", \"function:\", \"mcp-tools:\"])\n );\n}\n\nfunction llmModel(event: PersistedInspectEvent): string | undefined {\n return (\n stringAttr(event, [\"model\", \"modelId\", \"responseModelId\", \"modelName\", \"model_name\"]) ??\n stripPrefix(event.name, [\"llm:\", \"generation:\", \"transcription:\", \"speech:\"])\n );\n}\n\nfunction llmProvider(event: PersistedInspectEvent): string | undefined {\n return stringAttr(event, [\"provider\", \"providerName\", \"provider_name\"]);\n}\n\nfunction llmFinishReason(event: PersistedInspectEvent): string | undefined {\n return stringAttr(event, [\"finishReason\", \"rawFinishReason\", \"finish_reason\"]);\n}\n\nfunction retryCount(event: PersistedInspectEvent): number | undefined {\n return numericAttr(event, [\"retryCount\", \"retryAttempt\", \"retry_attempt\", \"attempt\"]);\n}\n\nfunction finishedEvents(context: TraceCheckContext, kind?: PersistedInspectEvent[\"kind\"]): PersistedInspectEvent[] {\n return context.events.filter(\n (event) =>\n (kind === undefined || event.kind === kind) &&\n event.status !== \"running\",\n );\n}\n\nfunction firstIndexByName(events: readonly PersistedInspectEvent[]): Map<string, number> {\n const index = new Map<string, number>();\n for (const [position, event] of events.entries()) {\n const name = toolName(event);\n if (!index.has(name)) index.set(name, position);\n }\n return index;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction eventMap(events: readonly PersistedInspectEvent[]): Map<string, PersistedInspectEvent> {\n return new Map(events.map((event) => [event.eventId, event]));\n}\n\nfunction parseEventTime(value: string | undefined): number | undefined {\n if (!value) return undefined;\n const parsed = Date.parse(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction eventStartMs(event: PersistedInspectEvent): number | undefined {\n return parseEventTime(event.startedAt) ?? parseEventTime(event.timestamp);\n}\n\nfunction eventEndMs(event: PersistedInspectEvent): number | undefined {\n const endedAt = parseEventTime(event.endedAt);\n if (endedAt !== undefined) return endedAt;\n const startedAt = eventStartMs(event);\n if (\n startedAt !== undefined &&\n event.durationMs !== undefined &&\n Number.isFinite(event.durationMs)\n ) {\n return startedAt + event.durationMs;\n }\n return undefined;\n}\n\nfunction sortedStrings(values: readonly string[] | undefined): string[] {\n return [...(values ?? [])].sort((a, b) => a.localeCompare(b));\n}\n\nfunction normalizedKey(value: string): string {\n return value.toLowerCase().replace(/[^a-z0-9_]/g, \"\");\n}\n\nfunction lastPathSegment(path: string): string {\n const parts = path.split(\".\");\n return parts[parts.length - 1] ?? path;\n}\n\nfunction valueType(value: unknown): string {\n if (Array.isArray(value)) return \"array\";\n if (value === null) return \"null\";\n return typeof value;\n}\n\nfunction serializedByteLength(value: unknown): number | undefined {\n try {\n return Buffer.byteLength(JSON.stringify(value), \"utf-8\");\n } catch {\n return undefined;\n }\n}\n\nfunction pushValueEntries(\n entries: EventValueEntry[],\n event: PersistedInspectEvent,\n value: unknown,\n path: string,\n key?: string,\n depth = 0,\n): void {\n entries.push({ event, path, key, value });\n if (depth >= 8) return;\n\n if (Array.isArray(value)) {\n for (const [index, item] of value.entries()) {\n pushValueEntries(entries, event, item, `${path}.${index}`, String(index), depth + 1);\n }\n return;\n }\n\n if (!isRecord(value)) return;\n for (const nestedKey of Object.keys(value).sort((a, b) => a.localeCompare(b))) {\n pushValueEntries(\n entries,\n event,\n value[nestedKey],\n `${path}.${nestedKey}`,\n nestedKey,\n depth + 1,\n );\n }\n}\n\nfunction eventValueEntries(\n event: PersistedInspectEvent,\n options: { includeSummaries?: boolean; includeError?: boolean } = {},\n): EventValueEntry[] {\n const entries: EventValueEntry[] = [];\n if (event.attributes !== undefined) {\n pushValueEntries(entries, event, event.attributes, \"attributes\", \"attributes\");\n }\n if (options.includeSummaries) {\n if (event.inputSummary !== undefined) {\n pushValueEntries(entries, event, event.inputSummary, \"inputSummary\", \"inputSummary\");\n }\n if (event.outputSummary !== undefined) {\n pushValueEntries(entries, event, event.outputSummary, \"outputSummary\", \"outputSummary\");\n }\n }\n if (options.includeError && event.error !== undefined) {\n pushValueEntries(entries, event, event.error, \"error\", \"error\");\n }\n return entries;\n}\n\nfunction limitFindings(\n findings: TraceCheckFinding[],\n maxFindings: number | undefined,\n): TraceCheckFinding[] {\n if (maxFindings === undefined || findings.length <= maxFindings) return findings;\n return findings.slice(0, Math.max(0, maxFindings));\n}\n\nfunction hasRedactionMarker(value: string, markers: readonly string[]): boolean {\n return markers.some((marker) => value.includes(marker)) || /^\\[HASH:[A-Za-z0-9_-]+\\]$/.test(value);\n}\n\nfunction isSensitiveKey(key: string | undefined, sensitiveKeys: readonly string[]): boolean {\n if (!key) return false;\n const normalized = normalizedKey(key);\n return sensitiveKeys.some((sensitive) => normalized.includes(normalizedKey(sensitive)));\n}\n\nfunction isRawContentKey(key: string | undefined, forbiddenKeys: readonly string[]): boolean {\n if (!key) return false;\n const normalized = normalizedKey(key);\n return forbiddenKeys.some((forbidden) => normalized === normalizedKey(forbidden));\n}\n\nfunction parentMarkedUnresolved(event: PersistedInspectEvent): boolean {\n if (\n booleanAttr(event, [\n \"parentUnresolved\",\n \"unresolvedParent\",\n \"relationshipUnresolved\",\n \"unresolvedRelationship\",\n ]) === true\n ) {\n return true;\n }\n const resolution = stringAttr(event, [\n \"parentResolution\",\n \"relationshipResolution\",\n \"relationshipStatus\",\n ]);\n return resolution === \"unresolved\" || resolution === \"missing-parent\";\n}\n\nfunction signalName(\n event: PersistedInspectEvent,\n attributeKeys: readonly string[],\n prefixes: readonly string[],\n): string {\n return stringAttr(event, attributeKeys) ?? stripPrefix(event.name, prefixes);\n}\n\nfunction guardrailEvents(context: TraceCheckContext): PersistedInspectEvent[] {\n return finishedEvents().filter((event) => {\n const name = event.name.toLowerCase();\n if (name.startsWith(\"guardrail:\") || name.includes(\".guardrail.\")) return true;\n return stringAttr(event, [\"guardrailName\", \"guardrail\", \"guardrailId\"]) !== undefined;\n });\n\n function finishedEvents(): PersistedInspectEvent[] {\n return context.events.filter((event) => event.status !== \"running\");\n }\n}\n\nfunction retryValue(event: PersistedInspectEvent): number {\n return retryCount(event) ?? 0;\n}\n\nfunction eventDurationMs(event: PersistedInspectEvent): number | undefined {\n if (event.durationMs !== undefined) return event.durationMs;\n const start = eventStartMs(event);\n const end = eventEndMs(event);\n return start !== undefined && end !== undefined && end >= start ? end - start : undefined;\n}\n\nfunction treeShape(nodes: readonly InspectNode[]): string[] {\n const lines: string[] = [];\n const visit = (node: InspectNode, path: string) => {\n lines.push(`${path}:${node.event.kind}:${node.event.name}:${node.event.status ?? \"unknown\"}`);\n node.children.forEach((child, index) => visit(child, `${path}.${index}`));\n };\n nodes.forEach((node, index) => visit(node, String(index)));\n return lines;\n}\n\nfunction statusShape(context: TraceCheckContext): string[] {\n return context.events\n .map((event) => `${event.kind}:${event.name}:${event.status ?? \"unknown\"}`)\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction toolShape(context: TraceCheckContext): string[] {\n return finishedEvents(context, \"TOOL\").map((event) =>\n [\n toolName(event),\n event.status ?? \"unknown\",\n retryValue(event),\n eventDurationMs(event) ?? \"unknown\",\n ].join(\":\"),\n );\n}\n\nfunction llmShape(context: TraceCheckContext): string[] {\n return finishedEvents(context, \"LLM\").map((event) =>\n [\n llmProvider(event) ?? \"unknown\",\n llmModel(event) ?? \"unknown\",\n llmFinishReason(event) ?? \"unknown\",\n event.tokenUsage?.input ?? 0,\n event.tokenUsage?.output ?? 0,\n event.tokenUsage?.total ?? 0,\n event.tokenUsage?.cached ?? 0,\n ].join(\":\"),\n );\n}\n\nfunction errorShape(context: TraceCheckContext): string[] {\n return context.events\n .filter((event) => event.status === \"error\" || event.error !== undefined)\n .map((event) =>\n [\n event.kind,\n event.name,\n event.error?.name ?? \"Error\",\n event.error?.code ?? \"unknown\",\n ].join(\":\"),\n )\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction retrievalShape(context: TraceCheckContext): string[] {\n return finishedEvents(context, \"RETRIEVER\")\n .map((event) =>\n signalName(event, [\"retrievalName\", \"retrieverName\", \"retriever\"], [\"retriever:\", \"retrieval:\"]),\n )\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction guardrailShape(context: TraceCheckContext): string[] {\n return guardrailEvents(context)\n .map((event) => signalName(event, [\"guardrailName\", \"guardrail\", \"guardrailId\"], [\"guardrail:\"]))\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction firstEvidenceForKind(\n context: TraceCheckContext,\n kind: PersistedInspectEvent[\"kind\"],\n path: string,\n): TraceCheckEvidence[] {\n const event = context.events.find((candidate) => candidate.kind === kind);\n return event ? [eventEvidence(event, path)] : runEvidence(context.selectedRun);\n}\n\nfunction baselineDiffFinding(\n message: string,\n evidence: readonly TraceCheckEvidence[],\n expected: unknown,\n actual: unknown,\n): TraceCheckFinding {\n return failFinding(\"baseline.regression\", message, evidence, expected, actual);\n}\n\n/**\n * Create the experimental built-in run status rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createRunStatusRule(options: RunStatusRuleOptions = {}): TraceCheckRule {\n const expected = options.expected ?? \"ok\";\n const allowIncomplete = options.allowIncomplete === true;\n return {\n id: \"run.status\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n const actual = context.selectedRun?.status ?? \"unknown\";\n if (actual !== expected) {\n findings.push(\n failFinding(\n \"run.status\",\n `Run status ${actual} did not match expected ${expected}.`,\n runEvidence(context.selectedRun),\n expected,\n actual,\n ),\n );\n }\n if (!allowIncomplete) {\n const running = context.events.filter((event) => event.status === \"running\");\n if (running.length > 0) {\n findings.push(\n failFinding(\n \"run.status\",\n \"Run contains incomplete running events.\",\n running.map((event) => eventEvidence(event)),\n \"no running events\",\n running.length,\n ),\n );\n }\n }\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in run duration rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createRunDurationRule(options: RunDurationRuleOptions): TraceCheckRule {\n return {\n id: \"run.duration\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const actual = context.selectedRun?.durationMs;\n if (actual === undefined || actual <= options.maxDurationMs) return [];\n return [\n failFinding(\n \"run.duration\",\n `Run duration ${actual}ms exceeded ${options.maxDurationMs}ms.`,\n runEvidence(context.selectedRun),\n { maxDurationMs: options.maxDurationMs },\n actual,\n ),\n ];\n },\n };\n}\n\n/**\n * Fail when any step duration exceeds the configured maximum.\n */\nexport function createMaxStepDurationRule(options: MaxStepDurationRuleOptions): TraceCheckRule {\n return {\n id: \"run.maxStepDuration\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const over = context.events.filter((event) => {\n const duration = eventDurationMs(event);\n return duration !== undefined && duration > options.maxDurationMs;\n });\n if (over.length === 0) return [];\n return [\n failFinding(\n \"run.maxStepDuration\",\n `${over.length} step(s) exceeded max duration ${options.maxDurationMs}ms.`,\n over.map((event) => eventEvidence(event, \"durationMs\")),\n { maxDurationMs: options.maxDurationMs },\n over.map((event) => ({\n eventId: event.eventId,\n name: event.name,\n durationMs: eventDurationMs(event),\n })),\n ),\n ];\n },\n };\n}\n\n/**\n * Detect stalled runs: running events and optionally started-but-unended events.\n */\nexport function createStallDetectionRule(\n options: StallDetectionRuleOptions = {},\n): TraceCheckRule {\n const requireEndedAt = options.requireEndedAt === true;\n return {\n id: \"run.stall\",\n category: \"run\",\n defaultSeverity: \"warning\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n const running = context.events.filter((event) => event.status === \"running\");\n if (running.length > 0) {\n findings.push(\n failFinding(\n \"run.stall\",\n `Found ${running.length} event(s) still running (possible stall).`,\n running.map((event) => eventEvidence(event, \"status\")),\n \"no running events\",\n running.length,\n ),\n );\n }\n if (requireEndedAt) {\n const incomplete = context.events.filter(\n (event) =>\n event.startedAt !== undefined &&\n event.endedAt === undefined &&\n event.status !== \"running\",\n );\n if (incomplete.length > 0) {\n findings.push(\n failFinding(\n \"run.stall\",\n `Found ${incomplete.length} started event(s) without endedAt.`,\n incomplete.map((event) => eventEvidence(event, \"endedAt\")),\n \"endedAt for started events\",\n incomplete.length,\n ),\n );\n }\n }\n return findings;\n },\n };\n}\n\n/**\n * Require a completed run with no running events.\n */\nexport function createRequireCompletedRule(): TraceCheckRule {\n return {\n id: \"run.requireCompleted\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n const runStatus = context.selectedRun?.status;\n if (runStatus === \"running\") {\n findings.push(\n failFinding(\n \"run.requireCompleted\",\n \"Run is still running.\",\n runEvidence(context.selectedRun),\n \"completed run\",\n runStatus,\n ),\n );\n }\n const running = context.events.filter((event) => event.status === \"running\");\n if (running.length > 0) {\n findings.push(\n failFinding(\n \"run.requireCompleted\",\n `Run has ${running.length} incomplete running event(s).`,\n running.map((event) => eventEvidence(event, \"status\")),\n \"no running events\",\n running.length,\n ),\n );\n }\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in event count rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createRunEventCountRule(options: RunEventCountRuleOptions): TraceCheckRule {\n return {\n id: \"run.eventCount\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const count = context.events.filter(\n (event) => options.kind === undefined || event.kind === options.kind,\n ).length;\n const findings: TraceCheckFinding[] = [];\n if (options.min !== undefined && count < options.min) {\n findings.push(\n failFinding(\n \"run.eventCount\",\n `Event count ${count} was below minimum ${options.min}.`,\n runEvidence(context.selectedRun),\n { kind: options.kind, min: options.min },\n count,\n ),\n );\n }\n if (options.max !== undefined && count > options.max) {\n findings.push(\n failFinding(\n \"run.eventCount\",\n `Event count ${count} exceeded maximum ${options.max}.`,\n runEvidence(context.selectedRun),\n { kind: options.kind, max: options.max },\n count,\n ),\n );\n }\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in run depth rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createRunDepthRule(options: RunDepthRuleOptions): TraceCheckRule {\n return {\n id: \"run.depth\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const nodes = [...context.nodesByEventId.values()];\n const maxDepth = nodes.reduce((max, node) => Math.max(max, node.depth), 0);\n if (maxDepth <= options.maxDepth) return [];\n const deepest = nodes.filter((node) => node.depth === maxDepth);\n return [\n failFinding(\n \"run.depth\",\n `Run depth ${maxDepth} exceeded ${options.maxDepth}.`,\n deepest.map((node) => ({\n runId: node.event.runId,\n eventId: node.event.eventId,\n parentId: node.event.parentId,\n kind: node.event.kind,\n name: node.event.name,\n status: node.event.status,\n })),\n { maxDepth: options.maxDepth },\n maxDepth,\n ),\n ];\n },\n };\n}\n\n/**\n * Create the experimental built-in tool usage rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createToolUsageRule(options: ToolUsageRuleOptions): TraceCheckRule {\n return {\n id: \"tool.usage\",\n category: \"tool\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const tools = finishedEvents(context, \"TOOL\");\n const names = tools.map(toolName);\n const nameSet = new Set(names);\n const findings: TraceCheckFinding[] = [];\n\n for (const required of options.required ?? []) {\n if (!nameSet.has(required)) {\n findings.push(\n failFinding(\"tool.usage\", `Required tool ${required} did not appear.`, runEvidence(context.selectedRun), required, names),\n );\n }\n }\n\n const forbidden = new Set(options.forbidden ?? []);\n const allowed = options.allowed ? new Set(options.allowed) : undefined;\n for (const event of tools) {\n const name = toolName(event);\n if (forbidden.has(name)) {\n findings.push(\n failFinding(\"tool.usage\", `Forbidden tool ${name} appeared.`, [eventEvidence(event)], \"tool absent\", name),\n );\n }\n if (allowed && !allowed.has(name)) {\n findings.push(\n failFinding(\"tool.usage\", `Tool ${name} is not in the allowed tool set.`, [eventEvidence(event)], [...allowed].sort(), name),\n );\n }\n }\n\n if (options.minCount !== undefined && tools.length < options.minCount) {\n findings.push(\n failFinding(\"tool.usage\", `Tool count ${tools.length} was below minimum ${options.minCount}.`, runEvidence(context.selectedRun), { minCount: options.minCount }, tools.length),\n );\n }\n if (options.maxCount !== undefined && tools.length > options.maxCount) {\n findings.push(\n failFinding(\"tool.usage\", `Tool count ${tools.length} exceeded maximum ${options.maxCount}.`, tools.map((event) => eventEvidence(event)), { maxCount: options.maxCount }, tools.length),\n );\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in tool ordering rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createToolOrderingRule(options: ToolOrderingRuleOptions): TraceCheckRule {\n return {\n id: \"tool.order\",\n category: \"tool\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const tools = finishedEvents(context, \"TOOL\");\n const index = firstIndexByName(tools);\n const beforeIndex = index.get(options.before);\n const afterIndex = index.get(options.after);\n if (beforeIndex === undefined || afterIndex === undefined || beforeIndex < afterIndex) {\n return [];\n }\n return [\n failFinding(\n \"tool.order\",\n `Tool ${options.before} must appear before ${options.after}.`,\n [eventEvidence(tools[beforeIndex]!), eventEvidence(tools[afterIndex]!)],\n { before: options.before, after: options.after },\n tools.map(toolName),\n ),\n ];\n },\n };\n}\n\n/**\n * Create the experimental built-in tool failure/retry rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createToolFailureRule(options: ToolFailureRuleOptions): TraceCheckRule {\n return {\n id: \"tool.failures\",\n category: \"tool\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const tools = finishedEvents(context, \"TOOL\");\n const failures = tools.filter((event) => event.status === \"error\");\n const retries = tools\n .map((event) => ({ event, count: retryCount(event) }))\n .filter((item): item is { event: PersistedInspectEvent; count: number } => item.count !== undefined);\n const findings: TraceCheckFinding[] = [];\n\n if (options.maxFailures !== undefined && failures.length > options.maxFailures) {\n findings.push(\n failFinding(\n \"tool.failures\",\n `Tool failure count ${failures.length} exceeded ${options.maxFailures}.`,\n failures.map((event) => eventEvidence(event)),\n { maxFailures: options.maxFailures },\n failures.length,\n ),\n );\n }\n\n if (options.maxRetries !== undefined) {\n const excessiveRetries = retries.filter((item) => item.count > options.maxRetries!);\n if (excessiveRetries.length > 0) {\n findings.push(\n failFinding(\n \"tool.failures\",\n `Tool retry count exceeded ${options.maxRetries}.`,\n excessiveRetries.map((item) => eventEvidence(item.event, \"attributes.retryCount\")),\n { maxRetries: options.maxRetries },\n excessiveRetries.map((item) => ({ tool: toolName(item.event), retries: item.count })),\n ),\n );\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in LLM usage rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createLlmUsageRule(options: LlmUsageRuleOptions): TraceCheckRule {\n return {\n id: \"llm.usage\",\n category: \"llm\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const llms = finishedEvents(context, \"LLM\");\n const findings: TraceCheckFinding[] = [];\n const allowedModels = options.allowedModels ? new Set(options.allowedModels) : undefined;\n const allowedProviders = options.allowedProviders ? new Set(options.allowedProviders) : undefined;\n const finishReasons = options.finishReasons ? new Set(options.finishReasons) : undefined;\n\n if (options.maxCalls !== undefined && llms.length > options.maxCalls) {\n findings.push(\n failFinding(\n \"llm.usage\",\n `LLM call count ${llms.length} exceeded ${options.maxCalls}.`,\n llms.map((event) => eventEvidence(event)),\n { maxCalls: options.maxCalls },\n llms.length,\n ),\n );\n }\n\n for (const event of llms) {\n const model = llmModel(event);\n const provider = llmProvider(event);\n const finishReason = llmFinishReason(event);\n if (allowedModels && (!model || !allowedModels.has(model))) {\n findings.push(\n failFinding(\"llm.usage\", `LLM model ${model ?? \"unknown\"} is not allowed.`, [eventEvidence(event, \"attributes.model\")], [...allowedModels].sort(), model ?? \"unknown\"),\n );\n }\n if (allowedProviders && (!provider || !allowedProviders.has(provider))) {\n findings.push(\n failFinding(\"llm.usage\", `LLM provider ${provider ?? \"unknown\"} is not allowed.`, [eventEvidence(event, \"attributes.provider\")], [...allowedProviders].sort(), provider ?? \"unknown\"),\n );\n }\n if (finishReasons && (!finishReason || !finishReasons.has(finishReason))) {\n findings.push(\n failFinding(\"llm.usage\", `LLM finish reason ${finishReason ?? \"unknown\"} is not allowed.`, [eventEvidence(event, \"attributes.finishReason\")], [...finishReasons].sort(), finishReason ?? \"unknown\"),\n );\n }\n }\n\n const tokenTotals = llms.reduce(\n (totals, event) => ({\n input: totals.input + (event.tokenUsage?.input ?? 0),\n output: totals.output + (event.tokenUsage?.output ?? 0),\n total: totals.total + (event.tokenUsage?.total ?? 0),\n cached: totals.cached + (event.tokenUsage?.cached ?? 0),\n }),\n { input: 0, output: 0, total: 0, cached: 0 },\n );\n const tokenLimits = [\n [\"input\", options.maxInputTokens],\n [\"output\", options.maxOutputTokens],\n [\"total\", options.maxTotalTokens],\n [\"cached\", options.maxCachedTokens],\n ] as const;\n for (const [key, limit] of tokenLimits) {\n if (limit !== undefined && tokenTotals[key] > limit) {\n findings.push(\n failFinding(\n \"llm.usage\",\n `LLM ${key} token count ${tokenTotals[key]} exceeded ${limit}.`,\n llms.map((event) => eventEvidence(event, `tokenUsage.${key}`)),\n { [`max${key[0]!.toUpperCase()}${key.slice(1)}Tokens`]: limit },\n tokenTotals[key],\n ),\n );\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in structure incomplete rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createStructureIncompleteRule(\n options: StructureIncompleteRuleOptions = {},\n): TraceCheckRule {\n return {\n id: \"structure.incomplete\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n if (!options.allowRunning) {\n const running = context.events.filter((event) => event.status === \"running\");\n if (running.length > 0) {\n findings.push(\n failFinding(\n \"structure.incomplete\",\n \"Trace contains incomplete running events.\",\n running.map((event) => eventEvidence(event, \"status\")),\n \"no running events\",\n running.length,\n ),\n );\n }\n }\n\n if (options.requireEndedAtForStarted) {\n const missingEndedAt = context.events.filter(\n (event) =>\n event.startedAt !== undefined &&\n event.endedAt === undefined &&\n event.status !== \"running\",\n );\n if (missingEndedAt.length > 0) {\n findings.push(\n failFinding(\n \"structure.incomplete\",\n \"Trace contains events with startedAt but no endedAt.\",\n missingEndedAt.map((event) => eventEvidence(event, \"endedAt\")),\n \"endedAt for started events\",\n missingEndedAt.length,\n ),\n );\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in structure orphan rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createStructureOrphanRule(\n options: StructureOrphanRuleOptions = {},\n): TraceCheckRule {\n const allowMarkedUnresolved = options.allowMarkedUnresolved ?? true;\n return {\n id: \"structure.orphan\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const byId = eventMap(context.events);\n const orphans = context.events.filter((event) => {\n if (!event.parentId || byId.has(event.parentId)) return false;\n return !(allowMarkedUnresolved && parentMarkedUnresolved(event));\n });\n if (orphans.length === 0) return [];\n return [\n failFinding(\n \"structure.orphan\",\n \"Trace contains events whose parentId is not present in the selected run.\",\n orphans.map((event) => eventEvidence(event, \"parentId\")),\n \"parentId resolves to an event in the selected run\",\n orphans.length,\n ),\n ];\n },\n };\n}\n\n/**\n * Create the experimental built-in structure cycle rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createStructureCycleRule(): TraceCheckRule {\n return {\n id: \"structure.cycle\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const byId = eventMap(context.events);\n const seenCycles = new Set<string>();\n const findings: TraceCheckFinding[] = [];\n\n for (const event of [...context.events].sort((a, b) => a.eventId.localeCompare(b.eventId))) {\n const path: PersistedInspectEvent[] = [];\n const seenAt = new Map<string, number>();\n let current: PersistedInspectEvent | undefined = event;\n\n while (current) {\n const existing = seenAt.get(current.eventId);\n if (existing !== undefined) {\n const cycle = path.slice(existing);\n const key = cycle.map((item) => item.eventId).sort().join(\"\\0\");\n if (!seenCycles.has(key)) {\n seenCycles.add(key);\n findings.push(\n failFinding(\n \"structure.cycle\",\n \"Trace contains a parentId cycle.\",\n cycle.map((item) => eventEvidence(item, \"parentId\")),\n \"acyclic parentId graph\",\n cycle.map((item) => item.eventId).sort(),\n ),\n );\n }\n break;\n }\n seenAt.set(current.eventId, path.length);\n path.push(current);\n current = current.parentId ? byId.get(current.parentId) : undefined;\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in structure relationship rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createStructureRelationshipRule(\n options: StructureRelationshipRuleOptions = {},\n): TraceCheckRule {\n return {\n id: \"structure.relationship\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const byId = eventMap(context.events);\n const findings: TraceCheckFinding[] = [];\n const minConfidence = options.minConfidence;\n\n for (const event of context.events) {\n if (\n minConfidence &&\n CONFIDENCE_RANK[event.confidence] < CONFIDENCE_RANK[minConfidence]\n ) {\n findings.push(\n failFinding(\n \"structure.relationship\",\n `Event confidence ${event.confidence} is below ${minConfidence}.`,\n [eventEvidence(event, \"confidence\")],\n { minConfidence },\n event.confidence,\n ),\n );\n }\n\n if (!event.parentId) continue;\n if (event.parentId === event.eventId) {\n findings.push(\n failFinding(\n \"structure.relationship\",\n \"Event parentId points to itself.\",\n [eventEvidence(event, \"parentId\")],\n \"parentId references a distinct event\",\n \"self\",\n ),\n );\n continue;\n }\n\n const parent = byId.get(event.parentId);\n if (!parent) continue;\n\n if (options.requireParentBeforeChild) {\n const parentTime = eventStartMs(parent);\n const childTime = eventStartMs(event);\n if (\n parentTime !== undefined &&\n childTime !== undefined &&\n parentTime > childTime\n ) {\n findings.push(\n failFinding(\n \"structure.relationship\",\n \"Parent event starts after child event.\",\n [eventEvidence(parent), eventEvidence(event, \"parentId\")],\n \"parent start <= child start\",\n { parentEventId: parent.eventId, childEventId: event.eventId },\n ),\n );\n }\n }\n\n if (options.requireTraceParentSpan && parent.trace?.spanId && event.trace) {\n const actual = event.trace.parentSpanId;\n if (actual !== parent.trace.spanId) {\n findings.push(\n failFinding(\n \"structure.relationship\",\n \"Trace parentSpanId does not match parent spanId.\",\n [eventEvidence(event, \"trace.parentSpanId\")],\n { parentSpanId: parent.trace.spanId },\n actual ?? \"missing\",\n ),\n );\n }\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in structure parallel-width rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createStructureParallelWidthRule(\n options: StructureParallelWidthRuleOptions,\n): TraceCheckRule {\n return {\n id: \"structure.parallelWidth\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n const byId = eventMap(context.events);\n\n if (options.maxChildren !== undefined) {\n for (const [parentId, children] of context.childrenByParentId.entries()) {\n if (children.length <= options.maxChildren) continue;\n const parent = byId.get(parentId);\n findings.push(\n failFinding(\n \"structure.parallelWidth\",\n `Parent ${parentId} has ${children.length} children, exceeding ${options.maxChildren}.`,\n [\n ...(parent ? [eventEvidence(parent)] : [{ runId: context.selectedRun?.runId, eventId: parentId }]),\n ...children.map((child) => ({\n runId: child.event.runId,\n eventId: child.event.eventId,\n parentId: child.event.parentId,\n kind: child.event.kind,\n name: child.event.name,\n status: child.event.status,\n })),\n ],\n { maxChildren: options.maxChildren },\n children.length,\n ),\n );\n }\n }\n\n if (options.maxConcurrent !== undefined) {\n const intervals = context.events\n .map((event) => ({ event, start: eventStartMs(event), end: eventEndMs(event) }))\n .filter(\n (item): item is { event: PersistedInspectEvent; start: number; end: number } =>\n item.start !== undefined && item.end !== undefined && item.end > item.start,\n );\n const points = intervals.flatMap((item) => [\n { time: item.start, delta: 1, event: item.event },\n { time: item.end, delta: -1, event: item.event },\n ]);\n points.sort((a, b) => {\n const byTime = a.time - b.time;\n if (byTime !== 0) return byTime;\n const byDelta = a.delta - b.delta;\n if (byDelta !== 0) return byDelta;\n return a.event.eventId.localeCompare(b.event.eventId);\n });\n\n const active = new Map<string, PersistedInspectEvent>();\n let maxActive: PersistedInspectEvent[] = [];\n for (const point of points) {\n if (point.delta > 0) {\n active.set(point.event.eventId, point.event);\n if (active.size > maxActive.length) {\n maxActive = [...active.values()].sort((a, b) => a.eventId.localeCompare(b.eventId));\n }\n } else {\n active.delete(point.event.eventId);\n }\n }\n\n if (maxActive.length > options.maxConcurrent) {\n findings.push(\n failFinding(\n \"structure.parallelWidth\",\n `Concurrent event width ${maxActive.length} exceeded ${options.maxConcurrent}.`,\n maxActive.map((event) => eventEvidence(event)),\n { maxConcurrent: options.maxConcurrent },\n maxActive.length,\n ),\n );\n }\n }\n\n return findings;\n },\n };\n}\n\nfunction createSignalRule(\n ruleId: \"structure.retrieval\" | \"structure.guardrail\" | \"structure.decision\",\n label: string,\n options: TraceSignalRuleOptions,\n selectEvents: (context: TraceCheckContext) => PersistedInspectEvent[],\n nameForEvent: (event: PersistedInspectEvent) => string,\n): TraceCheckRule {\n return {\n id: ruleId,\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const events = selectEvents(context);\n const names = events.map(nameForEvent);\n const nameSet = new Set(names);\n const findings: TraceCheckFinding[] = [];\n\n for (const required of sortedStrings(options.required)) {\n if (!nameSet.has(required)) {\n findings.push(\n failFinding(\n ruleId,\n `Required ${label} ${required} did not appear.`,\n runEvidence(context.selectedRun),\n required,\n names,\n ),\n );\n }\n }\n\n const forbidden = new Set(options.forbidden ?? []);\n const allowed = options.allowed ? new Set(options.allowed) : undefined;\n for (const event of events) {\n const name = nameForEvent(event);\n if (forbidden.has(name)) {\n findings.push(\n failFinding(\n ruleId,\n `Forbidden ${label} ${name} appeared.`,\n [eventEvidence(event)],\n `${label} absent`,\n name,\n ),\n );\n }\n if (allowed && !allowed.has(name)) {\n findings.push(\n failFinding(\n ruleId,\n `${label[0]!.toUpperCase()}${label.slice(1)} ${name} is not in the allowed set.`,\n [eventEvidence(event)],\n [...allowed].sort(),\n name,\n ),\n );\n }\n }\n\n if (options.minCount !== undefined && events.length < options.minCount) {\n findings.push(\n failFinding(\n ruleId,\n `${label[0]!.toUpperCase()}${label.slice(1)} count ${events.length} was below minimum ${options.minCount}.`,\n runEvidence(context.selectedRun),\n { minCount: options.minCount },\n events.length,\n ),\n );\n }\n if (options.maxCount !== undefined && events.length > options.maxCount) {\n findings.push(\n failFinding(\n ruleId,\n `${label[0]!.toUpperCase()}${label.slice(1)} count ${events.length} exceeded maximum ${options.maxCount}.`,\n events.map((event) => eventEvidence(event)),\n { maxCount: options.maxCount },\n events.length,\n ),\n );\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in retrieval signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createRetrievalRule(options: RetrievalRuleOptions): TraceCheckRule {\n return createSignalRule(\n \"structure.retrieval\",\n \"retrieval\",\n options,\n (context) => finishedEvents(context, \"RETRIEVER\"),\n (event) => signalName(event, [\"retrievalName\", \"retrieverName\", \"retriever\"], [\"retriever:\", \"retrieval:\"]),\n );\n}\n\n/**\n * Create the experimental built-in guardrail signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createGuardrailRule(options: GuardrailRuleOptions): TraceCheckRule {\n return createSignalRule(\n \"structure.guardrail\",\n \"guardrail\",\n options,\n guardrailEvents,\n (event) => signalName(event, [\"guardrailName\", \"guardrail\", \"guardrailId\"], [\"guardrail:\"]),\n );\n}\n\n/**\n * Create the experimental built-in decision signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createDecisionRule(options: DecisionRuleOptions): TraceCheckRule {\n return createSignalRule(\n \"structure.decision\",\n \"decision\",\n options,\n (context) => finishedEvents(context, \"DECISION\"),\n (event) => signalName(event, [\"decisionName\", \"decision\", \"decisionId\"], [\"decision:\"]),\n );\n}\n\n/**\n * Create the experimental built-in safety redaction rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createSafetyRedactionRule(\n options: SafetyRedactionRuleOptions = {},\n): TraceCheckRule {\n const sensitiveKeys = options.sensitiveKeys ?? DEFAULT_SENSITIVE_KEYS;\n const markers = options.redactedMarkers ?? [\"[REDACTED]\", \"[REDACTED:\"];\n return {\n id: \"safety.redaction\",\n category: \"safety\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n for (const event of context.events) {\n for (const entry of eventValueEntries(event, { includeSummaries: true, includeError: true })) {\n if (!isSensitiveKey(entry.key ?? lastPathSegment(entry.path), sensitiveKeys)) continue;\n if (typeof entry.value === \"string\" && hasRedactionMarker(entry.value, markers)) continue;\n findings.push(\n failFinding(\n \"safety.redaction\",\n `Sensitive-looking field at ${entry.path} is not redacted.`,\n [eventEvidence(event, entry.path)],\n \"redaction marker\",\n { path: entry.path, valueType: valueType(entry.value) },\n ),\n );\n }\n }\n return limitFindings(findings, options.maxFindings);\n },\n };\n}\n\n/**\n * Create the experimental built-in raw content path safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createSafetyRawContentRule(\n options: SafetyRawContentRuleOptions = {},\n): TraceCheckRule {\n const forbiddenKeys = options.forbiddenKeys ?? DEFAULT_RAW_CONTENT_KEYS;\n return {\n id: \"safety.rawPrompt\",\n category: \"safety\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n for (const event of context.events) {\n for (const entry of eventValueEntries(event, { includeSummaries: options.includeSummaries })) {\n const key = entry.key ?? lastPathSegment(entry.path);\n if (!isRawContentKey(key, forbiddenKeys)) continue;\n findings.push(\n failFinding(\n \"safety.rawPrompt\",\n `Raw content-like field ${entry.path} is present.`,\n [eventEvidence(event, entry.path)],\n \"metadata-only trace fields\",\n { path: entry.path, valueType: valueType(entry.value) },\n ),\n );\n }\n }\n return limitFindings(findings, options.maxFindings);\n },\n };\n}\n\n/**\n * Create the experimental built-in secret pattern safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createSafetySecretPatternRule(\n options: SafetySecretPatternRuleOptions = {},\n): TraceCheckRule {\n const patterns = options.patterns ?? DEFAULT_SECRET_PATTERNS;\n const maxStringLength = options.maxStringLength ?? 4_096;\n return {\n id: \"safety.secretPattern\",\n category: \"safety\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n for (const event of context.events) {\n for (const entry of eventValueEntries(event, { includeSummaries: true, includeError: true })) {\n if (typeof entry.value !== \"string\") continue;\n const sample = entry.value.slice(0, maxStringLength);\n for (const pattern of patterns) {\n pattern.pattern.lastIndex = 0;\n if (!pattern.pattern.test(sample)) continue;\n pattern.pattern.lastIndex = 0;\n findings.push(\n failFinding(\n \"safety.secretPattern\",\n `Secret-like pattern ${pattern.id} matched at ${entry.path}.`,\n [eventEvidence(event, entry.path)],\n \"no secret-like strings\",\n { pattern: pattern.id, path: entry.path },\n ),\n );\n break;\n }\n }\n }\n return limitFindings(findings, options.maxFindings);\n },\n };\n}\n\n/**\n * Create the experimental built-in oversized attribute safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createSafetyOversizedAttributeRule(\n options: SafetyOversizedAttributeRuleOptions,\n): TraceCheckRule {\n return {\n id: \"safety.oversizedAttribute\",\n category: \"safety\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n for (const event of context.events) {\n for (const entry of eventValueEntries(event, { includeSummaries: true, includeError: true })) {\n if (\n typeof entry.value === \"string\" &&\n options.maxStringLength !== undefined &&\n entry.value.length > options.maxStringLength\n ) {\n findings.push(\n failFinding(\n \"safety.oversizedAttribute\",\n `String at ${entry.path} exceeds ${options.maxStringLength} characters.`,\n [eventEvidence(event, entry.path)],\n { maxStringLength: options.maxStringLength },\n { path: entry.path, length: entry.value.length },\n ),\n );\n }\n\n if (\n Array.isArray(entry.value) &&\n options.maxArrayLength !== undefined &&\n entry.value.length > options.maxArrayLength\n ) {\n findings.push(\n failFinding(\n \"safety.oversizedAttribute\",\n `Array at ${entry.path} exceeds ${options.maxArrayLength} items.`,\n [eventEvidence(event, entry.path)],\n { maxArrayLength: options.maxArrayLength },\n { path: entry.path, length: entry.value.length },\n ),\n );\n }\n\n if (\n isRecord(entry.value) &&\n options.maxObjectKeys !== undefined &&\n Object.keys(entry.value).length > options.maxObjectKeys\n ) {\n findings.push(\n failFinding(\n \"safety.oversizedAttribute\",\n `Object at ${entry.path} exceeds ${options.maxObjectKeys} keys.`,\n [eventEvidence(event, entry.path)],\n { maxObjectKeys: options.maxObjectKeys },\n { path: entry.path, keys: Object.keys(entry.value).length },\n ),\n );\n }\n\n if (options.maxSerializedBytes !== undefined) {\n const bytes = serializedByteLength(entry.value);\n if (bytes !== undefined && bytes > options.maxSerializedBytes) {\n findings.push(\n failFinding(\n \"safety.oversizedAttribute\",\n `Value at ${entry.path} exceeds ${options.maxSerializedBytes} serialized bytes.`,\n [eventEvidence(event, entry.path)],\n { maxSerializedBytes: options.maxSerializedBytes },\n { path: entry.path, bytes },\n ),\n );\n }\n }\n }\n }\n return limitFindings(findings, options.maxFindings);\n },\n };\n}\n\n/**\n * Create the experimental built-in baseline regression rule.\n *\n * The rule compares safe structural summaries from a normalized baseline\n * against the candidate context. It intentionally ignores raw prompt/output,\n * request/response body, header, and tool payload text.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createBaselineRegressionRule(\n options: BaselineRegressionRuleOptions,\n): TraceCheckRule {\n return {\n id: \"baseline.regression\",\n category: \"baseline\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const baselineSelection = resolveSelectedRun(options.baseline, options.baselineRunId);\n if (baselineSelection.diagnostics.length > 0 || !baselineSelection.run) {\n return [\n failFinding(\n \"baseline.regression\",\n \"Baseline run could not be selected.\",\n runEvidence(context.selectedRun),\n \"selectable baseline run\",\n baselineSelection.diagnostics.map((item) => item.code),\n ),\n ];\n }\n\n const baselineFacts = buildFacts(options.baseline, baselineSelection.run);\n const baselineContext: TraceCheckContext = {\n ...baselineFacts,\n selectedRun: baselineSelection.run,\n sourceLabel: options.baseline.sourceLabel,\n };\n const findings: TraceCheckFinding[] = [];\n const durationToleranceMs = options.durationToleranceMs ?? 0;\n\n if (options.compareFormat && baselineContext.format !== context.format) {\n findings.push(\n baselineDiffFinding(\n \"Trace format differs from baseline.\",\n runEvidence(context.selectedRun),\n baselineContext.format,\n context.format,\n ),\n );\n }\n\n const baselineRunStatus = baselineContext.selectedRun?.status ?? \"unknown\";\n const candidateRunStatus = context.selectedRun?.status ?? \"unknown\";\n if (baselineRunStatus !== candidateRunStatus) {\n findings.push(\n baselineDiffFinding(\n \"Run status differs from baseline.\",\n runEvidence(context.selectedRun),\n baselineRunStatus,\n candidateRunStatus,\n ),\n );\n }\n\n const baselineDuration = baselineContext.selectedRun?.durationMs;\n const candidateDuration = context.selectedRun?.durationMs;\n if (\n baselineDuration !== undefined &&\n candidateDuration !== undefined &&\n Math.abs(candidateDuration - baselineDuration) > durationToleranceMs\n ) {\n findings.push(\n baselineDiffFinding(\n \"Run duration differs from baseline beyond tolerance.\",\n runEvidence(context.selectedRun),\n { durationMs: baselineDuration, toleranceMs: durationToleranceMs },\n candidateDuration,\n ),\n );\n }\n\n const comparisons = [\n {\n label: \"Tree shape\",\n path: \"tree\",\n expected: treeShape(baselineContext.rootNodes),\n actual: treeShape(context.rootNodes),\n evidence: runEvidence(context.selectedRun),\n },\n {\n label: \"Event statuses\",\n path: \"status\",\n expected: statusShape(baselineContext),\n actual: statusShape(context),\n evidence: runEvidence(context.selectedRun),\n },\n {\n label: \"Tool usage\",\n path: \"tool\",\n expected: toolShape(baselineContext),\n actual: toolShape(context),\n evidence: firstEvidenceForKind(context, \"TOOL\", \"tool\"),\n },\n {\n label: \"LLM usage\",\n path: \"llm\",\n expected: llmShape(baselineContext),\n actual: llmShape(context),\n evidence: firstEvidenceForKind(context, \"LLM\", \"llm\"),\n },\n {\n label: \"Error profile\",\n path: \"error\",\n expected: errorShape(baselineContext),\n actual: errorShape(context),\n evidence: firstEvidenceForKind(context, \"ERROR\", \"error\"),\n },\n {\n label: \"Retrieval signals\",\n path: \"retrieval\",\n expected: retrievalShape(baselineContext),\n actual: retrievalShape(context),\n evidence: firstEvidenceForKind(context, \"RETRIEVER\", \"retrieval\"),\n },\n {\n label: \"Guardrail signals\",\n path: \"guardrail\",\n expected: guardrailShape(baselineContext),\n actual: guardrailShape(context),\n evidence: guardrailEvents(context)[0]\n ? [eventEvidence(guardrailEvents(context)[0]!, \"guardrail\")]\n : runEvidence(context.selectedRun),\n },\n ];\n\n for (const comparison of comparisons) {\n if (JSON.stringify(comparison.expected) === JSON.stringify(comparison.actual)) {\n continue;\n }\n findings.push(\n baselineDiffFinding(\n `${comparison.label} differs from baseline.`,\n comparison.evidence.length > 0\n ? comparison.evidence\n : [{ runId: context.selectedRun?.runId, path: comparison.path }],\n comparison.expected,\n comparison.actual,\n ),\n );\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Experimental rule for observed real-world outcomes (v4.4+).\n */\nexport interface ObservedOutcomeRuleOptions {\n failOn?: readonly ObservedOutcomeStatus[];\n}\n\nexport function createObservedOutcomeRule(\n options: ObservedOutcomeRuleOptions = {},\n): TraceCheckRule {\n const failOn = options.failOn ?? ([\"failed\"] as const);\n return {\n id: \"outcome.status\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const outcomes = extractOutcomesFromPersistedEvents(context.events);\n const matching = outcomesMatchingStatus(outcomes, failOn);\n if (matching.length === 0) return [];\n return [\n failFinding(\n \"outcome.status\",\n `Observed outcome count ${matching.length} matched [${failOn.join(\", \")}].`,\n matching.map((outcome) => ({\n runId: outcome.runId,\n eventId: outcome.outcomeId,\n ...(outcome.parentId !== undefined ? { parentId: outcome.parentId } : {}),\n kind: \"OUTCOME\",\n name: outcome.name,\n status: outcome.status,\n path: `outcome.${outcome.name}`,\n })),\n { failOn },\n matching.map((outcome) => ({\n name: outcome.name,\n status: outcome.status,\n expectation: outcome.expectation,\n })),\n ),\n ];\n },\n };\n}\n\n/**\n * Run experimental deterministic trace checks against normalized reader output.\n *\n * The engine is local-only and pure: it does not discover config files, read\n * trace files, call providers, perform network I/O, or mutate input objects.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function runTraceChecks(\n input: TraceCheckInput,\n options: RunTraceChecksOptions = {},\n): TraceCheckResult {\n const selected = resolveSelectedRun(input, options.runId);\n if (selected.diagnostics.length > 0) {\n return errorResult(input, selected.diagnostics, selected.run);\n }\n\n const rules = selectRules(options.rules ?? [], options.select);\n if (rules.diagnostics.length > 0) {\n return errorResult(input, rules.diagnostics, selected.run);\n }\n\n const facts = buildFacts(input, selected.run);\n const context: TraceCheckContext = {\n ...facts,\n ...(selected.run ? { selectedRun: selected.run } : {}),\n ...(input.sourceLabel ? { sourceLabel: input.sourceLabel } : {}),\n };\n const diagnostics: TraceCheckDiagnostic[] = [];\n const findings: TraceCheckFinding[] = [];\n\n for (const rule of rules.rules) {\n try {\n findings.push(...rule.evaluate(context).map((finding) => normalizeFinding(rule, finding)));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n diagnostics.push(\n diagnostic(\"AI_CHECK_INTERNAL_ERROR\", `Rule ${rule.id} failed: ${message}`, rule.id),\n );\n }\n }\n\n if (diagnostics.length > 0) {\n return errorResult(input, diagnostics, selected.run);\n }\n\n const eventById = new Map(input.read.events.map((event) => [event.eventId, event] as const));\n const sortedFindings = findings.sort(compareFindings(eventById));\n const summary = summarize(sortedFindings, diagnostics);\n const status: TraceCheckStatus = summary.failed > 0 ? \"fail\" : \"pass\";\n\n return {\n ok: status === \"pass\",\n status,\n format: input.read.format,\n ...(selected.run ? { runId: selected.run.runId } : {}),\n summary,\n findings: sortedFindings,\n diagnostics,\n };\n}\n","import type { PersistedTokenUsage } from \"../types/persisted-inspect-event.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction nonNegativeFinite(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? value\n : undefined;\n}\n\n/**\n * Keeps the approved token vocabulary and derives total only when it is absent.\n * Cached tokens are informational and are never added to total.\n */\nexport function normalizeTokenUsage(\n value: unknown,\n): PersistedTokenUsage | undefined {\n if (!isRecord(value)) return undefined;\n\n const input = nonNegativeFinite(value.input);\n const output = nonNegativeFinite(value.output);\n const suppliedTotal = nonNegativeFinite(value.total);\n const cached = nonNegativeFinite(value.cached);\n const derivedTotal =\n input !== undefined && output !== undefined && Number.isFinite(input + output)\n ? input + output\n : undefined;\n const total =\n suppliedTotal ?? derivedTotal;\n\n if (\n input === undefined &&\n output === undefined &&\n total === undefined &&\n cached === undefined\n ) {\n return undefined;\n }\n\n return {\n ...(input !== undefined ? { input } : {}),\n ...(output !== undefined ? { output } : {}),\n ...(total !== undefined ? { total } : {}),\n ...(cached !== undefined ? { cached } : {}),\n };\n}\n","import { extractCorrelationMetadata } from \"../correlation-metadata.js\";\nimport type { InspectKind } from \"../types/inspect-event.js\";\nimport type {\n ErrorInfo,\n StepMetadata,\n StepType,\n TraceEvent,\n} from \"../types.js\";\nimport type {\n PersistedEventSource,\n PersistedEventStatus,\n PersistedInspectError,\n PersistedInspectEvent,\n PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\nimport { normalizeTokenUsage } from \"./token-usage.js\";\n\nexport interface TraceEventToPersistedOptions {\n /**\n * Stable index within the source event list.\n * Used only to make synthetic eventId deterministic when v0.1 has no eventId.\n */\n eventIndex?: number;\n\n /**\n * Optional source name override.\n * Default: \"trace-event\"\n */\n sourceName?: string;\n\n /**\n * Optional source version override.\n * Default: \"0.1\"\n */\n sourceVersion?: string;\n}\n\nfunction sanitizeIdPart(value: string): string {\n return value.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n}\n\nfunction nodeIdForEvent(event: TraceEvent): string {\n switch (event.event) {\n case \"run_started\":\n case \"run_completed\":\n return event.runId;\n case \"step_started\":\n case \"step_completed\":\n return event.stepId;\n case \"outcome_observed\":\n return event.outcomeId;\n default:\n return \"unknown\";\n }\n}\n\nfunction createPersistedEventId(event: TraceEvent, eventIndex: number): string {\n const runId = sanitizeIdPart(event.runId);\n const ev = sanitizeIdPart(event.event);\n const node = sanitizeIdPart(nodeIdForEvent(event));\n return `manual:${runId}:${ev}:${node}:${eventIndex}`;\n}\n\nfunction toIsoTimestamp(\n ms: number,\n): { iso: string; invalidTimestamp: boolean } {\n if (typeof ms !== \"number\" || !Number.isFinite(ms)) {\n return { iso: new Date(0).toISOString(), invalidTimestamp: true };\n }\n return { iso: new Date(ms).toISOString(), invalidTimestamp: false };\n}\n\nfunction buildSource(options?: TraceEventToPersistedOptions): PersistedEventSource {\n return {\n type: \"manual\",\n name: options?.sourceName ?? \"trace-event\",\n version: options?.sourceVersion ?? \"0.1\",\n };\n}\n\nfunction mapStepTypeToInspectKind(type: StepType): InspectKind {\n switch (type) {\n case \"run\":\n return \"RUN\";\n case \"llm\":\n return \"LLM\";\n case \"tool\":\n return \"TOOL\";\n case \"decision\":\n return \"DECISION\";\n case \"logic\":\n case \"state\":\n case \"custom\":\n return \"LOGIC\";\n default:\n return \"LOGIC\";\n }\n}\n\nfunction mapRunOrStepStatus(\n status: \"success\" | \"error\",\n): PersistedEventStatus {\n return status === \"success\" ? \"ok\" : \"error\";\n}\n\nfunction mapErrorInfo(\n error: ErrorInfo | undefined,\n): {\n persisted?: PersistedInspectError;\n errorStack?: string;\n} {\n if (!error?.message) {\n return {};\n }\n const out: {\n persisted: PersistedInspectError;\n errorStack?: string;\n } = {\n persisted: {\n message: error.message,\n name: \"Error\",\n },\n };\n if (typeof error.stack === \"string\" && error.stack.length > 0) {\n out.errorStack = error.stack;\n }\n return out;\n}\n\nfunction mapTokenUsageFromMetadata(\n metadata: StepMetadata | undefined,\n): PersistedTokenUsage | undefined {\n return normalizeTokenUsage(metadata?.tokens);\n}\n\nfunction compactAttributes(\n entries: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(entries)) {\n if (value !== undefined) {\n out[key] = value;\n }\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\n/**\n * Maps one v0.1 {@link TraceEvent} to a v0.2 {@link PersistedInspectEvent}.\n * Does not mutate `event`.\n */\nexport function traceEventToPersistedInspectEvent(\n event: TraceEvent,\n options?: TraceEventToPersistedOptions,\n): PersistedInspectEvent {\n const eventIndex = options?.eventIndex ?? 0;\n const eventId = createPersistedEventId(event, eventIndex);\n const source = buildSource(options);\n const tsMain = toIsoTimestamp(event.timestamp);\n\n switch (event.event) {\n case \"run_started\": {\n const tsStart = toIsoTimestamp(event.startTime);\n const correlation = extractCorrelationMetadata(event.metadata);\n const attributes = compactAttributes({\n legacyEvent: \"run_started\",\n metadata:\n event.metadata !== undefined ? { ...event.metadata } : undefined,\n correlationId: correlation?.correlationId,\n requestId: correlation?.requestId,\n decisionId: correlation?.decisionId,\n groupId: correlation?.groupId,\n invalidTimestamp:\n tsMain.invalidTimestamp || tsStart.invalidTimestamp ? true : undefined,\n });\n\n return {\n schemaVersion: \"0.2\",\n eventId,\n runId: event.runId,\n kind: \"RUN\",\n name: event.name,\n status: \"running\",\n timestamp: tsMain.iso,\n startedAt: tsStart.iso,\n confidence: \"explicit\",\n source,\n attributes,\n };\n }\n\n case \"run_completed\": {\n const tsEnd = toIsoTimestamp(event.endTime);\n const { persisted: error, errorStack } = mapErrorInfo(event.error);\n const attributes = compactAttributes({\n legacyEvent: \"run_completed\",\n errorStack,\n invalidTimestamp:\n tsMain.invalidTimestamp || tsEnd.invalidTimestamp ? true : undefined,\n });\n\n return {\n schemaVersion: \"0.2\",\n eventId,\n runId: event.runId,\n kind: \"RUN\",\n name: \"run\",\n status: mapRunOrStepStatus(event.status),\n timestamp: tsMain.iso,\n endedAt: tsEnd.iso,\n durationMs: event.durationMs,\n confidence: \"explicit\",\n source,\n attributes,\n error,\n };\n }\n\n case \"step_started\": {\n const tsStart = toIsoTimestamp(event.startTime);\n const tokenUsage = mapTokenUsageFromMetadata(event.metadata);\n const attributes = compactAttributes({\n legacyEvent: \"step_started\",\n stepId: event.stepId,\n stepType: event.type,\n metadata:\n event.metadata !== undefined ? { ...event.metadata } : undefined,\n invalidTimestamp:\n tsMain.invalidTimestamp || tsStart.invalidTimestamp ? true : undefined,\n });\n\n const out: PersistedInspectEvent = {\n schemaVersion: \"0.2\",\n eventId,\n runId: event.runId,\n kind: mapStepTypeToInspectKind(event.type),\n name: event.name,\n status: \"running\",\n timestamp: tsMain.iso,\n startedAt: tsStart.iso,\n confidence: \"explicit\",\n source,\n attributes,\n };\n if (event.parentId !== undefined) {\n out.parentId = event.parentId;\n }\n if (tokenUsage !== undefined) {\n out.tokenUsage = tokenUsage;\n }\n return out;\n }\n\n case \"step_completed\": {\n const tsEnd = toIsoTimestamp(event.endTime);\n const { persisted: error, errorStack } = mapErrorInfo(event.error);\n const attributes = compactAttributes({\n legacyEvent: \"step_completed\",\n stepId: event.stepId,\n errorStack,\n invalidTimestamp:\n tsMain.invalidTimestamp || tsEnd.invalidTimestamp ? true : undefined,\n });\n\n return {\n schemaVersion: \"0.2\",\n eventId,\n runId: event.runId,\n kind: \"LOGIC\",\n name: event.stepId,\n status: mapRunOrStepStatus(event.status),\n timestamp: tsMain.iso,\n endedAt: tsEnd.iso,\n durationMs: event.durationMs,\n confidence: \"explicit\",\n source,\n attributes,\n error,\n };\n }\n\n case \"outcome_observed\": {\n const tsObserved = toIsoTimestamp(event.observedAt);\n const attributes = compactAttributes({\n legacyEvent: \"outcome_observed\",\n outcomeId: event.outcomeId,\n outcomeStatus: event.status,\n expectation: event.expectation,\n method: event.method,\n actual: event.actual,\n evidence: event.evidence,\n observedAt: tsObserved.iso,\n invalidTimestamp:\n tsMain.invalidTimestamp || tsObserved.invalidTimestamp ? true : undefined,\n });\n\n const out: PersistedInspectEvent = {\n schemaVersion: \"0.2\",\n eventId,\n runId: event.runId,\n kind: \"OUTCOME\",\n name: event.name,\n status: event.status === \"failed\" ? \"error\" : \"ok\",\n timestamp: tsMain.iso,\n confidence: \"explicit\",\n source,\n attributes,\n };\n if (event.parentId !== undefined) {\n out.parentId = event.parentId;\n }\n if (event.actual !== undefined) {\n out.outputSummary = event.actual;\n }\n return out;\n }\n\n default: {\n const _exhaustive: never = event;\n throw new Error(`Unsupported trace event: ${(_exhaustive as TraceEvent).event}`);\n }\n }\n}\n\n/**\n * Maps a v0.1 trace event list to persisted v0.2 events (one output per input).\n */\nexport function traceEventsToPersistedInspectEvents(\n events: readonly TraceEvent[],\n options?: Omit<TraceEventToPersistedOptions, \"eventIndex\">,\n): PersistedInspectEvent[] {\n return events.map((event, index) =>\n traceEventToPersistedInspectEvent(event, { ...options, eventIndex: index }),\n );\n}\n","import type { InspectEvent, InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport type { LogIngestConfig } from \"../types/log-config.js\";\n\nexport interface TreeBuilderOptions {\n config?: LogIngestConfig;\n}\n\nfunction inc<T extends string>(map: Record<T, number>, key: T): void {\n map[key] = (map[key] ?? 0) + 1;\n}\n\nfunction computeRunStatus(events: InspectEvent[]): InspectRunTree[\"status\"] {\n let hasRunning = false;\n for (const e of events) {\n if (e.status === \"error\") return \"error\";\n if (e.status === \"running\") hasRunning = true;\n }\n if (hasRunning) return \"running\";\n return \"ok\";\n}\n\nexport class TreeBuilder {\n constructor(options?: TreeBuilderOptions) {\n void options?.config;\n }\n\n build(events: InspectEvent[]): InspectRunTree[] {\n const byRun = new Map<string, InspectEvent[]>();\n for (const e of events) {\n if (!byRun.has(e.runId)) byRun.set(e.runId, []);\n byRun.get(e.runId)!.push(e);\n }\n\n const out: InspectRunTree[] = [];\n for (const [runId, runEvents] of byRun.entries()) {\n const sorted = [...runEvents].sort((a, b) => a.timestamp - b.timestamp);\n\n const nodes = new Map<string, InspectNode>();\n for (const e of sorted) {\n nodes.set(e.eventId, { event: e, children: [], depth: 0 });\n }\n\n const roots: InspectNode[] = [];\n for (const node of nodes.values()) {\n const parentId = node.event.parentId;\n if (parentId && nodes.has(parentId)) {\n nodes.get(parentId)!.children.push(node);\n } else {\n roots.push(node);\n }\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 // metadata\n const confidenceBreakdown = {\n explicit: 0,\n correlated: 0,\n heuristic: 0,\n unknown: 0,\n } as Record<InspectEvent[\"confidence\"], number>;\n const kinds = {} as Record<InspectEvent[\"kind\"], number>;\n for (const e of sorted) {\n inc(confidenceBreakdown, e.confidence);\n (kinds as any)[e.kind] = ((kinds as any)[e.kind] ?? 0) + 1;\n }\n\n const startedAt = sorted.length > 0 ? sorted[0]!.timestamp : undefined;\n const endedAt = sorted.length > 0 ? sorted[sorted.length - 1]!.timestamp : undefined;\n const status = computeRunStatus(sorted);\n const durationMs =\n startedAt !== undefined &&\n endedAt !== undefined &&\n Number.isFinite(startedAt) &&\n Number.isFinite(endedAt) &&\n endedAt >= startedAt &&\n status !== \"running\"\n ? endedAt - startedAt\n : undefined;\n\n const name = sorted.find((e) => e.kind === \"RUN\")?.name;\n\n out.push({\n runId,\n name,\n status,\n startedAt,\n endedAt: status === \"running\" ? undefined : endedAt,\n durationMs,\n children: roots,\n metadata: {\n totalEvents: sorted.length,\n confidenceBreakdown,\n kinds,\n },\n });\n }\n\n // newest first for stable display\n out.sort((a, b) => (b.startedAt ?? 0) - (a.startedAt ?? 0));\n return out;\n }\n}\n\n","import type { EventSource, InspectEvent } from \"../types/inspect-event.js\";\nimport {\n isPersistedInspectEvent,\n type PersistedEventSourceType,\n type PersistedInspectEvent,\n} from \"../types/persisted-inspect-event.js\";\n\nexport interface PersistedToInspectEventOptions {\n /**\n * If true, invalid persisted events are skipped by batch conversion.\n * If false or omitted, invalid events throw.\n */\n skipInvalid?: boolean;\n}\n\nfunction compactAttributes(\n entries: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(entries)) {\n if (value !== undefined) {\n out[key] = value;\n }\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction parseIsoToMs(iso: string): { ms: number; invalidTimestamp: boolean } {\n const parsed = Date.parse(iso);\n if (!Number.isFinite(parsed)) {\n return { ms: 0, invalidTimestamp: true };\n }\n return { ms: parsed, invalidTimestamp: false };\n}\n\nfunction mapPersistedSourceToInspect(\n event: PersistedInspectEvent,\n): EventSource {\n const attrs = event.attributes ?? {};\n const sourceName = event.source.name;\n\n if (sourceName === \"pino\") {\n return {\n type: \"pino\",\n file: typeof attrs.sourceFile === \"string\" ? attrs.sourceFile : undefined,\n line: typeof attrs.sourceLine === \"number\" ? attrs.sourceLine : undefined,\n };\n }\n if (sourceName === \"winston\") {\n return {\n type: \"winston\",\n file: typeof attrs.sourceFile === \"string\" ? attrs.sourceFile : undefined,\n line: typeof attrs.sourceLine === \"number\" ? attrs.sourceLine : undefined,\n };\n }\n\n const mapType = (t: PersistedEventSourceType): EventSource[\"type\"] => {\n switch (t) {\n case \"manual\":\n return \"manual\";\n case \"json-log\":\n return \"json-log\";\n case \"log4js\":\n return \"log4js\";\n case \"adapter\":\n case \"ai-sdk\":\n case \"otel\":\n return \"adapter\";\n default:\n return \"json-log\";\n }\n };\n\n return {\n type: mapType(event.source.type),\n file: typeof attrs.sourceFile === \"string\" ? attrs.sourceFile : undefined,\n line: typeof attrs.sourceLine === \"number\" ? attrs.sourceLine : undefined,\n };\n}\n\nfunction buildInspectAttributes(event: PersistedInspectEvent): Record<string, unknown> {\n const attrs =\n event.attributes !== undefined ? { ...event.attributes } : {};\n\n if (event.inputSummary !== undefined) {\n attrs.inputSummary = event.inputSummary;\n }\n if (event.outputSummary !== undefined) {\n attrs.outputSummary = event.outputSummary;\n }\n\n if (event.error) {\n if (event.error.name !== undefined) {\n attrs.errorName = event.error.name;\n }\n attrs.errorMessage = event.error.message;\n if (event.error.code !== undefined) {\n attrs.errorCode = event.error.code;\n }\n }\n\n if (event.tokenUsage) {\n attrs.tokens = { ...event.tokenUsage };\n }\n\n if (event.source.type === \"ai-sdk\" || event.source.type === \"otel\") {\n attrs.originalSourceType = event.source.type;\n }\n\n if (event.source.name !== undefined) {\n attrs.sourceName = event.source.name;\n }\n if (event.source.version !== undefined) {\n attrs.sourceVersion = event.source.version;\n }\n\n return attrs;\n}\n\n/**\n * Maps one v0.2 {@link PersistedInspectEvent} to in-memory {@link InspectEvent}.\n * Throws if `event` fails {@link isPersistedInspectEvent}.\n */\nexport function persistedInspectEventToInspectEvent(\n event: PersistedInspectEvent,\n): InspectEvent {\n if (!isPersistedInspectEvent(event)) {\n throw new Error(\"Invalid PersistedInspectEvent: failed isPersistedInspectEvent\");\n }\n\n const ts = parseIsoToMs(event.timestamp);\n const attrs = buildInspectAttributes(event);\n if (ts.invalidTimestamp) {\n attrs.invalidTimestamp = true;\n }\n\n let status: InspectEvent[\"status\"] | undefined;\n if (\n event.status === \"running\" ||\n event.status === \"ok\" ||\n event.status === \"error\"\n ) {\n status = event.status;\n } else if (event.status === \"unknown\") {\n attrs.persistedStatus = \"unknown\";\n }\n\n const out: InspectEvent = {\n eventId: event.eventId,\n runId: event.runId,\n name: event.name,\n kind: event.kind,\n timestamp: ts.ms,\n confidence: event.confidence,\n source: mapPersistedSourceToInspect(event),\n attributes: compactAttributes(attrs),\n };\n\n if (event.parentId !== undefined) {\n out.parentId = event.parentId;\n }\n if (status !== undefined) {\n out.status = status;\n }\n if (\n event.durationMs !== undefined &&\n Number.isFinite(event.durationMs) &&\n event.durationMs >= 0\n ) {\n out.durationMs = event.durationMs;\n }\n\n return out;\n}\n\n/**\n * Maps persisted v0.2 events to in-memory {@link InspectEvent} rows.\n */\nexport function persistedInspectEventsToInspectEvents(\n events: readonly PersistedInspectEvent[],\n options?: PersistedToInspectEventOptions,\n): InspectEvent[] {\n const skipInvalid = options?.skipInvalid === true;\n const out: InspectEvent[] = [];\n\n for (const event of events) {\n if (!isPersistedInspectEvent(event)) {\n if (skipInvalid) {\n continue;\n }\n throw new Error(\"Invalid PersistedInspectEvent: failed isPersistedInspectEvent\");\n }\n out.push(persistedInspectEventToInspectEvent(event));\n }\n\n return out;\n}\n","import { TreeBuilder } from \"../logs/tree-builder.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport type { TraceEvent } from \"../types.js\";\n\nimport { traceEventsToPersistedInspectEvents } from \"./from-trace-event.js\";\nimport { persistedInspectEventsToInspectEvents } from \"./to-inspect-event.js\";\n\nexport interface PersistedTreeBridgeOptions {\n /**\n * If true, invalid persisted events are skipped.\n * If false or omitted, invalid persisted events throw.\n */\n skipInvalid?: boolean;\n}\n\n/**\n * Builds {@link InspectRunTree} rows from v0.2 {@link PersistedInspectEvent} input.\n * Uses {@link TreeBuilder} as the canonical tree builder. Does not mutate `events`.\n */\nexport function persistedInspectEventsToRunTrees(\n events: readonly PersistedInspectEvent[],\n options?: PersistedTreeBridgeOptions,\n): InspectRunTree[] {\n const inspectEvents = persistedInspectEventsToInspectEvents(events, {\n skipInvalid: options?.skipInvalid,\n });\n return new TreeBuilder().build(inspectEvents);\n}\n\n/**\n * Builds {@link InspectRunTree} rows from legacy v0.1 {@link TraceEvent} input\n * via the persisted-event model. Does not mutate `events`.\n */\nexport function traceEventsToPersistedRunTrees(\n events: readonly TraceEvent[],\n): InspectRunTree[] {\n const persisted = traceEventsToPersistedInspectEvents(events);\n return persistedInspectEventsToRunTrees(persisted);\n}\n","import { readdir, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { parseTraceJsonl, type TraceJsonlFormat } from \"../read-trace.js\";\nimport {\n traceEventToPersistedInspectEvent,\n traceEventsToPersistedInspectEvents,\n} from \"../persisted/from-trace-event.js\";\nimport { persistedInspectEventsToRunTrees } from \"../persisted/tree-bridge.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\nimport type {\n PersistedEventStatus,\n PersistedInspectEvent,\n PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\n\nexport type TraceInput =\n | { type: \"file\"; path: string }\n | { type: \"directory\"; path: string }\n | { type: \"string\"; content: string }\n | { type: \"buffer\"; content: Buffer }\n | { type: \"stdin\" };\n\nexport type TraceReadWarningSeverity = \"info\" | \"warning\" | \"error\";\n\nexport interface TraceReadWarning {\n code: string;\n message: string;\n severity?: TraceReadWarningSeverity;\n sourceFile?: string;\n line?: number;\n field?: string;\n}\n\nexport interface TraceReadResult {\n format: string;\n events: PersistedInspectEvent[];\n runs: InspectRunTree[];\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n sourceFiles: string[];\n}\n\nexport interface TraceFormatCandidate {\n format: string;\n confidence: number;\n readerName?: string;\n description?: string;\n warnings?: TraceReadWarning[];\n}\n\nexport type TraceFormatDetectionStatus =\n | \"detected\"\n | \"ambiguous\"\n | \"unsupported\";\n\nexport interface TraceFormatDetectionResult {\n status: TraceFormatDetectionStatus;\n format?: string;\n candidates: TraceFormatCandidate[];\n warnings: TraceReadWarning[];\n}\n\nexport interface TraceReaderDetectOptions {\n format?: string;\n}\n\nexport interface TraceReaderReadOptions {\n format?: string;\n}\n\nexport interface TraceReader {\n readonly format: string;\n readonly name?: string;\n detect(\n input: TraceInput,\n options?: TraceReaderDetectOptions,\n ): TraceFormatCandidate | undefined | Promise<TraceFormatCandidate | undefined>;\n read(\n input: TraceInput,\n options?: TraceReaderReadOptions,\n ): TraceReadResult | Promise<TraceReadResult>;\n}\n\nexport interface TraceReadOptions {\n format?: string;\n readers?: readonly TraceReader[];\n}\n\ninterface ResolvedTraceInput {\n content: string;\n sourceFiles: string[];\n}\n\ninterface OpenInferenceDocument {\n spans: JsonRecord[];\n confidence: number;\n description: string;\n version?: string;\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n}\n\ninterface OpenInferenceMappedSpan {\n event: PersistedInspectEvent;\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n spanId: string;\n parentSpanId?: string;\n}\n\ninterface OtlpDocument {\n spans: OtlpSpanContext[];\n confidence: number;\n description: string;\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n}\n\ninterface OtlpSpanContext {\n span: JsonRecord;\n resourceAttributes: Record<string, unknown>;\n scopeAttributes: Record<string, unknown>;\n scopeName?: string;\n scopeVersion?: string;\n pathPrefix: string;\n}\n\ntype JsonRecord = Record<string, unknown>;\n\nconst DEFAULT_MAX_TRACE_INPUT_BYTES = 10 * 1024 * 1024;\nconst MIN_DETECTION_CONFIDENCE = 0.5;\nconst AMBIGUOUS_CONFIDENCE_DELTA = 0.05;\nconst resolvedInputCache = new WeakMap<TraceInput, Promise<ResolvedTraceInput | undefined>>();\nconst OPENINFERENCE_READER_FORMAT = \"openinference-json\";\nconst OTLP_READER_FORMAT = \"otlp-json\";\n\nconst OPENINFERENCE_SPAN_KEYS = new Set([\n \"trace_id\",\n \"traceId\",\n \"span_id\",\n \"spanId\",\n \"parent_span_id\",\n \"parentSpanId\",\n \"name\",\n \"start_time_unix_nano\",\n \"startTimeUnixNano\",\n \"end_time_unix_nano\",\n \"endTimeUnixNano\",\n \"start_time\",\n \"startTime\",\n \"end_time\",\n \"endTime\",\n \"attributes\",\n \"status\",\n \"kind\",\n \"span_kind\",\n \"spanKind\",\n]);\n\nconst OPENINFERENCE_SENSITIVE_ATTRIBUTE_KEYS = [\n \"input.value\",\n \"output.value\",\n \"input.mime_type\",\n \"output.mime_type\",\n \"llm.input_messages\",\n \"llm.output_messages\",\n \"llm.prompts\",\n \"llm.completions\",\n \"retrieval.documents\",\n \"reranker.input_documents\",\n \"reranker.output_documents\",\n \"document.content\",\n \"gen_ai.prompt\",\n \"gen_ai.completion\",\n \"gen_ai.input.messages\",\n \"gen_ai.output.messages\",\n];\n\nconst OTLP_SPAN_KEYS = new Set([\n \"traceId\",\n \"spanId\",\n \"parentSpanId\",\n \"name\",\n \"kind\",\n \"startTimeUnixNano\",\n \"endTimeUnixNano\",\n \"attributes\",\n \"events\",\n \"status\",\n \"droppedAttributesCount\",\n \"droppedEventsCount\",\n \"droppedLinksCount\",\n \"links\",\n \"flags\",\n]);\n\nexport type TraceReadErrorCode =\n | \"unsupported_format\"\n | \"ambiguous_format\"\n | \"reader_failed\";\n\nexport class TraceReadError extends Error {\n readonly code: TraceReadErrorCode;\n readonly warnings: TraceReadWarning[];\n\n constructor(\n code: TraceReadErrorCode,\n message: string,\n warnings: TraceReadWarning[] = [],\n ) {\n super(message);\n this.name = \"TraceReadError\";\n this.code = code;\n this.warnings = warnings;\n }\n}\n\nfunction normalizeCandidate(\n reader: TraceReader,\n candidate: TraceFormatCandidate,\n): TraceFormatCandidate {\n const confidence = Number.isFinite(candidate.confidence)\n ? Math.max(0, Math.min(1, candidate.confidence))\n : 0;\n\n return {\n ...candidate,\n format: candidate.format || reader.format,\n confidence,\n readerName: candidate.readerName ?? reader.name,\n };\n}\n\nfunction sortCandidates(\n candidates: readonly TraceFormatCandidate[],\n): TraceFormatCandidate[] {\n return [...candidates].sort((a, b) => {\n if (b.confidence !== a.confidence) return b.confidence - a.confidence;\n return a.format.localeCompare(b.format);\n });\n}\n\nfunction collectWarnings(\n candidates: readonly TraceFormatCandidate[],\n): TraceReadWarning[] {\n return candidates.flatMap((candidate) => candidate.warnings ?? []);\n}\n\nfunction dedupeWarnings(\n warnings: readonly TraceReadWarning[],\n): TraceReadWarning[] {\n const seen = new Set<string>();\n const out: TraceReadWarning[] = [];\n for (const warning of warnings) {\n const key = [\n warning.code,\n warning.message,\n warning.severity ?? \"\",\n warning.sourceFile ?? \"\",\n warning.line ?? \"\",\n warning.field ?? \"\",\n ].join(\"\\u0000\");\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(warning);\n }\n return out;\n}\n\nfunction attachSingleSourceFile(\n warnings: readonly TraceReadWarning[],\n resolved: ResolvedTraceInput,\n): TraceReadWarning[] {\n if (resolved.sourceFiles.length !== 1) return [...warnings];\n const [sourceFile] = resolved.sourceFiles;\n return warnings.map((warning) => ({\n ...warning,\n sourceFile: warning.sourceFile ?? sourceFile,\n }));\n}\n\nfunction findReaderByFormat(\n format: string,\n readers: readonly TraceReader[],\n): TraceReader | undefined {\n return readers.find((reader) => reader.format === format);\n}\n\nasync function jsonlFilesInDirectory(dirPath: string): Promise<string[]> {\n const entries = await readdir(dirPath, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isFile() && entry.name.endsWith(\".jsonl\"))\n .map((entry) => path.join(dirPath, entry.name))\n .sort((a, b) => a.localeCompare(b));\n}\n\nasync function resolveInput(input: TraceInput): Promise<ResolvedTraceInput | undefined> {\n const cached = resolvedInputCache.get(input);\n if (cached) return cached;\n\n const promise = resolveInputUncached(input);\n resolvedInputCache.set(input, promise);\n return promise;\n}\n\nfunction assertInputWithinBounds(content: string, sourceFile?: string): void {\n const bytes = Buffer.byteLength(content, \"utf8\");\n if (bytes <= DEFAULT_MAX_TRACE_INPUT_BYTES) return;\n throw new TraceReadError(\"unsupported_format\", \"Trace input exceeds the local reader size limit.\", [\n {\n code: \"input_too_large\",\n message: `Trace input is ${bytes} bytes; max is ${DEFAULT_MAX_TRACE_INPUT_BYTES} bytes.`,\n severity: \"error\",\n ...(sourceFile !== undefined ? { sourceFile } : {}),\n },\n ]);\n}\n\nasync function resolveInputUncached(\n input: TraceInput,\n): Promise<ResolvedTraceInput | undefined> {\n if (input.type === \"string\") {\n assertInputWithinBounds(input.content);\n return { content: input.content, sourceFiles: [] };\n }\n if (input.type === \"buffer\") {\n const content = input.content.toString(\"utf-8\");\n assertInputWithinBounds(content);\n return { content, sourceFiles: [] };\n }\n if (input.type === \"file\") {\n const content = await readFile(input.path, \"utf-8\");\n assertInputWithinBounds(content, input.path);\n return { content, sourceFiles: [input.path] };\n }\n if (input.type === \"directory\") {\n const files = await jsonlFilesInDirectory(input.path);\n const parts = await Promise.all(\n files.map(async (file) => (await readFile(file, \"utf-8\")).trimEnd()),\n );\n const content = parts.filter((part) => part.trim() !== \"\").join(\"\\n\");\n assertInputWithinBounds(content, input.path);\n return {\n content,\n sourceFiles: files,\n };\n }\n return undefined;\n}\n\nfunction detectJsonlFormat(content: string): {\n format: TraceJsonlFormat;\n validRows: number;\n warnings: TraceReadWarning[];\n} {\n let saw01 = false;\n let saw02 = false;\n let saw10 = false;\n let validRows = 0;\n let invalidJsonRows = 0;\n let unknownSchemaRows = 0;\n let firstInvalidJsonLine: number | undefined;\n let firstUnknownSchemaLine: number | undefined;\n\n let lineNumber = 0;\n for (const line of content.split(/\\r?\\n/)) {\n lineNumber += 1;\n const trimmed = line.trim();\n if (trimmed === \"\") continue;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed) as unknown;\n } catch {\n invalidJsonRows += 1;\n firstInvalidJsonLine ??= lineNumber;\n continue;\n }\n\n if (\n typeof parsed === \"object\" &&\n parsed !== null &&\n !Array.isArray(parsed) &&\n \"schemaVersion\" in parsed\n ) {\n const version = (parsed as { schemaVersion?: unknown }).schemaVersion;\n if (version === \"0.1\") {\n saw01 = true;\n validRows += 1;\n continue;\n }\n if (version === \"0.2\") {\n saw02 = true;\n validRows += 1;\n continue;\n }\n if (version === \"1.0\") {\n saw10 = true;\n validRows += 1;\n continue;\n }\n }\n\n unknownSchemaRows += 1;\n firstUnknownSchemaLine ??= lineNumber;\n }\n\n const warnings: TraceReadWarning[] = [];\n if (invalidJsonRows > 0) {\n warnings.push({\n code: \"invalid_jsonl_rows\",\n message: `Skipped ${invalidJsonRows} invalid JSONL row(s) during format detection.`,\n severity: \"warning\",\n ...(firstInvalidJsonLine !== undefined ? { line: firstInvalidJsonLine } : {}),\n });\n }\n if (unknownSchemaRows > 0) {\n warnings.push({\n code: \"unknown_schema_rows\",\n message: `Skipped ${unknownSchemaRows} row(s) with unknown schemaVersion during format detection.`,\n severity: \"warning\",\n ...(firstUnknownSchemaLine !== undefined ? { line: firstUnknownSchemaLine } : {}),\n });\n }\n\n let format: TraceJsonlFormat = \"empty\";\n const seenFormats = [saw01, saw02, saw10].filter(Boolean).length;\n if (seenFormats > 1) format = \"mixed\";\n else if (saw01) format = \"0.1\";\n else if (saw02) format = \"0.2\";\n else if (saw10) format = \"1.0\";\n\n return { format, validRows, warnings };\n}\n\nfunction agentInspectFormatLabel(format: TraceJsonlFormat): string {\n switch (format) {\n case \"0.1\":\n return \"agent-inspect-v0.1-jsonl\";\n case \"0.2\":\n return \"agent-inspect-v0.2-jsonl\";\n case \"1.0\":\n return \"agent-inspect-v1.0-jsonl\";\n case \"mixed\":\n return \"agent-inspect-mixed-jsonl\";\n default:\n return \"agent-inspect-jsonl\";\n }\n}\n\nfunction persistedEventsForParsedTrace(\n parsed: ReturnType<typeof parseTraceJsonl>,\n): PersistedInspectEvent[] {\n if (\n (parsed.format === \"0.2\" || parsed.format === \"1.0\") &&\n parsed.persisted.length > 0\n ) {\n return [...parsed.persisted];\n }\n if (parsed.format === \"mixed\" && parsed.rows.length > 0) {\n return parsed.rows.map((row, index) => {\n if (row.format === \"0.2\" || row.format === \"1.0\") return row.event;\n return traceEventToPersistedInspectEvent(row.event, {\n eventIndex: index,\n sourceName: \"agent-inspect-jsonl-reader\",\n });\n });\n }\n return traceEventsToPersistedInspectEvents(parsed.events, {\n sourceName: \"agent-inspect-jsonl-reader\",\n });\n}\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim() !== \"\";\n}\n\nfunction readStringField(\n record: JsonRecord,\n keys: readonly string[],\n): string | undefined {\n for (const key of keys) {\n const value = record[key];\n if (isNonEmptyString(value)) return value;\n }\n return undefined;\n}\n\nfunction readRecordField(\n record: JsonRecord,\n key: string,\n): JsonRecord | undefined {\n const value = record[key];\n return isRecord(value) ? value : undefined;\n}\n\nfunction parseJsonDocument(content: string): unknown {\n return JSON.parse(content) as unknown;\n}\n\nfunction looksLikeOpenInferenceSpan(value: unknown): value is JsonRecord {\n if (!isRecord(value)) return false;\n const attributes = readRecordField(value, \"attributes\");\n return (\n readStringField(value, [\"trace_id\", \"traceId\"]) !== undefined &&\n readStringField(value, [\"span_id\", \"spanId\"]) !== undefined &&\n (readStringField(value, [\"name\"]) !== undefined ||\n attributes?.[\"openinference.span.kind\"] !== undefined)\n );\n}\n\nfunction extractOpenInferenceDocument(root: unknown): OpenInferenceDocument | undefined {\n const warnings: TraceReadWarning[] = [];\n const unsupportedFields: string[] = [];\n\n if (Array.isArray(root)) {\n const spans = root.filter(looksLikeOpenInferenceSpan);\n if (spans.length === 0) return undefined;\n if (spans.length !== root.length) {\n warnings.push({\n code: \"openinference_skipped_items\",\n message: \"Skipped non-span item(s) in OpenInference span array.\",\n severity: \"warning\",\n });\n }\n return {\n spans,\n confidence: 0.82,\n description: \"OpenInference span array\",\n warnings,\n unsupportedFields,\n };\n }\n\n if (!isRecord(root)) return undefined;\n\n const rootFormat = root.format;\n const rootCompatibility = root.compatibility;\n const version =\n typeof root.version === \"string\" && root.version.trim() !== \"\"\n ? root.version\n : undefined;\n\n if (Array.isArray(root.spans)) {\n const spans = root.spans.filter(looksLikeOpenInferenceSpan);\n if (spans.length === 0 && (rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\")) {\n warnings.push({\n code: \"openinference_no_valid_spans\",\n message: \"OpenInference document did not contain any valid spans.\",\n severity: \"error\",\n });\n return {\n spans,\n confidence: 0.7,\n description: \"Malformed OpenInference document\",\n version,\n warnings,\n unsupportedFields,\n };\n }\n if (spans.length === 0) return undefined;\n if (spans.length !== root.spans.length) {\n warnings.push({\n code: \"openinference_skipped_spans\",\n message: \"Skipped invalid OpenInference span item(s).\",\n severity: \"warning\",\n });\n }\n return {\n spans,\n confidence:\n rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\"\n ? 0.9\n : 0.84,\n description:\n rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\"\n ? \"OpenInference document\"\n : \"OpenInference spans document\",\n version,\n warnings,\n unsupportedFields,\n };\n }\n\n if (Array.isArray(root.data)) {\n const spans = root.data.filter(looksLikeOpenInferenceSpan);\n if (spans.length === 0) return undefined;\n if (spans.length !== root.data.length) {\n warnings.push({\n code: \"openinference_skipped_data_items\",\n message: \"Skipped non-span item(s) in OpenInference data array.\",\n severity: \"warning\",\n });\n }\n return {\n spans,\n confidence: 0.8,\n description: \"OpenInference data document\",\n version,\n warnings,\n unsupportedFields,\n };\n }\n\n if (looksLikeOpenInferenceSpan(root)) {\n return {\n spans: [root],\n confidence: 0.76,\n description: \"OpenInference single span\",\n version,\n warnings,\n unsupportedFields,\n };\n }\n\n if (rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\") {\n warnings.push({\n code: \"openinference_missing_spans\",\n message: \"OpenInference document is missing a spans array.\",\n severity: \"error\",\n });\n return {\n spans: [],\n confidence: 0.7,\n description: \"Malformed OpenInference document\",\n version,\n warnings,\n unsupportedFields,\n };\n }\n\n return undefined;\n}\n\nfunction parseUnixNanoToIso(value: unknown): string | undefined {\n if (typeof value === \"bigint\" && value >= 0n) {\n return new Date(Number(value / 1_000_000n)).toISOString();\n }\n if (typeof value === \"number\" && Number.isFinite(value) && value >= 0) {\n return new Date(Math.floor(value / 1_000_000)).toISOString();\n }\n if (typeof value === \"string\" && /^\\d+$/.test(value)) {\n return new Date(Number(BigInt(value) / 1_000_000n)).toISOString();\n }\n return undefined;\n}\n\nfunction parseIsoTime(value: unknown): string | undefined {\n if (!isNonEmptyString(value)) return undefined;\n const ms = Date.parse(value);\n if (!Number.isFinite(ms)) return undefined;\n return new Date(ms).toISOString();\n}\n\nfunction readOpenInferenceTimestamp(\n span: JsonRecord,\n nanoKeys: readonly string[],\n isoKeys: readonly string[],\n): string | undefined {\n for (const key of nanoKeys) {\n const iso = parseUnixNanoToIso(span[key]);\n if (iso !== undefined) return iso;\n }\n for (const key of isoKeys) {\n const iso = parseIsoTime(span[key]);\n if (iso !== undefined) return iso;\n }\n return undefined;\n}\n\nfunction durationBetweenIso(startedAt?: string, endedAt?: string): number | undefined {\n if (startedAt === undefined || endedAt === undefined) return undefined;\n const startMs = Date.parse(startedAt);\n const endMs = Date.parse(endedAt);\n if (!Number.isFinite(startMs) || !Number.isFinite(endMs) || endMs < startMs) {\n return undefined;\n }\n return endMs - startMs;\n}\n\nfunction isSensitiveOpenInferenceAttribute(key: string): boolean {\n return OPENINFERENCE_SENSITIVE_ATTRIBUTE_KEYS.some(\n (sensitiveKey) =>\n key === sensitiveKey ||\n key.startsWith(`${sensitiveKey}.`) ||\n key.endsWith(\".message.content\") ||\n key.endsWith(\".document.content\"),\n );\n}\n\nfunction summarizeAttributeValue(value: unknown): Record<string, unknown> {\n if (typeof value === \"string\") {\n return { type: \"string\", length: value.length };\n }\n if (typeof value === \"number\") {\n return { type: \"number\", finite: Number.isFinite(value) };\n }\n if (typeof value === \"boolean\") {\n return { type: \"boolean\" };\n }\n if (Array.isArray(value)) {\n return { type: \"array\", length: value.length };\n }\n if (isRecord(value)) {\n return { type: \"object\", keyCount: Object.keys(value).length };\n }\n if (value === null) {\n return { type: \"null\" };\n }\n return { type: typeof value };\n}\n\nfunction sanitizeOpenInferenceAttributes(\n attributes: JsonRecord,\n pathPrefix: string,\n): {\n attributes: Record<string, unknown>;\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n} {\n const out: Record<string, unknown> = {};\n const warnings: TraceReadWarning[] = [];\n const unsupportedFields: string[] = [];\n const summarizedKeys: string[] = [];\n\n for (const [key, value] of Object.entries(attributes)) {\n if (isSensitiveOpenInferenceAttribute(key)) {\n summarizedKeys.push(key);\n out[`${key}.summary`] = summarizeAttributeValue(value);\n unsupportedFields.push(`${pathPrefix}.attributes.${key}`);\n continue;\n }\n out[key] = value;\n }\n\n if (summarizedKeys.length > 0) {\n out[\"openinference.summarized_attributes\"] = summarizedKeys;\n warnings.push({\n code: \"openinference_sensitive_attribute_summarized\",\n message:\n \"OpenInference prompt/output/document attribute(s) were summarized instead of copied verbatim.\",\n severity: \"warning\",\n });\n }\n\n return { attributes: out, warnings, unsupportedFields };\n}\n\nfunction mapOpenInferenceKind(\n span: JsonRecord,\n attributes: JsonRecord,\n pathPrefix: string,\n): { kind: PersistedInspectEvent[\"kind\"]; warnings: TraceReadWarning[] } {\n const warnings: TraceReadWarning[] = [];\n const agentInspectKind = attributes[\"agent_inspect.kind\"];\n if (\n agentInspectKind === \"RUN\" ||\n agentInspectKind === \"AGENT\" ||\n agentInspectKind === \"LLM\" ||\n agentInspectKind === \"TOOL\" ||\n agentInspectKind === \"CHAIN\" ||\n agentInspectKind === \"RETRIEVER\" ||\n agentInspectKind === \"DECISION\" ||\n agentInspectKind === \"RESULT\" ||\n agentInspectKind === \"ERROR\" ||\n agentInspectKind === \"LOGIC\" ||\n agentInspectKind === \"LOG\" ||\n agentInspectKind === \"OUTCOME\"\n ) {\n return { kind: agentInspectKind, warnings };\n }\n\n const rawKind =\n readStringField(span, [\"kind\", \"span_kind\", \"spanKind\"]) ??\n (typeof attributes[\"openinference.span.kind\"] === \"string\"\n ? attributes[\"openinference.span.kind\"]\n : undefined);\n const normalized = rawKind?.toUpperCase();\n\n switch (normalized) {\n case \"LLM\":\n return { kind: \"LLM\", warnings };\n case \"TOOL\":\n return { kind: \"TOOL\", warnings };\n case \"CHAIN\":\n return { kind: \"CHAIN\", warnings };\n case \"RETRIEVER\":\n return { kind: \"RETRIEVER\", warnings };\n case \"AGENT\":\n return { kind: \"AGENT\", warnings };\n case \"EMBEDDING\":\n warnings.push({\n code: \"openinference_kind_semantic_loss\",\n message: \"OpenInference EMBEDDING span kind mapped to AgentInspect LLM.\",\n severity: \"warning\",\n field: `${pathPrefix}.attributes.openinference.span.kind`,\n });\n return { kind: \"LLM\", warnings };\n case \"RERANKER\":\n warnings.push({\n code: \"openinference_kind_semantic_loss\",\n message: \"OpenInference RERANKER span kind mapped to AgentInspect RETRIEVER.\",\n severity: \"warning\",\n field: `${pathPrefix}.attributes.openinference.span.kind`,\n });\n return { kind: \"RETRIEVER\", warnings };\n case \"UNKNOWN\":\n case undefined:\n warnings.push({\n code: \"openinference_kind_unknown\",\n message: \"OpenInference span kind was missing or unknown; mapped to AgentInspect LOGIC.\",\n severity: \"warning\",\n field: `${pathPrefix}.attributes.openinference.span.kind`,\n });\n return { kind: \"LOGIC\", warnings };\n default:\n warnings.push({\n code: \"openinference_kind_unsupported\",\n message: `Unsupported OpenInference span kind \"${rawKind}\" mapped to AgentInspect LOGIC.`,\n severity: \"warning\",\n field: `${pathPrefix}.attributes.openinference.span.kind`,\n });\n return { kind: \"LOGIC\", warnings };\n }\n}\n\nfunction mapOpenInferenceStatus(status: unknown): PersistedEventStatus | undefined {\n if (!isRecord(status)) return undefined;\n const rawCode = status.code;\n if (typeof rawCode !== \"string\") return undefined;\n switch (rawCode.toUpperCase()) {\n case \"OK\":\n return \"ok\";\n case \"ERROR\":\n return \"error\";\n case \"UNSET\":\n return \"unknown\";\n default:\n return \"unknown\";\n }\n}\n\nfunction readOpenInferenceTokenUsage(\n attributes: JsonRecord,\n): PersistedTokenUsage | undefined {\n const prompt = attributes[\"llm.token_count.prompt\"];\n const completion = attributes[\"llm.token_count.completion\"];\n const total = attributes[\"llm.token_count.total\"];\n const cached = attributes[\"llm.token_count.prompt_details.cache_read\"];\n const usage: PersistedTokenUsage = {};\n\n if (typeof prompt === \"number\" && Number.isFinite(prompt) && prompt >= 0) {\n usage.input = prompt;\n }\n if (\n typeof completion === \"number\" &&\n Number.isFinite(completion) &&\n completion >= 0\n ) {\n usage.output = completion;\n }\n if (typeof total === \"number\" && Number.isFinite(total) && total >= 0) {\n usage.total = total;\n }\n if (typeof cached === \"number\" && Number.isFinite(cached) && cached >= 0) {\n usage.cached = cached;\n }\n if (usage.total === undefined && usage.input !== undefined && usage.output !== undefined) {\n usage.total = usage.input + usage.output;\n }\n\n return Object.keys(usage).length > 0 ? usage : undefined;\n}\n\nfunction readOpenInferenceConfidence(\n attributes: JsonRecord,\n): PersistedInspectEvent[\"confidence\"] {\n const confidence = attributes[\"agent_inspect.confidence\"];\n if (\n confidence === \"explicit\" ||\n confidence === \"correlated\" ||\n confidence === \"heuristic\" ||\n confidence === \"unknown\"\n ) {\n return confidence;\n }\n return \"correlated\";\n}\n\nfunction mapOpenInferenceSpan(\n span: JsonRecord,\n index: number,\n version?: string,\n): OpenInferenceMappedSpan {\n const pathPrefix = `spans[${index}]`;\n const warnings: TraceReadWarning[] = [];\n const unsupportedFields: string[] = [];\n const rawAttributes = readRecordField(span, \"attributes\") ?? {};\n const sanitized = sanitizeOpenInferenceAttributes(rawAttributes, pathPrefix);\n warnings.push(...sanitized.warnings);\n unsupportedFields.push(...sanitized.unsupportedFields);\n\n const attributes: Record<string, unknown> = { ...sanitized.attributes };\n for (const [key, value] of Object.entries(span)) {\n if (OPENINFERENCE_SPAN_KEYS.has(key)) continue;\n unsupportedFields.push(`${pathPrefix}.${key}`);\n if (value === null || typeof value !== \"object\") {\n attributes[`openinference.${key}`] = value;\n } else {\n attributes[`openinference.${key}.summary`] = summarizeAttributeValue(value);\n warnings.push({\n code: \"openinference_unsupported_field_summarized\",\n message: `Unsupported OpenInference span field \"${key}\" was summarized.`,\n severity: \"warning\",\n field: `${pathPrefix}.${key}`,\n });\n }\n }\n\n const traceId = readStringField(span, [\"trace_id\", \"traceId\"]) ?? `trace-${index}`;\n const spanId = readStringField(span, [\"span_id\", \"spanId\"]) ?? `span-${index}`;\n const parentSpanId = readStringField(span, [\"parent_span_id\", \"parentSpanId\"]);\n const name = readStringField(span, [\"name\"]) ?? spanId;\n const startedAt = readOpenInferenceTimestamp(\n span,\n [\"start_time_unix_nano\", \"startTimeUnixNano\"],\n [\"start_time\", \"startTime\"],\n );\n const endedAt = readOpenInferenceTimestamp(\n span,\n [\"end_time_unix_nano\", \"endTimeUnixNano\"],\n [\"end_time\", \"endTime\"],\n );\n const timestamp = startedAt ?? \"1970-01-01T00:00:00.000Z\";\n\n if (startedAt === undefined) {\n warnings.push({\n code: \"openinference_missing_start_time\",\n message: \"OpenInference span is missing a valid start time; using Unix epoch.\",\n severity: \"warning\",\n field: `${pathPrefix}.start_time_unix_nano`,\n });\n unsupportedFields.push(`${pathPrefix}.start_time_unix_nano`);\n }\n\n const { kind, warnings: kindWarnings } = mapOpenInferenceKind(\n span,\n rawAttributes,\n pathPrefix,\n );\n warnings.push(...kindWarnings);\n const status = mapOpenInferenceStatus(span.status);\n const tokenUsage = readOpenInferenceTokenUsage(rawAttributes);\n const errorMessage =\n isRecord(span.status) && typeof span.status.message === \"string\"\n ? span.status.message\n : undefined;\n\n const event: PersistedInspectEvent = {\n schemaVersion: \"0.2\",\n eventId:\n typeof rawAttributes[\"agent_inspect.event_id\"] === \"string\"\n ? rawAttributes[\"agent_inspect.event_id\"]\n : spanId,\n runId:\n typeof rawAttributes[\"agent_inspect.run_id\"] === \"string\"\n ? rawAttributes[\"agent_inspect.run_id\"]\n : traceId,\n kind,\n name,\n timestamp,\n confidence: readOpenInferenceConfidence(rawAttributes),\n source: {\n type: \"otel\",\n name: \"openinference\",\n ...(version !== undefined ? { version } : {}),\n },\n attributes,\n trace: {\n traceId,\n spanId,\n ...(parentSpanId !== undefined ? { parentSpanId } : {}),\n },\n };\n\n if (status !== undefined) {\n event.status = status;\n }\n if (startedAt !== undefined) {\n event.startedAt = startedAt;\n }\n if (endedAt !== undefined) {\n event.endedAt = endedAt;\n }\n const durationMs = durationBetweenIso(startedAt, endedAt);\n if (durationMs !== undefined) {\n event.durationMs = durationMs;\n }\n if (tokenUsage !== undefined) {\n event.tokenUsage = tokenUsage;\n }\n if (status === \"error\") {\n event.error = {\n message: errorMessage !== undefined && errorMessage.trim() !== \"\" ? errorMessage : \"OpenInference span error\",\n };\n }\n\n return {\n event,\n warnings,\n unsupportedFields,\n spanId,\n ...(parentSpanId !== undefined ? { parentSpanId } : {}),\n };\n}\n\nfunction mapOpenInferenceEvents(document: OpenInferenceDocument): {\n events: PersistedInspectEvent[];\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n} {\n const mapped = document.spans.map((span, index) =>\n mapOpenInferenceSpan(span, index, document.version),\n );\n const spanIdToEventId = new Map(\n mapped.map((span) => [span.spanId, span.event.eventId] as const),\n );\n for (const span of mapped) {\n if (span.parentSpanId === undefined) continue;\n span.event.parentId = spanIdToEventId.get(span.parentSpanId) ?? span.parentSpanId;\n }\n\n return {\n events: mapped.map((span) => span.event),\n warnings: mapped.flatMap((span) => span.warnings),\n unsupportedFields: mapped.flatMap((span) => span.unsupportedFields),\n };\n}\n\nexport const openInferenceJsonReader: TraceReader = {\n format: OPENINFERENCE_READER_FORMAT,\n name: \"OpenInference JSON\",\n async detect(input) {\n const resolved = await resolveInput(input);\n if (!resolved) return undefined;\n\n let parsed: unknown;\n try {\n parsed = parseJsonDocument(resolved.content);\n } catch {\n return undefined;\n }\n\n const document = extractOpenInferenceDocument(parsed);\n if (!document) return undefined;\n\n return {\n format: OPENINFERENCE_READER_FORMAT,\n confidence: document.confidence,\n readerName: \"OpenInference JSON\",\n description: document.description,\n warnings: attachSingleSourceFile(document.warnings, resolved),\n };\n },\n async read(input) {\n const resolved = await resolveInput(input);\n if (!resolved) {\n throw new TraceReadError(\n \"unsupported_format\",\n \"OpenInference JSON reader requires file, string, or buffer input.\",\n );\n }\n\n let parsed: unknown;\n try {\n parsed = parseJsonDocument(resolved.content);\n } catch {\n throw new TraceReadError(\"unsupported_format\", \"OpenInference JSON input is not valid JSON.\", [\n {\n code: \"openinference_invalid_json\",\n message: \"OpenInference JSON reader could not parse the input as JSON.\",\n severity: \"error\",\n },\n ]);\n }\n\n const document = extractOpenInferenceDocument(parsed);\n if (!document || document.spans.length === 0) {\n throw new TraceReadError(\n \"unsupported_format\",\n \"No valid OpenInference spans found.\",\n attachSingleSourceFile(\n document?.warnings ?? [\n {\n code: \"openinference_no_valid_spans\",\n message: \"OpenInference JSON input did not contain valid spans.\",\n severity: \"error\",\n },\n ],\n resolved,\n ),\n );\n }\n\n const mapped = mapOpenInferenceEvents(document);\n const warnings = attachSingleSourceFile(\n [...document.warnings, ...mapped.warnings],\n resolved,\n );\n const unsupportedFields = [\n ...document.unsupportedFields,\n ...mapped.unsupportedFields,\n ].sort((a, b) => a.localeCompare(b));\n\n return {\n format: OPENINFERENCE_READER_FORMAT,\n events: mapped.events,\n runs: persistedInspectEventsToRunTrees(mapped.events, { skipInvalid: true }),\n warnings,\n unsupportedFields,\n sourceFiles: resolved.sourceFiles,\n };\n },\n};\n\nfunction parseOtlpAnyValue(\n value: unknown,\n field: string,\n warnings: TraceReadWarning[],\n unsupportedFields: string[],\n): unknown {\n if (!isRecord(value)) {\n unsupportedFields.push(field);\n warnings.push({\n code: \"otlp_attribute_value_invalid\",\n message: \"OTLP attribute value was not an AnyValue object.\",\n severity: \"warning\",\n field,\n });\n return undefined;\n }\n if (typeof value.stringValue === \"string\") return value.stringValue;\n if (typeof value.boolValue === \"boolean\") return value.boolValue;\n if (typeof value.intValue === \"number\" && Number.isFinite(value.intValue)) {\n return value.intValue;\n }\n if (typeof value.intValue === \"string\" && value.intValue.trim() !== \"\") {\n const n = Number(value.intValue);\n if (Number.isFinite(n)) return n;\n }\n if (\n typeof value.doubleValue === \"number\" &&\n Number.isFinite(value.doubleValue)\n ) {\n return value.doubleValue;\n }\n if (isRecord(value.arrayValue) && Array.isArray(value.arrayValue.values)) {\n return value.arrayValue.values.map((item, index) =>\n parseOtlpAnyValue(item, `${field}.arrayValue.values[${index}]`, warnings, unsupportedFields),\n );\n }\n if (isRecord(value.kvlistValue) && Array.isArray(value.kvlistValue.values)) {\n const out: Record<string, unknown> = {};\n for (const [index, item] of value.kvlistValue.values.entries()) {\n if (!isRecord(item) || typeof item.key !== \"string\") {\n unsupportedFields.push(`${field}.kvlistValue.values[${index}]`);\n continue;\n }\n out[item.key] = parseOtlpAnyValue(\n item.value,\n `${field}.kvlistValue.values[${index}].value`,\n warnings,\n unsupportedFields,\n );\n }\n return out;\n }\n if (typeof value.bytesValue === \"string\") {\n unsupportedFields.push(field);\n warnings.push({\n code: \"otlp_bytes_value_summarized\",\n message: \"OTLP bytesValue attribute was summarized instead of decoded.\",\n severity: \"warning\",\n field,\n });\n return { type: \"bytes\", length: value.bytesValue.length };\n }\n\n unsupportedFields.push(field);\n warnings.push({\n code: \"otlp_attribute_value_unsupported\",\n message: \"OTLP attribute value used an unsupported AnyValue shape.\",\n severity: \"warning\",\n field,\n });\n return undefined;\n}\n\nfunction parseOtlpAttributes(\n value: unknown,\n pathPrefix: string,\n): {\n attributes: Record<string, unknown>;\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n} {\n const attributes: Record<string, unknown> = {};\n const warnings: TraceReadWarning[] = [];\n const unsupportedFields: string[] = [];\n\n if (value === undefined) {\n return { attributes, warnings, unsupportedFields };\n }\n if (!Array.isArray(value)) {\n unsupportedFields.push(pathPrefix);\n warnings.push({\n code: \"otlp_attributes_invalid\",\n message: \"OTLP attributes field was not an array.\",\n severity: \"warning\",\n field: pathPrefix,\n });\n return { attributes, warnings, unsupportedFields };\n }\n\n for (const [index, item] of value.entries()) {\n const field = `${pathPrefix}[${index}]`;\n if (!isRecord(item) || typeof item.key !== \"string\") {\n unsupportedFields.push(field);\n warnings.push({\n code: \"otlp_attribute_invalid\",\n message: \"Skipped OTLP attribute without a string key.\",\n severity: \"warning\",\n field,\n });\n continue;\n }\n const parsed = parseOtlpAnyValue(\n item.value,\n `${field}.value`,\n warnings,\n unsupportedFields,\n );\n if (parsed !== undefined) {\n attributes[item.key] = parsed;\n }\n }\n\n return { attributes, warnings, unsupportedFields };\n}\n\nfunction looksLikeOtlpSpan(value: unknown): value is JsonRecord {\n return (\n isRecord(value) &&\n readStringField(value, [\"traceId\"]) !== undefined &&\n readStringField(value, [\"spanId\"]) !== undefined &&\n readStringField(value, [\"name\"]) !== undefined\n );\n}\n\nfunction extractOtlpDocument(root: unknown): OtlpDocument | undefined {\n if (!isRecord(root) || !Array.isArray(root.resourceSpans)) return undefined;\n\n const spans: OtlpSpanContext[] = [];\n const warnings: TraceReadWarning[] = [];\n const unsupportedFields: string[] = [];\n\n for (const [resourceIndex, resourceSpan] of root.resourceSpans.entries()) {\n const resourcePath = `resourceSpans[${resourceIndex}]`;\n if (!isRecord(resourceSpan)) {\n unsupportedFields.push(resourcePath);\n continue;\n }\n\n const resource = readRecordField(resourceSpan, \"resource\");\n const resourceParsed = parseOtlpAttributes(\n resource?.attributes,\n `${resourcePath}.resource.attributes`,\n );\n warnings.push(...resourceParsed.warnings);\n unsupportedFields.push(...resourceParsed.unsupportedFields);\n\n if (!Array.isArray(resourceSpan.scopeSpans)) {\n unsupportedFields.push(`${resourcePath}.scopeSpans`);\n warnings.push({\n code: \"otlp_scope_spans_missing\",\n message: \"OTLP resourceSpans entry did not contain a scopeSpans array.\",\n severity: \"warning\",\n field: `${resourcePath}.scopeSpans`,\n });\n continue;\n }\n\n for (const [scopeIndex, scopeSpan] of resourceSpan.scopeSpans.entries()) {\n const scopePath = `${resourcePath}.scopeSpans[${scopeIndex}]`;\n if (!isRecord(scopeSpan)) {\n unsupportedFields.push(scopePath);\n continue;\n }\n const scope = readRecordField(scopeSpan, \"scope\");\n const scopeParsed = parseOtlpAttributes(\n scope?.attributes,\n `${scopePath}.scope.attributes`,\n );\n warnings.push(...scopeParsed.warnings);\n unsupportedFields.push(...scopeParsed.unsupportedFields);\n if (!Array.isArray(scopeSpan.spans)) {\n unsupportedFields.push(`${scopePath}.spans`);\n warnings.push({\n code: \"otlp_spans_missing\",\n message: \"OTLP scopeSpans entry did not contain a spans array.\",\n severity: \"warning\",\n field: `${scopePath}.spans`,\n });\n continue;\n }\n\n for (const [spanIndex, span] of scopeSpan.spans.entries()) {\n const spanPath = `${scopePath}.spans[${spanIndex}]`;\n if (!looksLikeOtlpSpan(span)) {\n unsupportedFields.push(spanPath);\n warnings.push({\n code: \"otlp_invalid_span\",\n message: \"Skipped OTLP span without required traceId, spanId, or name.\",\n severity: \"warning\",\n field: spanPath,\n });\n continue;\n }\n spans.push({\n span,\n resourceAttributes: resourceParsed.attributes,\n scopeAttributes: scopeParsed.attributes,\n scopeName: readStringField(scope ?? {}, [\"name\"]),\n scopeVersion: readStringField(scope ?? {}, [\"version\"]),\n pathPrefix: spanPath,\n });\n }\n }\n }\n\n if (spans.length === 0) {\n warnings.push({\n code: \"otlp_no_valid_spans\",\n message: \"OTLP JSON payload did not contain any valid spans.\",\n severity: \"error\",\n });\n return {\n spans,\n confidence: 0.7,\n description: \"Malformed OTLP JSON trace payload\",\n warnings,\n unsupportedFields,\n };\n }\n\n return {\n spans,\n confidence: 0.93,\n description: \"OTLP JSON trace payload\",\n warnings,\n unsupportedFields,\n };\n}\n\nfunction mapOtlpStatus(status: unknown): PersistedEventStatus | undefined {\n if (!isRecord(status)) return undefined;\n const rawCode = status.code;\n if (typeof rawCode !== \"string\") return undefined;\n switch (rawCode.toUpperCase()) {\n case \"STATUS_CODE_OK\":\n case \"OK\":\n return \"ok\";\n case \"STATUS_CODE_ERROR\":\n case \"ERROR\":\n return \"error\";\n case \"STATUS_CODE_UNSET\":\n case \"UNSET\":\n return \"unknown\";\n default:\n return \"unknown\";\n }\n}\n\nfunction readOtlpKind(\n attributes: JsonRecord,\n pathPrefix: string,\n): { kind: PersistedInspectEvent[\"kind\"]; warnings: TraceReadWarning[] } {\n const warnings: TraceReadWarning[] = [];\n const agentInspectKind = attributes[\"agent_inspect.kind\"];\n if (\n agentInspectKind === \"RUN\" ||\n agentInspectKind === \"AGENT\" ||\n agentInspectKind === \"LLM\" ||\n agentInspectKind === \"TOOL\" ||\n agentInspectKind === \"CHAIN\" ||\n agentInspectKind === \"RETRIEVER\" ||\n agentInspectKind === \"DECISION\" ||\n agentInspectKind === \"RESULT\" ||\n agentInspectKind === \"ERROR\" ||\n agentInspectKind === \"LOGIC\" ||\n agentInspectKind === \"LOG\" ||\n agentInspectKind === \"OUTCOME\"\n ) {\n return { kind: agentInspectKind, warnings };\n }\n\n const operation = attributes[\"gen_ai.operation.name\"];\n if (typeof operation === \"string\") {\n switch (operation) {\n case \"generate_content\":\n case \"chat\":\n return { kind: \"LLM\", warnings };\n case \"execute_tool\":\n return { kind: \"TOOL\", warnings };\n case \"invoke_agent\":\n return { kind: \"AGENT\", warnings };\n default:\n warnings.push({\n code: \"otlp_gen_ai_operation_semantic_loss\",\n message: `OTLP GenAI operation \"${operation}\" mapped to AgentInspect LOGIC.`,\n severity: \"warning\",\n field: `${pathPrefix}.attributes.gen_ai.operation.name`,\n });\n return { kind: \"LOGIC\", warnings };\n }\n }\n\n warnings.push({\n code: \"otlp_kind_unknown\",\n message: \"OTLP span had no AgentInspect kind or GenAI operation; mapped to LOGIC.\",\n severity: \"warning\",\n field: `${pathPrefix}.attributes`,\n });\n return { kind: \"LOGIC\", warnings };\n}\n\nfunction readOtlpTokenUsage(attributes: JsonRecord): PersistedTokenUsage | undefined {\n const input = attributes[\"gen_ai.usage.input_tokens\"];\n const output = attributes[\"gen_ai.usage.output_tokens\"];\n const usage: PersistedTokenUsage = {};\n if (typeof input === \"number\" && Number.isFinite(input) && input >= 0) {\n usage.input = input;\n }\n if (typeof output === \"number\" && Number.isFinite(output) && output >= 0) {\n usage.output = output;\n }\n if (usage.input !== undefined && usage.output !== undefined) {\n usage.total = usage.input + usage.output;\n }\n return Object.keys(usage).length > 0 ? usage : undefined;\n}\n\nfunction readOtlpConfidence(\n attributes: JsonRecord,\n): PersistedInspectEvent[\"confidence\"] {\n return readOpenInferenceConfidence(attributes);\n}\n\nfunction sanitizeOtlpAttributes(\n attributes: JsonRecord,\n pathPrefix: string,\n): {\n attributes: Record<string, unknown>;\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n} {\n const ownerPath = pathPrefix.endsWith(\".attributes\")\n ? pathPrefix.slice(0, -\".attributes\".length)\n : pathPrefix;\n const sanitized = sanitizeOpenInferenceAttributes(attributes, ownerPath);\n return {\n ...sanitized,\n warnings: sanitized.warnings.map((warning) =>\n warning.code === \"openinference_sensitive_attribute_summarized\"\n ? {\n ...warning,\n code: \"otlp_sensitive_attribute_summarized\",\n message:\n \"OTLP prompt/output/document attribute(s) were summarized instead of copied verbatim.\",\n }\n : warning,\n ),\n };\n}\n\nfunction mapOtlpEvents(\n value: unknown,\n pathPrefix: string,\n): {\n events?: Record<string, unknown>[];\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n} {\n const warnings: TraceReadWarning[] = [];\n const unsupportedFields: string[] = [];\n if (value === undefined) return { warnings, unsupportedFields };\n if (!Array.isArray(value)) {\n unsupportedFields.push(pathPrefix);\n warnings.push({\n code: \"otlp_events_invalid\",\n message: \"OTLP events field was not an array.\",\n severity: \"warning\",\n field: pathPrefix,\n });\n return { warnings, unsupportedFields };\n }\n\n const events: Record<string, unknown>[] = [];\n for (const [index, event] of value.entries()) {\n const eventPath = `${pathPrefix}[${index}]`;\n if (!isRecord(event)) {\n unsupportedFields.push(eventPath);\n continue;\n }\n const parsedAttributes = parseOtlpAttributes(\n event.attributes,\n `${eventPath}.attributes`,\n );\n warnings.push(...parsedAttributes.warnings);\n unsupportedFields.push(...parsedAttributes.unsupportedFields);\n const sanitized = sanitizeOtlpAttributes(\n parsedAttributes.attributes,\n `${eventPath}.attributes`,\n );\n warnings.push(...sanitized.warnings);\n unsupportedFields.push(...sanitized.unsupportedFields);\n\n const out: Record<string, unknown> = {};\n const name = readStringField(event, [\"name\"]);\n if (name !== undefined) {\n out.name = name;\n }\n const timestamp = parseUnixNanoToIso(event.timeUnixNano);\n if (timestamp !== undefined) {\n out.timestamp = timestamp;\n } else if (event.timeUnixNano !== undefined) {\n unsupportedFields.push(`${eventPath}.timeUnixNano`);\n warnings.push({\n code: \"otlp_event_timestamp_invalid\",\n message: \"OTLP event timeUnixNano could not be parsed.\",\n severity: \"warning\",\n field: `${eventPath}.timeUnixNano`,\n });\n }\n if (Object.keys(sanitized.attributes).length > 0) {\n out.attributes = sanitized.attributes;\n }\n events.push(out);\n }\n\n return {\n events: events.length > 0 ? events : undefined,\n warnings,\n unsupportedFields,\n };\n}\n\nfunction mapOtlpSpan(context: OtlpSpanContext): OpenInferenceMappedSpan {\n const { span, pathPrefix } = context;\n const warnings: TraceReadWarning[] = [];\n const unsupportedFields: string[] = [];\n const parsedSpanAttributes = parseOtlpAttributes(\n span.attributes,\n `${pathPrefix}.attributes`,\n );\n warnings.push(...parsedSpanAttributes.warnings);\n unsupportedFields.push(...parsedSpanAttributes.unsupportedFields);\n\n const sanitizedSpanAttributes = sanitizeOtlpAttributes(\n parsedSpanAttributes.attributes,\n `${pathPrefix}.attributes`,\n );\n warnings.push(...sanitizedSpanAttributes.warnings);\n unsupportedFields.push(...sanitizedSpanAttributes.unsupportedFields);\n\n const attributes: Record<string, unknown> = {\n ...sanitizedSpanAttributes.attributes,\n };\n for (const [key, value] of Object.entries(context.resourceAttributes)) {\n attributes[`resource.${key}`] = value;\n }\n for (const [key, value] of Object.entries(context.scopeAttributes)) {\n attributes[`scope.${key}`] = value;\n }\n if (context.scopeName !== undefined) {\n attributes[\"scope.name\"] = context.scopeName;\n }\n if (context.scopeVersion !== undefined) {\n attributes[\"scope.version\"] = context.scopeVersion;\n }\n\n for (const [key, value] of Object.entries(span)) {\n if (OTLP_SPAN_KEYS.has(key)) continue;\n unsupportedFields.push(`${pathPrefix}.${key}`);\n if (value === null || typeof value !== \"object\") {\n attributes[`otlp.${key}`] = value;\n } else {\n attributes[`otlp.${key}.summary`] = summarizeAttributeValue(value);\n warnings.push({\n code: \"otlp_unsupported_field_summarized\",\n message: `Unsupported OTLP span field \"${key}\" was summarized.`,\n severity: \"warning\",\n field: `${pathPrefix}.${key}`,\n });\n }\n }\n\n for (const key of [\n \"droppedAttributesCount\",\n \"droppedEventsCount\",\n \"droppedLinksCount\",\n \"links\",\n ]) {\n if (span[key] !== undefined) {\n unsupportedFields.push(`${pathPrefix}.${key}`);\n warnings.push({\n code: \"otlp_span_field_not_mapped\",\n message: `OTLP span field \"${key}\" is not represented in AgentInspect events.`,\n severity: \"warning\",\n field: `${pathPrefix}.${key}`,\n });\n }\n }\n\n const events = mapOtlpEvents(span.events, `${pathPrefix}.events`);\n warnings.push(...events.warnings);\n unsupportedFields.push(...events.unsupportedFields);\n if (events.events !== undefined) {\n attributes[\"otlp.events\"] = events.events;\n }\n\n const traceId = readStringField(span, [\"traceId\"]) ?? \"trace-unknown\";\n const spanId = readStringField(span, [\"spanId\"]) ?? \"span-unknown\";\n const parentSpanId = readStringField(span, [\"parentSpanId\"]);\n const startedAt = readOpenInferenceTimestamp(\n span,\n [\"startTimeUnixNano\"],\n [],\n );\n const endedAt = readOpenInferenceTimestamp(span, [\"endTimeUnixNano\"], []);\n const timestamp = startedAt ?? \"1970-01-01T00:00:00.000Z\";\n if (startedAt === undefined) {\n unsupportedFields.push(`${pathPrefix}.startTimeUnixNano`);\n warnings.push({\n code: \"otlp_missing_start_time\",\n message: \"OTLP span is missing a valid startTimeUnixNano; using Unix epoch.\",\n severity: \"warning\",\n field: `${pathPrefix}.startTimeUnixNano`,\n });\n }\n\n const { kind, warnings: kindWarnings } = readOtlpKind(\n parsedSpanAttributes.attributes,\n pathPrefix,\n );\n warnings.push(...kindWarnings);\n const status = mapOtlpStatus(span.status);\n const tokenUsage = readOtlpTokenUsage(parsedSpanAttributes.attributes);\n const errorMessage =\n isRecord(span.status) && typeof span.status.message === \"string\"\n ? span.status.message\n : undefined;\n\n const event: PersistedInspectEvent = {\n schemaVersion: \"0.2\",\n eventId:\n typeof parsedSpanAttributes.attributes[\"agent_inspect.event_id\"] === \"string\"\n ? parsedSpanAttributes.attributes[\"agent_inspect.event_id\"]\n : spanId,\n runId:\n typeof parsedSpanAttributes.attributes[\"agent_inspect.run_id\"] === \"string\"\n ? parsedSpanAttributes.attributes[\"agent_inspect.run_id\"]\n : traceId,\n kind,\n name: readStringField(span, [\"name\"]) ?? spanId,\n timestamp,\n confidence: readOtlpConfidence(parsedSpanAttributes.attributes),\n source: {\n type: \"otel\",\n name:\n context.scopeName ??\n (typeof context.resourceAttributes[\"service.name\"] === \"string\"\n ? context.resourceAttributes[\"service.name\"]\n : \"otlp-json\"),\n ...(context.scopeVersion !== undefined\n ? { version: context.scopeVersion }\n : {}),\n },\n attributes,\n trace: {\n traceId,\n spanId,\n ...(parentSpanId !== undefined ? { parentSpanId } : {}),\n },\n };\n\n if (status !== undefined) {\n event.status = status;\n }\n if (startedAt !== undefined) {\n event.startedAt = startedAt;\n }\n if (endedAt !== undefined) {\n event.endedAt = endedAt;\n }\n const durationMs = durationBetweenIso(startedAt, endedAt);\n if (durationMs !== undefined) {\n event.durationMs = durationMs;\n }\n if (tokenUsage !== undefined) {\n event.tokenUsage = tokenUsage;\n }\n if (status === \"error\") {\n event.error = {\n message: errorMessage !== undefined && errorMessage.trim() !== \"\" ? errorMessage : \"OTLP span error\",\n };\n }\n\n return {\n event,\n warnings,\n unsupportedFields,\n spanId,\n ...(parentSpanId !== undefined ? { parentSpanId } : {}),\n };\n}\n\nfunction mapOtlpEventsToPersisted(document: OtlpDocument): {\n events: PersistedInspectEvent[];\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n} {\n const mapped = document.spans.map((span) => mapOtlpSpan(span));\n const spanIdToEventId = new Map(\n mapped.map((span) => [span.spanId, span.event.eventId] as const),\n );\n for (const span of mapped) {\n if (span.parentSpanId === undefined) continue;\n span.event.parentId = spanIdToEventId.get(span.parentSpanId) ?? span.parentSpanId;\n }\n return {\n events: mapped.map((span) => span.event),\n warnings: mapped.flatMap((span) => span.warnings),\n unsupportedFields: mapped.flatMap((span) => span.unsupportedFields),\n };\n}\n\nexport const otlpJsonReader: TraceReader = {\n format: OTLP_READER_FORMAT,\n name: \"OTLP JSON\",\n async detect(input) {\n const resolved = await resolveInput(input);\n if (!resolved) return undefined;\n\n let parsed: unknown;\n try {\n parsed = parseJsonDocument(resolved.content);\n } catch {\n return undefined;\n }\n\n const document = extractOtlpDocument(parsed);\n if (!document) return undefined;\n\n return {\n format: OTLP_READER_FORMAT,\n confidence: document.confidence,\n readerName: \"OTLP JSON\",\n description: document.description,\n warnings: attachSingleSourceFile(document.warnings, resolved),\n };\n },\n async read(input) {\n const resolved = await resolveInput(input);\n if (!resolved) {\n throw new TraceReadError(\n \"unsupported_format\",\n \"OTLP JSON reader requires file, string, or buffer input.\",\n );\n }\n\n let parsed: unknown;\n try {\n parsed = parseJsonDocument(resolved.content);\n } catch {\n throw new TraceReadError(\"unsupported_format\", \"OTLP JSON input is not valid JSON.\", [\n {\n code: \"otlp_invalid_json\",\n message: \"OTLP JSON reader could not parse the input as JSON.\",\n severity: \"error\",\n },\n ]);\n }\n\n const document = extractOtlpDocument(parsed);\n if (!document || document.spans.length === 0) {\n throw new TraceReadError(\n \"unsupported_format\",\n \"No valid OTLP spans found.\",\n attachSingleSourceFile(\n document?.warnings ?? [\n {\n code: \"otlp_no_valid_spans\",\n message: \"OTLP JSON input did not contain valid spans.\",\n severity: \"error\",\n },\n ],\n resolved,\n ),\n );\n }\n\n const mapped = mapOtlpEventsToPersisted(document);\n const warnings = attachSingleSourceFile(\n [...document.warnings, ...mapped.warnings],\n resolved,\n );\n const unsupportedFields = [\n ...document.unsupportedFields,\n ...mapped.unsupportedFields,\n ].sort((a, b) => a.localeCompare(b));\n\n return {\n format: OTLP_READER_FORMAT,\n events: mapped.events,\n runs: persistedInspectEventsToRunTrees(mapped.events, { skipInvalid: true }),\n warnings,\n unsupportedFields,\n sourceFiles: resolved.sourceFiles,\n };\n },\n};\n\nexport const agentInspectJsonlReader: TraceReader = {\n format: \"agent-inspect-jsonl\",\n name: \"AgentInspect JSONL\",\n async detect(input) {\n const resolved = await resolveInput(input);\n if (!resolved) return undefined;\n const detected = detectJsonlFormat(resolved.content);\n if (detected.validRows === 0 || detected.format === \"empty\") {\n return undefined;\n }\n\n return {\n format: \"agent-inspect-jsonl\",\n confidence: 0.95,\n readerName: \"AgentInspect JSONL\",\n description: agentInspectFormatLabel(detected.format),\n warnings: attachSingleSourceFile(detected.warnings, resolved),\n };\n },\n async read(input) {\n const resolved = await resolveInput(input);\n if (!resolved) {\n throw new Error(\"AgentInspect JSONL reader requires file, directory, string, or buffer input.\");\n }\n\n const parsed = parseTraceJsonl(resolved.content, { warnings: false });\n if (parsed.sourceEventCount === 0) {\n throw new Error(\"No valid AgentInspect JSONL events found.\");\n }\n\n const events = persistedEventsForParsedTrace(parsed);\n return {\n format: agentInspectFormatLabel(parsed.format),\n events,\n runs: persistedInspectEventsToRunTrees(events, { skipInvalid: true }),\n warnings:\n parsed.format === \"mixed\"\n ? attachSingleSourceFile(\n [\n {\n code: \"mixed_agent_inspect_jsonl\",\n message:\n \"Trace input mixes schemaVersion 0.1 and 0.2 rows; events were normalized for reading.\",\n severity: \"warning\",\n },\n ],\n resolved,\n )\n : [],\n unsupportedFields: [],\n sourceFiles: resolved.sourceFiles,\n };\n },\n};\n\nexport const DEFAULT_TRACE_READERS: readonly TraceReader[] = [\n agentInspectJsonlReader,\n openInferenceJsonReader,\n otlpJsonReader,\n];\n\nexport async function detectTraceFormat(\n input: TraceInput,\n options: TraceReadOptions = {},\n): Promise<TraceFormatDetectionResult> {\n const readers = options.readers ?? DEFAULT_TRACE_READERS;\n\n if (options.format !== undefined) {\n const reader = findReaderByFormat(options.format, readers);\n if (!reader) {\n return {\n status: \"unsupported\",\n candidates: [],\n warnings: [\n {\n code: \"unsupported_format\",\n message: `No trace reader is registered for format \"${options.format}\".`,\n severity: \"error\",\n },\n ],\n };\n }\n\n return {\n status: \"detected\",\n format: reader.format,\n candidates: [\n {\n format: reader.format,\n confidence: 1,\n readerName: reader.name,\n description: \"Explicit format override\",\n },\n ],\n warnings: [],\n };\n }\n\n const candidates: TraceFormatCandidate[] = [];\n const warnings: TraceReadWarning[] = [];\n\n for (const reader of readers) {\n try {\n const candidate = await reader.detect(input);\n if (candidate !== undefined) {\n candidates.push(normalizeCandidate(reader, candidate));\n }\n } catch (error) {\n if (error instanceof TraceReadError) {\n warnings.push(...error.warnings);\n continue;\n }\n warnings.push({\n code: \"reader_detect_failed\",\n message:\n error instanceof Error && error.message.trim() !== \"\"\n ? error.message\n : `Trace reader \"${reader.format}\" failed during detection.`,\n severity: \"warning\",\n });\n }\n }\n\n const sorted = sortCandidates(\n candidates.filter((candidate) => candidate.confidence >= MIN_DETECTION_CONFIDENCE),\n );\n const candidateWarnings = collectWarnings(sorted);\n const lowConfidenceWarnings: TraceReadWarning[] =\n candidates.length > sorted.length\n ? [\n {\n code: \"low_confidence_candidates\",\n message: `Ignored ${candidates.length - sorted.length} low-confidence format candidate(s).`,\n severity: \"info\",\n },\n ]\n : [];\n const allWarnings = dedupeWarnings([\n ...warnings,\n ...candidateWarnings,\n ...lowConfidenceWarnings,\n ]);\n\n if (sorted.length === 0) {\n return {\n status: \"unsupported\",\n candidates: [],\n warnings: allWarnings,\n };\n }\n\n const [best, second] = sorted;\n if (\n second !== undefined &&\n best.confidence - second.confidence <= AMBIGUOUS_CONFIDENCE_DELTA\n ) {\n return {\n status: \"ambiguous\",\n candidates: sorted,\n warnings: [\n ...allWarnings,\n {\n code: \"ambiguous_format_candidates\",\n message: `Top trace format candidates are within ${AMBIGUOUS_CONFIDENCE_DELTA} confidence.`,\n severity: \"warning\",\n },\n ],\n };\n }\n\n return {\n status: \"detected\",\n format: best.format,\n candidates: sorted,\n warnings: allWarnings,\n };\n}\n\nexport async function readTrace(\n input: TraceInput,\n options: TraceReadOptions = {},\n): Promise<TraceReadResult> {\n const readers = options.readers ?? DEFAULT_TRACE_READERS;\n const detection = await detectTraceFormat(input, options);\n\n if (detection.status === \"unsupported\" || detection.format === undefined) {\n throw new TraceReadError(\n \"unsupported_format\",\n \"No trace reader could detect the input format.\",\n detection.warnings,\n );\n }\n if (detection.status === \"ambiguous\") {\n throw new TraceReadError(\n \"ambiguous_format\",\n \"Multiple trace readers matched the input with equal confidence.\",\n detection.warnings,\n );\n }\n\n const reader = findReaderByFormat(detection.format, readers);\n if (!reader) {\n throw new TraceReadError(\n \"unsupported_format\",\n `No trace reader is registered for format \"${detection.format}\".`,\n detection.warnings,\n );\n }\n\n try {\n const result = await reader.read(input, { format: detection.format });\n return {\n ...result,\n format: result.format || detection.format,\n warnings: [...detection.warnings, ...result.warnings],\n };\n } catch (error) {\n if (error instanceof TraceReadError) {\n throw new TraceReadError(\n error.code,\n error.message,\n dedupeWarnings([...detection.warnings, ...error.warnings]),\n );\n }\n throw new TraceReadError(\n \"reader_failed\",\n error instanceof Error && error.message.trim() !== \"\"\n ? error.message\n : `Trace reader \"${reader.format}\" failed.`,\n detection.warnings,\n );\n }\n}\n\nexport function openTrace(\n input: TraceInput,\n options: TraceReadOptions = {},\n): Promise<TraceReadResult> {\n return readTrace(input, options);\n}\n","import { access } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { getTraceFilePath } from \"../utils.js\";\nimport type { SuiteCaseConfig } from \"./types.js\";\n\nexport interface ResolvedSuiteCase {\n caseId: string;\n tracePath?: string;\n runId?: string;\n missing: boolean;\n reason?: string;\n}\n\nasync function exists(filePath: string): Promise<boolean> {\n try {\n await access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function resolveSuiteCaseTrace(\n suiteCase: SuiteCaseConfig,\n options: { configDir: string; tracesDir: string },\n): Promise<ResolvedSuiteCase> {\n if (suiteCase.trace !== undefined) {\n const tracePath = path.resolve(options.configDir, suiteCase.trace);\n if (await exists(tracePath)) {\n return { caseId: suiteCase.id, tracePath, missing: false };\n }\n return {\n caseId: suiteCase.id,\n tracePath,\n missing: true,\n reason: `trace file not found: ${suiteCase.trace}`,\n };\n }\n\n const runKey = suiteCase.runId ?? suiteCase.id;\n const directPath = getTraceFilePath(runKey, options.tracesDir);\n if (await exists(directPath)) {\n return { caseId: suiteCase.id, tracePath: directPath, runId: runKey, missing: false };\n }\n\n const nestedPath = path.join(options.tracesDir, `${path.basename(runKey)}.jsonl`);\n if (await exists(nestedPath)) {\n return { caseId: suiteCase.id, tracePath: nestedPath, runId: runKey, missing: false };\n }\n\n return {\n caseId: suiteCase.id,\n runId: runKey,\n missing: true,\n reason: `no trace found for run id \"${runKey}\" under ${options.tracesDir}`,\n };\n}\n","import path from \"node:path\";\n\nimport {\n createLlmUsageRule,\n createObservedOutcomeRule,\n createRunDurationRule,\n createRunStatusRule,\n createToolUsageRule,\n runTraceChecks,\n type TraceCheckRule,\n} from \"../checks/index.js\";\nimport { extractOutcomesFromPersistedEvents, extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { openTrace, type TraceReadResult } from \"../readers/index.js\";\nimport type { TraceEvent } from \"../types.js\";\nimport { loadSuiteConfig } from \"./load.js\";\nimport { resolveSuiteCaseTrace } from \"./resolve.js\";\nimport type {\n RunSuiteOptions,\n SuiteCaseConfig,\n SuiteCaseResult,\n SuiteConfig,\n SuiteDiagnostic,\n SuiteRunResult,\n} from \"./types.js\";\n\nfunction diagnostic(\n code: SuiteDiagnostic[\"code\"],\n message: string,\n severity: SuiteDiagnostic[\"severity\"] = \"error\",\n caseId?: string,\n): SuiteDiagnostic {\n return { code, message, severity, ...(caseId !== undefined ? { caseId } : {}) };\n}\n\nfunction buildCaseRules(\n suiteCase: SuiteCaseConfig,\n config: SuiteConfig,\n): { rules: TraceCheckRule[]; select: string[] } {\n const rules: TraceCheckRule[] = [];\n const select = new Set<string>(config.checks?.select ?? []);\n\n if (select.has(\"run.status\")) {\n rules.push(createRunStatusRule());\n }\n\n const requiredTools = [\n ...(config.checks?.tool?.required ?? []),\n ...(suiteCase.requireTools ?? []),\n ];\n const forbiddenTools = [\n ...(config.checks?.tool?.forbidden ?? []),\n ...(suiteCase.forbidTools ?? []),\n ];\n if (requiredTools.length > 0 || forbiddenTools.length > 0) {\n rules.push(\n createToolUsageRule({\n required: requiredTools.length > 0 ? requiredTools : undefined,\n forbidden: forbiddenTools.length > 0 ? forbiddenTools : undefined,\n }),\n );\n select.add(\"tool.usage\");\n }\n\n const maxDurationMs =\n suiteCase.maxDurationMs ??\n config.checks?.run?.maxDurationMs ??\n config.eval?.maxDurationMs;\n if (maxDurationMs !== undefined) {\n rules.push(createRunDurationRule({ maxDurationMs }));\n select.add(\"run.duration\");\n }\n\n const llm = config.checks?.llm;\n if (llm?.allowedModels !== undefined || llm?.maxTotalTokens !== undefined) {\n rules.push(createLlmUsageRule(llm));\n select.add(\"llm.usage\");\n }\n\n if (select.has(\"outcome.status\")) {\n rules.push(createObservedOutcomeRule({ failOn: [\"failed\"] }));\n }\n\n return { rules, select: [...select] };\n}\n\nfunction outcomesFromRead(read: TraceReadResult) {\n const persistedOutcomes = extractOutcomesFromPersistedEvents(\n read.events.filter((event) => event.kind === \"OUTCOME\"),\n );\n if (persistedOutcomes.length > 0) return persistedOutcomes;\n\n const traceEvents: TraceEvent[] = [];\n for (const event of read.events) {\n const legacy = event as unknown as TraceEvent;\n if (\n typeof legacy === \"object\" &&\n legacy !== null &&\n \"event\" in legacy &&\n legacy.event === \"outcome_observed\"\n ) {\n traceEvents.push(legacy);\n }\n }\n return traceEvents.length > 0 ? extractOutcomesFromTraceEvents(traceEvents) : [];\n}\n\nfunction validateExpectedObservations(\n suiteCase: SuiteCaseConfig,\n read: TraceReadResult,\n): { ok: boolean; diagnostics: SuiteDiagnostic[] } {\n const expected = suiteCase.expectedObservations ?? [];\n if (expected.length === 0) return { ok: true, diagnostics: [] };\n\n const outcomes = outcomesFromRead(read);\n\n const diagnostics: SuiteDiagnostic[] = [];\n for (const name of expected) {\n const match = outcomes.find((outcome) => outcome.name === name);\n if (!match) {\n diagnostics.push(\n diagnostic(\n \"AI_SUITE_CASE_OBSERVATION_FAILED\",\n `Expected observation \"${name}\" was not recorded.`,\n \"error\",\n suiteCase.id,\n ),\n );\n continue;\n }\n if (match.status !== \"passed\") {\n diagnostics.push(\n diagnostic(\n \"AI_SUITE_CASE_OBSERVATION_FAILED\",\n `Observation \"${name}\" has status \"${match.status}\", expected \"passed\".`,\n \"error\",\n suiteCase.id,\n ),\n );\n }\n }\n\n return { ok: diagnostics.length === 0, diagnostics };\n}\n\nasync function runSuiteCase(\n suiteCase: SuiteCaseConfig,\n config: SuiteConfig,\n options: { configDir: string; tracesDir: string },\n): Promise<SuiteCaseResult> {\n const resolved = await resolveSuiteCaseTrace(suiteCase, options);\n if (resolved.missing || resolved.tracePath === undefined) {\n return {\n id: suiteCase.id,\n status: \"skipped\",\n ...(resolved.runId !== undefined ? { runId: resolved.runId } : {}),\n message: resolved.reason,\n diagnostics: [\n diagnostic(\n \"AI_SUITE_CASE_TRACE_MISSING\",\n resolved.reason ?? \"Trace not found.\",\n \"warning\",\n suiteCase.id,\n ),\n ],\n };\n }\n\n let read: TraceReadResult;\n try {\n read = await openTrace({ type: \"file\", path: resolved.tracePath });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n id: suiteCase.id,\n status: \"error\",\n tracePath: resolved.tracePath,\n ...(resolved.runId !== undefined ? { runId: resolved.runId } : {}),\n message,\n diagnostics: [\n diagnostic(\"AI_SUITE_TRACE_UNREADABLE\", message, \"error\", suiteCase.id),\n ],\n };\n }\n\n const { rules, select } = buildCaseRules(suiteCase, config);\n const checkResult =\n rules.length > 0\n ? runTraceChecks({ read }, { rules, select })\n : {\n ok: true,\n status: \"pass\" as const,\n format: read.format,\n summary: { passed: 0, failed: 0, warnings: 0, errors: 0 },\n findings: [],\n diagnostics: [],\n };\n const observationResult = validateExpectedObservations(suiteCase, read);\n\n const diagnostics = [\n ...checkResult.diagnostics.map((item) =>\n diagnostic(\n \"AI_SUITE_CASE_CHECK_FAILED\",\n item.message,\n item.severity,\n suiteCase.id,\n ),\n ),\n ...checkResult.findings\n .filter((finding) => finding.status === \"fail\")\n .map((finding) =>\n diagnostic(\n \"AI_SUITE_CASE_CHECK_FAILED\",\n finding.message,\n finding.severity,\n suiteCase.id,\n ),\n ),\n ...observationResult.diagnostics,\n ];\n\n const checkOk = checkResult.ok;\n const observationsOk = observationResult.ok;\n const ok = checkOk && observationsOk;\n const status = ok ? \"pass\" : checkResult.status === \"error\" ? \"error\" : \"fail\";\n\n return {\n id: suiteCase.id,\n status,\n tracePath: resolved.tracePath,\n ...(resolved.runId !== undefined ? { runId: resolved.runId } : {}),\n checkOk,\n observationsOk,\n diagnostics,\n ...(ok\n ? {}\n : {\n message:\n diagnostics.map((item) => item.message).join(\"; \") ||\n checkResult.findings.map((item) => item.message).join(\"; \"),\n }),\n };\n}\n\nexport async function runSuite(options: RunSuiteOptions = {}): Promise<SuiteRunResult> {\n const startedAt = new Date(options.nowMs ?? Date.now()).toISOString();\n const { config, configPath, configDir } = await loadSuiteConfig(options);\n const tracesDir = path.resolve(configDir, config.traces);\n\n const cases: SuiteCaseResult[] = [];\n const diagnostics: SuiteDiagnostic[] = [];\n\n for (const suiteCase of config.cases) {\n cases.push(\n await runSuiteCase(suiteCase, config, {\n configDir,\n tracesDir,\n }),\n );\n }\n\n const summary = {\n passed: cases.filter((item) => item.status === \"pass\").length,\n failed: cases.filter((item) => item.status === \"fail\").length,\n errors: cases.filter((item) => item.status === \"error\").length,\n skipped: cases.filter((item) => item.status === \"skipped\").length,\n };\n\n const finishedAt = new Date(options.nowMs ?? Date.now()).toISOString();\n const ok = summary.failed === 0 && summary.errors === 0;\n const status =\n summary.errors > 0 ? \"error\" : summary.failed > 0 || !ok ? \"fail\" : \"pass\";\n\n return {\n ok,\n status,\n suiteName: config.name,\n configPath,\n tracesDir,\n startedAt,\n finishedAt,\n summary,\n cases,\n diagnostics,\n };\n}\n","import type { RenderSuiteReportOptions, SuiteRunResult } from \"./types.js\";\n\nfunction statusLabel(status: string): string {\n return status.toUpperCase();\n}\n\nexport function renderSuiteReportMarkdown(result: SuiteRunResult): string {\n const lines: string[] = [];\n lines.push(`# Suite: ${result.suiteName}`);\n lines.push(\"\");\n lines.push(`Status: **${statusLabel(result.status)}**`);\n lines.push(`Config: \\`${result.configPath}\\``);\n lines.push(`Traces: \\`${result.tracesDir}\\``);\n lines.push(`Started: ${result.startedAt}`);\n lines.push(`Finished: ${result.finishedAt}`);\n lines.push(\"\");\n lines.push(\"## Summary\");\n lines.push(`- Passed: ${result.summary.passed}`);\n lines.push(`- Failed: ${result.summary.failed}`);\n lines.push(`- Errors: ${result.summary.errors}`);\n lines.push(`- Skipped: ${result.summary.skipped}`);\n lines.push(\"\");\n lines.push(\"## Cases\");\n for (const suiteCase of result.cases) {\n lines.push(`### ${suiteCase.id} — ${statusLabel(suiteCase.status)}`);\n if (suiteCase.tracePath !== undefined) {\n lines.push(`- Trace: \\`${suiteCase.tracePath}\\``);\n }\n if (suiteCase.runId !== undefined) {\n lines.push(`- Run: \\`${suiteCase.runId}\\``);\n }\n if (suiteCase.message !== undefined && suiteCase.message.trim() !== \"\") {\n lines.push(`- ${suiteCase.message}`);\n }\n if (suiteCase.diagnostics.length > 0) {\n for (const item of suiteCase.diagnostics) {\n lines.push(`- [${item.severity}] ${item.message}`);\n }\n }\n lines.push(\"\");\n }\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderSuiteReport(\n result: SuiteRunResult,\n options: RenderSuiteReportOptions = {},\n): string {\n const format = options.format ?? \"markdown\";\n if (format === \"json\") {\n return JSON.stringify(result, null, 2);\n }\n return renderSuiteReportMarkdown(result);\n}\n","import type { TraceMetadataStatus } from \"../types.js\";\n\nexport type CohortMetricId =\n | \"errorRate\"\n | \"duration\"\n | \"toolChoice\"\n | \"toolOrdering\"\n | \"llmCallCount\"\n | \"tokenUsage\"\n | \"retryCount\"\n | \"observationFailure\"\n | \"guardrailFailure\"\n | \"circuitViolation\"\n | \"redactionWarning\";\n\nexport const COHORT_METRIC_IDS: readonly CohortMetricId[] = [\n \"errorRate\",\n \"duration\",\n \"toolChoice\",\n \"toolOrdering\",\n \"llmCallCount\",\n \"tokenUsage\",\n \"retryCount\",\n \"observationFailure\",\n \"guardrailFailure\",\n \"circuitViolation\",\n \"redactionWarning\",\n];\n\nexport interface CohortRunMetrics {\n runId: string;\n cohortLabel?: string;\n groupKey: string;\n status: TraceMetadataStatus;\n error: boolean;\n durationMs?: number;\n llmCallCount: number;\n tokenUsageTotal?: number;\n retryCount: number;\n observationFailures: number;\n guardrailFailures: number;\n circuitViolations: number;\n redactionWarnings: number;\n toolChoices: string[];\n toolOrdering: string[];\n}\n\nexport interface CohortAggregateMetrics {\n groupKey: string;\n cohortLabel?: string;\n runCount: number;\n errorRate: number;\n avgDurationMs?: number;\n p95DurationMs?: number;\n avgLlmCallCount: number;\n avgTokenUsage?: number;\n avgRetryCount: number;\n observationFailureRate: number;\n avgGuardrailFailures: number;\n avgCircuitViolations: number;\n avgRedactionWarnings: number;\n dominantToolChoice?: string;\n toolOrderingSignature?: string;\n}\n\nexport interface CohortMetricComparison {\n metric: CohortMetricId;\n baseline?: number | string;\n candidate?: number | string;\n delta?: number | string;\n regression: boolean;\n message: string;\n}\n\nexport interface CohortAnalysisResult {\n ok: boolean;\n traceDir: string;\n baseline?: string;\n candidate?: string;\n cohortKey: string;\n groupBy: string;\n metrics: CohortMetricId[];\n groups: CohortAggregateMetrics[];\n comparisons: CohortMetricComparison[];\n runs: CohortRunMetrics[];\n warnings: string[];\n}\n\nexport interface AnalyzeCohortOptions {\n traceDir: string;\n baseline?: string;\n candidate?: string;\n cohortKey?: string;\n groupBy?: string;\n metrics?: CohortMetricId[];\n}\n\nexport interface RenderCohortReportOptions {\n format?: \"markdown\" | \"json\" | \"html\";\n}\n","import { extractSessionWorkflowMetadata } from \"../sessions/metadata.js\";\nimport type { SessionRunRecord } from \"../sessions/types.js\";\n\nexport function parseCohortMetricList(value: string | undefined): string[] {\n if (value === undefined || value.trim() === \"\") return [];\n return value\n .split(\",\")\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n}\n\nexport function parseGroupBySpec(groupBy: string | undefined): {\n kind: \"model\" | \"session\" | \"group\" | \"metadata\";\n metadataKey?: string;\n} {\n const raw = (groupBy ?? \"model\").trim();\n if (raw === \"model\") return { kind: \"model\" };\n if (raw === \"session\") return { kind: \"session\" };\n if (raw === \"group\") return { kind: \"group\" };\n if (raw.startsWith(\"metadata.\")) {\n const metadataKey = raw.slice(\"metadata.\".length).trim();\n if (metadataKey === \"\") throw new Error(\"metadata group-by requires a key.\");\n return { kind: \"metadata\", metadataKey };\n }\n throw new Error(`Unsupported --group-by value: ${raw}`);\n}\n\nfunction metadataString(\n metadata: Record<string, unknown> | undefined,\n key: string,\n): string | undefined {\n const value = metadata?.[key];\n return typeof value === \"string\" && value.trim() !== \"\" ? value.trim() : undefined;\n}\n\nexport function resolveRunGroupKey(\n run: SessionRunRecord,\n groupBy: ReturnType<typeof parseGroupBySpec>,\n): string {\n const metadata = run.metadata ?? {};\n switch (groupBy.kind) {\n case \"model\":\n return metadataString(metadata, \"model\") ?? \"unknown\";\n case \"session\":\n return (\n extractSessionWorkflowMetadata(metadata)?.sessionId ??\n metadataString(metadata, \"sessionId\") ??\n \"__unscoped__\"\n );\n case \"group\":\n return (\n extractSessionWorkflowMetadata(metadata)?.groupId ??\n metadataString(metadata, \"groupId\") ??\n \"__unscoped__\"\n );\n case \"metadata\":\n return metadataString(metadata, groupBy.metadataKey!) ?? \"__missing__\";\n default:\n return \"unknown\";\n }\n}\n\nexport function resolveCohortLabel(\n run: SessionRunRecord,\n cohortKey: string,\n baseline?: string,\n candidate?: string,\n): string | undefined {\n const label = metadataString(run.metadata, cohortKey);\n if (label === undefined) return undefined;\n if (baseline !== undefined && label === baseline) return baseline;\n if (candidate !== undefined && label === candidate) return candidate;\n if (baseline === undefined && candidate === undefined) return label;\n return undefined;\n}\n\nexport function filterRunsForCohort(\n runs: readonly SessionRunRecord[],\n options: {\n cohortKey: string;\n baseline?: string;\n candidate?: string;\n },\n): { runs: SessionRunRecord[]; warnings: string[] } {\n const warnings: string[] = [];\n if (options.baseline === undefined && options.candidate === undefined) {\n return { runs: [...runs], warnings };\n }\n\n const selected: SessionRunRecord[] = [];\n for (const run of runs) {\n const label = resolveCohortLabel(\n run,\n options.cohortKey,\n options.baseline,\n options.candidate,\n );\n if (label !== undefined) selected.push(run);\n }\n\n if (selected.length === 0) {\n warnings.push(\n `No runs matched baseline/candidate labels on metadata.${options.cohortKey}.`,\n );\n }\n\n return { runs: selected, warnings };\n}\n","import type {\n CohortAggregateMetrics,\n CohortMetricComparison,\n CohortMetricId,\n} from \"./types.js\";\n\nfunction compareNumber(\n metric: CohortMetricId,\n label: string,\n baseline?: number,\n candidate?: number,\n higherIsWorse = true,\n): CohortMetricComparison | undefined {\n if (baseline === undefined && candidate === undefined) return undefined;\n const delta =\n baseline !== undefined && candidate !== undefined\n ? candidate - baseline\n : undefined;\n const regression =\n delta !== undefined &&\n ((higherIsWorse && delta > 0) || (!higherIsWorse && delta < 0));\n return {\n metric,\n baseline,\n candidate,\n delta,\n regression,\n message: `${label}: baseline=${baseline ?? \"n/a\"} candidate=${candidate ?? \"n/a\"}${\n delta !== undefined ? ` (delta ${delta})` : \"\"\n }`,\n };\n}\n\nfunction pickAggregate(\n groups: readonly CohortAggregateMetrics[],\n cohortLabel: string,\n groupKey?: string,\n): CohortAggregateMetrics | undefined {\n return groups.find(\n (group) =>\n group.cohortLabel === cohortLabel &&\n (groupKey === undefined || group.groupKey === groupKey),\n );\n}\n\nexport function compareCohortAggregates(\n groups: readonly CohortAggregateMetrics[],\n options: {\n baseline: string;\n candidate: string;\n metrics: readonly CohortMetricId[];\n groupKey?: string;\n },\n): CohortMetricComparison[] {\n const baselineAgg = pickAggregate(groups, options.baseline, options.groupKey);\n const candidateAgg = pickAggregate(groups, options.candidate, options.groupKey);\n const comparisons: CohortMetricComparison[] = [];\n\n for (const metric of options.metrics) {\n switch (metric) {\n case \"errorRate\": {\n const item = compareNumber(\n metric,\n \"Error rate\",\n baselineAgg?.errorRate,\n candidateAgg?.errorRate,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"duration\": {\n const item = compareNumber(\n metric,\n \"Average duration (ms)\",\n baselineAgg?.avgDurationMs,\n candidateAgg?.avgDurationMs,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"llmCallCount\": {\n const item = compareNumber(\n metric,\n \"Average LLM calls\",\n baselineAgg?.avgLlmCallCount,\n candidateAgg?.avgLlmCallCount,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"tokenUsage\": {\n const item = compareNumber(\n metric,\n \"Average token usage\",\n baselineAgg?.avgTokenUsage,\n candidateAgg?.avgTokenUsage,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"retryCount\": {\n const item = compareNumber(\n metric,\n \"Average retries\",\n baselineAgg?.avgRetryCount,\n candidateAgg?.avgRetryCount,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"observationFailure\": {\n const item = compareNumber(\n metric,\n \"Observation failure rate\",\n baselineAgg?.observationFailureRate,\n candidateAgg?.observationFailureRate,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"toolChoice\": {\n const baselineValue = baselineAgg?.dominantToolChoice;\n const candidateValue = candidateAgg?.dominantToolChoice;\n comparisons.push({\n metric,\n baseline: baselineValue,\n candidate: candidateValue,\n delta: baselineValue === candidateValue ? \"same\" : \"changed\",\n regression: baselineValue !== candidateValue,\n message: `Tool choice: baseline=${baselineValue ?? \"n/a\"} candidate=${candidateValue ?? \"n/a\"}`,\n });\n break;\n }\n case \"toolOrdering\": {\n const baselineValue = baselineAgg?.toolOrderingSignature;\n const candidateValue = candidateAgg?.toolOrderingSignature;\n comparisons.push({\n metric,\n baseline: baselineValue,\n candidate: candidateValue,\n delta: baselineValue === candidateValue ? \"same\" : \"changed\",\n regression: baselineValue !== candidateValue,\n message: `Tool ordering: baseline=${baselineValue ?? \"n/a\"} candidate=${candidateValue ?? \"n/a\"}`,\n });\n break;\n }\n case \"guardrailFailure\": {\n const item = compareNumber(\n metric,\n \"Guardrail failures\",\n baselineAgg?.avgGuardrailFailures,\n candidateAgg?.avgGuardrailFailures,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"circuitViolation\": {\n const item = compareNumber(\n metric,\n \"Circuit violations\",\n baselineAgg?.avgCircuitViolations,\n candidateAgg?.avgCircuitViolations,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"redactionWarning\": {\n const item = compareNumber(\n metric,\n \"Redaction warnings\",\n baselineAgg?.avgRedactionWarnings,\n candidateAgg?.avgRedactionWarnings,\n );\n if (item) comparisons.push(item);\n break;\n }\n default:\n break;\n }\n }\n\n return comparisons;\n}\n","import { extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { buildRunSummary } from \"../trace-metadata.js\";\nimport { readTraceEventsFromFile } from \"../storage.js\";\nimport type { StepStartedEvent, TraceEvent } from \"../types.js\";\nimport type { CohortRunMetrics } from \"./types.js\";\n\nfunction asNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction toolSteps(events: readonly TraceEvent[]): { choices: string[]; ordering: string[] } {\n const ordering: string[] = [];\n const choices = new Set<string>();\n const sorted = [...events]\n .filter((event) => event.event === \"step_started\")\n .sort((a, b) => a.timestamp - b.timestamp);\n for (const event of sorted) {\n const step = event as StepStartedEvent;\n if (step.type !== \"tool\") continue;\n const name =\n typeof step.metadata?.toolName === \"string\"\n ? step.metadata.toolName\n : step.name;\n ordering.push(name);\n choices.add(name);\n }\n return { choices: [...choices].sort(), ordering };\n}\n\nexport async function computeCohortRunMetrics(input: {\n runId: string;\n filePath: string;\n metadata?: Record<string, unknown>;\n status?: CohortRunMetrics[\"status\"];\n durationMs?: number;\n groupKey: string;\n cohortLabel?: string;\n}): Promise<CohortRunMetrics> {\n const events = await readTraceEventsFromFile(input.filePath);\n const summary = buildRunSummary(events);\n const tools = toolSteps(events);\n const outcomes = extractOutcomesFromTraceEvents(events);\n const observationFailures = outcomes.filter((item) => item.status === \"failed\").length;\n\n const metadata = input.metadata ?? {};\n const retryCount =\n asNumber(metadata.attempt) !== undefined && asNumber(metadata.attempt)! > 1\n ? asNumber(metadata.attempt)! - 1\n : typeof metadata.retryOf === \"string\"\n ? 1\n : 0;\n\n return {\n runId: input.runId,\n ...(input.cohortLabel !== undefined ? { cohortLabel: input.cohortLabel } : {}),\n groupKey: input.groupKey,\n status: summary.status,\n error: summary.status === \"error\",\n durationMs: summary.durationMs ?? input.durationMs,\n llmCallCount: summary.llmSteps,\n tokenUsageTotal: summary.totalTokens?.total,\n retryCount,\n observationFailures,\n guardrailFailures: asNumber(metadata.guardrailFailures) ?? 0,\n circuitViolations: asNumber(metadata.circuitViolations) ?? 0,\n redactionWarnings: asNumber(metadata.redactionWarnings) ?? 0,\n toolChoices: tools.choices,\n toolOrdering: tools.ordering,\n };\n}\n\nfunction percentile(values: number[], p: number): number | undefined {\n if (values.length === 0) return undefined;\n const sorted = [...values].sort((a, b) => a - b);\n const idx = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n );\n return sorted[idx];\n}\n\nfunction dominantToolChoice(runs: readonly CohortRunMetrics[]): string | undefined {\n const counts = new Map<string, number>();\n for (const run of runs) {\n const signature = run.toolChoices.join(\",\");\n if (signature === \"\") continue;\n counts.set(signature, (counts.get(signature) ?? 0) + 1);\n }\n let best: string | undefined;\n let bestCount = 0;\n for (const [key, count] of counts) {\n if (count > bestCount) {\n best = key;\n bestCount = count;\n }\n }\n return best;\n}\n\nfunction orderingSignature(runs: readonly CohortRunMetrics[]): string | undefined {\n const counts = new Map<string, number>();\n for (const run of runs) {\n const signature = run.toolOrdering.join(\">\");\n if (signature === \"\") continue;\n counts.set(signature, (counts.get(signature) ?? 0) + 1);\n }\n let best: string | undefined;\n let bestCount = 0;\n for (const [key, count] of counts) {\n if (count > bestCount) {\n best = key;\n bestCount = count;\n }\n }\n return best;\n}\n\nexport function aggregateCohortMetrics(\n runs: readonly CohortRunMetrics[],\n groupKey: string,\n cohortLabel?: string,\n) {\n const durations = runs\n .map((run) => run.durationMs)\n .filter((value): value is number => typeof value === \"number\");\n const tokenValues = runs\n .map((run) => run.tokenUsageTotal)\n .filter((value): value is number => typeof value === \"number\");\n const errors = runs.filter((run) => run.error).length;\n const observationFailures = runs.reduce((sum, run) => sum + run.observationFailures, 0);\n\n return {\n groupKey,\n ...(cohortLabel !== undefined ? { cohortLabel } : {}),\n runCount: runs.length,\n errorRate: runs.length > 0 ? errors / runs.length : 0,\n avgDurationMs:\n durations.length > 0\n ? durations.reduce((sum, value) => sum + value, 0) / durations.length\n : undefined,\n p95DurationMs: percentile(durations, 95),\n avgLlmCallCount:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.llmCallCount, 0) / runs.length\n : 0,\n avgTokenUsage:\n tokenValues.length > 0\n ? tokenValues.reduce((sum, value) => sum + value, 0) / tokenValues.length\n : undefined,\n avgRetryCount:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.retryCount, 0) / runs.length\n : 0,\n observationFailureRate:\n runs.length > 0 ? observationFailures / runs.length : 0,\n avgGuardrailFailures:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.guardrailFailures, 0) / runs.length\n : 0,\n avgCircuitViolations:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.circuitViolations, 0) / runs.length\n : 0,\n avgRedactionWarnings:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.redactionWarnings, 0) / runs.length\n : 0,\n dominantToolChoice: dominantToolChoice(runs),\n toolOrderingSignature: orderingSignature(runs),\n };\n}\n","import type { SessionRunRecord } from \"../sessions/types.js\";\nimport { compareCohortAggregates } from \"./compare.js\";\nimport {\n filterRunsForCohort,\n parseGroupBySpec,\n resolveCohortLabel,\n resolveRunGroupKey,\n} from \"./grouping.js\";\nimport { aggregateCohortMetrics, computeCohortRunMetrics } from \"./metrics.js\";\nimport {\n COHORT_METRIC_IDS,\n type AnalyzeCohortOptions,\n type CohortAnalysisResult,\n type CohortMetricComparison,\n type CohortMetricId,\n} from \"./types.js\";\n\nconst DEFAULT_METRICS: CohortMetricId[] = [\n \"errorRate\",\n \"duration\",\n \"toolChoice\",\n \"observationFailure\",\n];\n\nfunction normalizeMetrics(metrics: CohortMetricId[] | undefined): CohortMetricId[] {\n if (metrics === undefined || metrics.length === 0) return [...DEFAULT_METRICS];\n const allowed = new Set(COHORT_METRIC_IDS);\n return metrics.filter((metric) => allowed.has(metric));\n}\n\nexport async function analyzeCohort(\n runsInput: readonly SessionRunRecord[],\n options: AnalyzeCohortOptions,\n): Promise<CohortAnalysisResult> {\n const cohortKey = options.cohortKey ?? \"cohort\";\n const groupBySpec = parseGroupBySpec(options.groupBy);\n const metrics = normalizeMetrics(options.metrics);\n const { runs: filteredRuns, warnings } = filterRunsForCohort(runsInput, {\n cohortKey,\n baseline: options.baseline,\n candidate: options.candidate,\n });\n\n const runMetrics = [];\n for (const run of filteredRuns) {\n if (run.filePath === undefined) continue;\n const cohortLabel = resolveCohortLabel(\n run,\n cohortKey,\n options.baseline,\n options.candidate,\n );\n runMetrics.push(\n await computeCohortRunMetrics({\n runId: run.runId,\n filePath: run.filePath,\n metadata: run.metadata,\n status: run.status,\n durationMs: run.durationMs,\n groupKey: resolveRunGroupKey(run, groupBySpec),\n cohortLabel,\n }),\n );\n }\n\n const groupMap = new Map<string, typeof runMetrics>();\n for (const run of runMetrics) {\n const key = `${run.cohortLabel ?? \"*\"}::${run.groupKey}`;\n const bucket = groupMap.get(key) ?? [];\n bucket.push(run);\n groupMap.set(key, bucket);\n }\n\n const groups = [...groupMap.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([, bucket]) =>\n aggregateCohortMetrics(\n bucket,\n bucket[0]!.groupKey,\n bucket[0]?.cohortLabel,\n ),\n );\n\n const comparisons =\n options.baseline !== undefined && options.candidate !== undefined\n ? (() => {\n const groupKeys = [\n ...new Set(groups.map((group) => group.groupKey)),\n ].sort((a, b) => a.localeCompare(b));\n const items: CohortMetricComparison[] = [];\n for (const groupKey of groupKeys) {\n items.push(\n ...compareCohortAggregates(groups, {\n baseline: options.baseline,\n candidate: options.candidate,\n metrics,\n groupKey,\n }),\n );\n }\n return items;\n })()\n : [];\n\n const regression = comparisons.some((item) => item.regression);\n\n return {\n ok: !regression,\n traceDir: options.traceDir,\n ...(options.baseline !== undefined ? { baseline: options.baseline } : {}),\n ...(options.candidate !== undefined ? { candidate: options.candidate } : {}),\n cohortKey,\n groupBy: options.groupBy ?? \"model\",\n metrics,\n groups,\n comparisons,\n runs: runMetrics,\n warnings,\n };\n}\n","import type { InspectKind, InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\n\nconst REDACT_SUBSTRINGS = [\n \"authorization\",\n \"cookie\",\n \"token\",\n \"apikey\",\n \"password\",\n \"secret\",\n \"email\",\n] as const;\n\nfunction shouldRedactKey(key: string): boolean {\n const k = key.toLowerCase();\n for (const s of REDACT_SUBSTRINGS) {\n if (k.includes(s)) return true;\n }\n return false;\n}\n\nexport function safeString(value: unknown, maxLength?: number): string {\n if (value === null || value === undefined) return \"\";\n let s: string;\n if (typeof value === \"string\") s = value;\n else if (typeof value === \"number\" || typeof value === \"boolean\") s = String(value);\n else s = stableJson(value, false);\n if (maxLength !== undefined && maxLength >= 0 && s.length > maxLength) {\n return `${s.slice(0, maxLength)}…`;\n }\n return s;\n}\n\n/** Escape markdown table pipes and normalize line breaks for safe inline text. */\nexport function escapeMarkdown(value: string): string {\n return value\n .replace(/\\|/g, \"\\\\|\")\n .replace(/\\r\\n/g, \"\\n\")\n .replace(/\\r/g, \"\\n\")\n .replace(/\\n/g, \" \");\n}\n\nexport function escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction sortKeysDeep(input: unknown): unknown {\n if (input === null || typeof input !== \"object\") return input;\n if (Array.isArray(input)) return input.map(sortKeysDeep);\n const o = input as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const k of Object.keys(o).sort()) {\n out[k] = sortKeysDeep(o[k]);\n }\n return out;\n}\n\nexport function stableJson(value: unknown, pretty?: boolean): string {\n const sorted = sortKeysDeep(value);\n return pretty === true ? JSON.stringify(sorted, null, 2) : JSON.stringify(sorted);\n}\n\nexport function compactAttributes(\n attrs: Record<string, unknown> | undefined,\n options?: { maxLength?: number; redacted?: boolean },\n): Record<string, unknown> {\n if (attrs === undefined) return {};\n const maxLen = options?.maxLength ?? 500;\n const redacted = options?.redacted ?? true;\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(attrs).sort()) {\n if (redacted && shouldRedactKey(key)) {\n out[key] = \"[REDACTED]\";\n continue;\n }\n const v = attrs[key];\n out[key] = compactValue(v, maxLen, redacted);\n }\n return out;\n}\n\nfunction compactValue(value: unknown, maxLen: number, redacted: boolean): unknown {\n if (value === null || typeof value !== \"object\") {\n return typeof value === \"string\" ? safeString(value, maxLen) : value;\n }\n if (Array.isArray(value)) {\n const arr = value.slice(0, 20).map((x) => compactValue(x, maxLen, redacted));\n if (value.length > 20) arr.push(`…(+${value.length - 20} more)`);\n return arr;\n }\n const o = value as Record<string, unknown>;\n const inner: Record<string, unknown> = {};\n for (const k of Object.keys(o)) {\n if (redacted && shouldRedactKey(k)) inner[k] = \"[REDACTED]\";\n else inner[k] = compactValue(o[k], maxLen, redacted);\n }\n return inner;\n}\n\nexport function summarizeTree(tree: InspectRunTree): Record<string, unknown> {\n const flat = flattenTree(tree);\n const errorNodes = flat.filter((n) => n.event.status === \"error\").length;\n return {\n runId: tree.runId,\n name: tree.name,\n status: tree.status,\n startedAt: tree.startedAt,\n endedAt: tree.endedAt,\n durationMs: tree.durationMs,\n stepCount: flat.length,\n errorStepCount: errorNodes,\n totalEvents: tree.metadata.totalEvents,\n confidenceBreakdown: { ...tree.metadata.confidenceBreakdown },\n kinds: { ...tree.metadata.kinds },\n };\n}\n\n/** Depth-first pre-order flatten (matches typical tree display). */\nexport function flattenTree(tree: InspectRunTree): InspectNode[] {\n const out: InspectNode[] = [];\n function walk(nodes: InspectNode[]): void {\n for (const n of nodes) {\n out.push(n);\n if (n.children.length > 0) walk(n.children);\n }\n }\n walk(tree.children);\n return out;\n}\n\nexport function zeroKinds(): Record<InspectKind, number> {\n return {\n RUN: 0,\n AGENT: 0,\n LLM: 0,\n TOOL: 0,\n CHAIN: 0,\n RETRIEVER: 0,\n DECISION: 0,\n RESULT: 0,\n ERROR: 0,\n LOGIC: 0,\n LOG: 0,\n OUTCOME: 0,\n };\n}\n","import { escapeHtml } from \"../exporters/helpers.js\";\nimport type { CohortAnalysisResult, RenderCohortReportOptions } from \"./types.js\";\n\nfunction formatRate(value: number | undefined): string {\n if (value === undefined) return \"n/a\";\n return `${(value * 100).toFixed(1)}%`;\n}\n\nexport function renderCohortSummaryMarkdown(result: CohortAnalysisResult): string {\n const lines: string[] = [];\n lines.push(\"# Cohort analysis\");\n lines.push(\"\");\n lines.push(`Trace directory: \\`${result.traceDir}\\``);\n lines.push(`Group by: \\`${result.groupBy}\\``);\n if (result.baseline !== undefined && result.candidate !== undefined) {\n lines.push(\n `Baseline/Candidate key: \\`${result.cohortKey}\\` (${result.baseline} vs ${result.candidate})`,\n );\n }\n lines.push(`Status: **${result.ok ? \"PASS\" : \"REGRESSION\"}**`);\n lines.push(\"\");\n\n if (result.warnings.length > 0) {\n lines.push(\"## Warnings\");\n for (const warning of result.warnings) lines.push(`- ${warning}`);\n lines.push(\"\");\n }\n\n lines.push(\"## Groups\");\n for (const group of result.groups) {\n lines.push(\n `### ${group.cohortLabel ?? \"all\"} / ${group.groupKey} (${group.runCount} runs)`,\n );\n lines.push(`- Error rate: ${formatRate(group.errorRate)}`);\n if (group.avgDurationMs !== undefined) {\n lines.push(`- Avg duration: ${Math.round(group.avgDurationMs)} ms`);\n }\n if (group.dominantToolChoice !== undefined) {\n lines.push(`- Dominant tools: ${group.dominantToolChoice}`);\n }\n lines.push(\n `- Observation failure rate: ${formatRate(group.observationFailureRate)}`,\n );\n lines.push(\"\");\n }\n\n if (result.comparisons.length > 0) {\n lines.push(\"## Comparisons\");\n for (const comparison of result.comparisons) {\n const flag = comparison.regression ? \" **REGRESSION**\" : \"\";\n lines.push(`- ${comparison.message}${flag}`);\n }\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderCohortReportHtml(result: CohortAnalysisResult): string {\n const rows = result.groups\n .map(\n (group) =>\n `<tr><td>${escapeHtml(group.cohortLabel ?? \"all\")}</td><td>${escapeHtml(group.groupKey)}</td><td>${group.runCount}</td><td>${escapeHtml(formatRate(group.errorRate))}</td><td>${group.avgDurationMs !== undefined ? Math.round(group.avgDurationMs) : \"n/a\"}</td></tr>`,\n )\n .join(\"\");\n\n const comparisons = result.comparisons\n .map(\n (item) =>\n `<li>${escapeHtml(item.message)}${item.regression ? \" <strong>REGRESSION</strong>\" : \"\"}</li>`,\n )\n .join(\"\");\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\" />\n <title>Cohort report</title>\n <style>\n body { font-family: system-ui, sans-serif; margin: 2rem; }\n table { border-collapse: collapse; width: 100%; }\n th, td { border: 1px solid #ddd; padding: 0.5rem; text-align: left; }\n th { background: #f6f6f6; }\n </style>\n</head>\n<body>\n <h1>Cohort analysis</h1>\n <p>Status: <strong>${result.ok ? \"PASS\" : \"REGRESSION\"}</strong></p>\n <p>Trace directory: <code>${escapeHtml(result.traceDir)}</code></p>\n <h2>Groups</h2>\n <table>\n <thead><tr><th>Cohort</th><th>Group</th><th>Runs</th><th>Error rate</th><th>Avg duration (ms)</th></tr></thead>\n <tbody>${rows}</tbody>\n </table>\n ${result.comparisons.length > 0 ? `<h2>Comparisons</h2><ul>${comparisons}</ul>` : \"\"}\n</body>\n</html>`;\n}\n\nexport function renderCohortReport(\n result: CohortAnalysisResult,\n options: RenderCohortReportOptions = {},\n): string {\n const format = options.format ?? \"markdown\";\n if (format === \"json\") return JSON.stringify(result, null, 2);\n if (format === \"html\") return renderCohortReportHtml(result);\n return renderCohortSummaryMarkdown(result);\n}\n","export function parseGateList(value: string | undefined): string[] {\n if (value === undefined || value.trim() === \"\") return [];\n return value\n .split(\",\")\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n}\n\nexport function parseGateNumber(\n value: string | undefined,\n label: string,\n): number | undefined {\n if (value === undefined || value.trim() === \"\") return undefined;\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) {\n throw new Error(`Invalid ${label}: ${value}`);\n }\n return parsed;\n}\n","import { extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { readTraceEventsFromFile } from \"../storage.js\";\nimport { computeCohortRunMetrics } from \"../cohort/metrics.js\";\nimport type { SessionRunRecord } from \"../sessions/types.js\";\nimport type { GateCheckResult, RunGateOptions } from \"./types.js\";\n\nfunction percentile(values: number[], p: number): number | undefined {\n if (values.length === 0) return undefined;\n const sorted = [...values].sort((a, b) => a - b);\n const idx = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n );\n return sorted[idx];\n}\n\nfunction hasThresholds(options: RunGateOptions): boolean {\n return (\n options.maxErrorRate !== undefined ||\n options.maxP95DurationMs !== undefined ||\n (options.forbidTools?.length ?? 0) > 0 ||\n (options.requireObservations?.length ?? 0) > 0\n );\n}\n\nexport function gateHasThresholds(options: RunGateOptions): boolean {\n return hasThresholds(options);\n}\n\nasync function loadRunMetrics(runs: readonly SessionRunRecord[]) {\n const metrics = [];\n for (const run of runs) {\n if (run.filePath === undefined) continue;\n metrics.push(\n await computeCohortRunMetrics({\n runId: run.runId,\n filePath: run.filePath,\n metadata: run.metadata,\n status: run.status,\n durationMs: run.durationMs,\n groupKey: \"all\",\n }),\n );\n }\n return metrics;\n}\n\nasync function observationStatus(\n filePath: string,\n name: string,\n): Promise<\"passed\" | \"failed\" | \"missing\"> {\n const events = await readTraceEventsFromFile(filePath);\n const outcomes = extractOutcomesFromTraceEvents(events);\n const match = outcomes.find((item) => item.name === name);\n if (!match) return \"missing\";\n return match.status === \"passed\" ? \"passed\" : \"failed\";\n}\n\nexport async function evaluateGateThresholds(\n runs: readonly SessionRunRecord[],\n options: RunGateOptions,\n): Promise<{ checks: GateCheckResult[]; readErrors: string[] }> {\n const checks: GateCheckResult[] = [];\n const readErrors: string[] = [];\n\n if (!hasThresholds(options)) {\n return { checks, readErrors };\n }\n\n if (runs.length === 0) {\n readErrors.push(\"No trace runs found in the gate directory.\");\n return { checks, readErrors };\n }\n\n let runMetrics;\n try {\n runMetrics = await loadRunMetrics(runs);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n readErrors.push(message);\n return { checks, readErrors };\n }\n\n if (options.maxErrorRate !== undefined) {\n const errors = runMetrics.filter((run) => run.error).length;\n const actual = runMetrics.length > 0 ? (errors / runMetrics.length) * 100 : 0;\n const ok = actual <= options.maxErrorRate;\n checks.push({\n id: \"maxErrorRate\",\n name: \"Max error rate\",\n ok,\n expected: options.maxErrorRate,\n actual: Math.round(actual * 10) / 10,\n message: ok\n ? `Error rate ${actual.toFixed(1)}% within limit ${options.maxErrorRate}%`\n : `Error rate ${actual.toFixed(1)}% exceeds limit ${options.maxErrorRate}%`,\n });\n }\n\n if (options.maxP95DurationMs !== undefined) {\n const durations = runMetrics\n .map((run) => run.durationMs)\n .filter((value): value is number => typeof value === \"number\");\n const actual = percentile(durations, 95);\n const ok = actual !== undefined && actual <= options.maxP95DurationMs;\n checks.push({\n id: \"maxP95Duration\",\n name: \"Max p95 duration (ms)\",\n ok,\n expected: options.maxP95DurationMs,\n actual: actual ?? \"n/a\",\n message:\n actual === undefined\n ? \"No duration samples available for p95 check.\"\n : ok\n ? `P95 duration ${Math.round(actual)} ms within limit ${options.maxP95DurationMs} ms`\n : `P95 duration ${Math.round(actual)} ms exceeds limit ${options.maxP95DurationMs} ms`,\n });\n }\n\n for (const tool of options.forbidTools ?? []) {\n let violated = false;\n for (const run of runMetrics) {\n const used =\n run.toolChoices.includes(tool) || run.toolOrdering.includes(tool);\n if (used) {\n violated = true;\n checks.push({\n id: \"forbidTool\",\n name: `Forbid tool: ${tool}`,\n ok: false,\n expected: `not used`,\n actual: \"used\",\n runId: run.runId,\n message: `Forbidden tool \"${tool}\" used in run ${run.runId}`,\n });\n }\n }\n if (!violated) {\n checks.push({\n id: \"forbidTool\",\n name: `Forbid tool: ${tool}`,\n ok: true,\n message: `Forbidden tool \"${tool}\" not used`,\n });\n }\n }\n\n for (const observation of options.requireObservations ?? []) {\n for (const run of runs) {\n if (run.filePath === undefined) continue;\n try {\n const status = await observationStatus(run.filePath, observation);\n const ok = status === \"passed\";\n checks.push({\n id: \"requireObservation\",\n name: `Require observation: ${observation}`,\n ok,\n expected: \"passed\",\n actual: status,\n runId: run.runId,\n message: ok\n ? `Observation \"${observation}\" passed in run ${run.runId}`\n : status === \"missing\"\n ? `Observation \"${observation}\" missing in run ${run.runId}`\n : `Observation \"${observation}\" failed in run ${run.runId}`,\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n readErrors.push(`Run ${run.runId}: ${message}`);\n }\n }\n }\n\n return { checks, readErrors };\n}\n\nexport function checksFromSuiteResult(\n suiteResult: import(\"../suite/types.js\").SuiteRunResult,\n): GateCheckResult[] {\n const checks: GateCheckResult[] = [\n {\n id: \"suite\",\n name: `Suite: ${suiteResult.suiteName}`,\n ok: suiteResult.ok,\n message: suiteResult.ok\n ? `Suite passed (${suiteResult.summary.passed} cases)`\n : `Suite failed (${suiteResult.summary.failed} failed, ${suiteResult.summary.errors} errors)`,\n },\n ];\n\n for (const suiteCase of suiteResult.cases) {\n if (suiteCase.status === \"pass\") continue;\n checks.push({\n id: \"suite\",\n name: `Case: ${suiteCase.id}`,\n ok: false,\n message: suiteCase.message ?? `Case status: ${suiteCase.status}`,\n });\n }\n\n return checks;\n}\n","import path from \"node:path\";\n\nimport { runSuite } from \"../suite/run.js\";\nimport type { GateCheckResult, GateExitCode, GateResult, RunGateOptions } from \"./types.js\";\nimport { checksFromSuiteResult, evaluateGateThresholds, gateHasThresholds } from \"./evaluate.js\";\n\nfunction resolveExitCode(input: {\n ok: boolean;\n configError: boolean;\n readError: boolean;\n}): GateExitCode {\n if (input.configError) return 2;\n if (input.readError) return 3;\n if (!input.ok) return 1;\n return 0;\n}\n\nfunction validateOptions(options: RunGateOptions): string[] {\n const errors: string[] = [];\n const hasSuite = options.suitePath !== undefined && options.suitePath.trim() !== \"\";\n const hasThresholds = gateHasThresholds(options);\n\n if (!hasSuite && !hasThresholds) {\n errors.push(\n \"No gate rules specified. Pass --suite or at least one threshold flag.\",\n );\n }\n\n if (hasThresholds && (options.traceDir === undefined || options.traceDir.trim() === \"\")) {\n if (!hasSuite) {\n errors.push(\"Threshold flags require --dir <trace-directory>.\");\n }\n }\n\n if (options.maxErrorRate !== undefined && options.maxErrorRate < 0) {\n errors.push(\"--max-error-rate must be a non-negative percentage.\");\n }\n\n if (options.maxP95DurationMs !== undefined && options.maxP95DurationMs < 0) {\n errors.push(\"--max-p95-duration must be a non-negative millisecond value.\");\n }\n\n return errors;\n}\n\nfunction isConfigLoadError(error: unknown): boolean {\n if (!(error instanceof Error)) return false;\n const ext = path.extname(error.message);\n if (error.message.includes(\"Unsupported suite config extension\")) return true;\n if (error.message.includes(\"TypeScript suite configs require\")) return true;\n if (error.message.includes(\"No suite config found\")) return true;\n if (error.message.includes(\"AI_SUITE_CONFIG\")) return true;\n if (ext === \".ts\" || ext === \".mts\" || ext === \".cts\") return true;\n return \"diagnostics\" in error;\n}\n\nexport async function runGate(\n runs: readonly import(\"../sessions/types.js\").SessionRunRecord[],\n options: RunGateOptions,\n): Promise<GateResult> {\n const diagnostics: string[] = [];\n const checks: GateCheckResult[] = [];\n\n const validationErrors = validateOptions(options);\n if (validationErrors.length > 0) {\n return {\n ok: false,\n exitCode: 2,\n runCount: 0,\n checks,\n diagnostics: validationErrors,\n };\n }\n\n let traceDir = options.traceDir?.trim();\n let suiteResult: GateResult[\"suiteResult\"];\n\n if (options.suitePath !== undefined && options.suitePath.trim() !== \"\") {\n try {\n suiteResult = await runSuite({\n configPath: options.suitePath,\n cwd: options.cwd,\n });\n traceDir = traceDir ?? suiteResult.tracesDir;\n checks.push(...checksFromSuiteResult(suiteResult));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n diagnostics.push(message);\n return {\n ok: false,\n exitCode: isConfigLoadError(error) ? 2 : 3,\n traceDir,\n suitePath: options.suitePath,\n runCount: 0,\n checks,\n diagnostics,\n };\n }\n }\n\n if (gateHasThresholds(options)) {\n const thresholdDir = traceDir;\n if (thresholdDir === undefined || thresholdDir.trim() === \"\") {\n return {\n ok: false,\n exitCode: 2,\n traceDir,\n suitePath: options.suitePath,\n runCount: runs.length,\n checks,\n diagnostics: [\"Threshold evaluation requires a trace directory.\"],\n ...(suiteResult !== undefined ? { suiteResult } : {}),\n };\n }\n\n const thresholdRuns = runs.length > 0 ? runs : [];\n const { checks: thresholdChecks, readErrors } = await evaluateGateThresholds(\n thresholdRuns,\n options,\n );\n checks.push(...thresholdChecks);\n diagnostics.push(...readErrors);\n\n if (readErrors.length > 0) {\n const ok = checks.length > 0 && checks.every((item) => item.ok);\n return {\n ok,\n exitCode: resolveExitCode({\n ok,\n configError: false,\n readError: true,\n }),\n traceDir: thresholdDir,\n suitePath: options.suitePath,\n runCount: thresholdRuns.length,\n checks,\n diagnostics,\n ...(suiteResult !== undefined ? { suiteResult } : {}),\n };\n }\n }\n\n const ok = checks.length > 0 && checks.every((item) => item.ok);\n return {\n ok,\n exitCode: resolveExitCode({ ok, configError: false, readError: false }),\n traceDir,\n suitePath: options.suitePath,\n runCount: runs.length,\n checks,\n diagnostics,\n ...(suiteResult !== undefined ? { suiteResult } : {}),\n };\n}\n","import { escapeHtml } from \"../exporters/helpers.js\";\nimport type { GateResult, RenderGateReportOptions } from \"./types.js\";\n\nfunction escapeXml(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nexport function renderGateSummaryMarkdown(result: GateResult): string {\n const lines: string[] = [];\n lines.push(\"# AgentInspect gate\");\n lines.push(\"\");\n lines.push(`Status: **${result.ok ? \"PASS\" : \"FAIL\"}** (exit ${result.exitCode})`);\n if (result.traceDir !== undefined) {\n lines.push(`Trace directory: \\`${result.traceDir}\\``);\n }\n if (result.suitePath !== undefined) {\n lines.push(`Suite config: \\`${result.suitePath}\\``);\n }\n lines.push(`Runs evaluated: ${result.runCount}`);\n lines.push(\"\");\n\n if (result.diagnostics.length > 0) {\n lines.push(\"## Diagnostics\");\n for (const item of result.diagnostics) lines.push(`- ${item}`);\n lines.push(\"\");\n }\n\n lines.push(\"## Checks\");\n for (const check of result.checks) {\n const flag = check.ok ? \"PASS\" : \"FAIL\";\n lines.push(`- [${flag}] ${check.name}: ${check.message}`);\n }\n lines.push(\"\");\n\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderGateGithubStepSummary(result: GateResult): string {\n const lines: string[] = [];\n lines.push(`## AgentInspect gate: ${result.ok ? \"PASS\" : \"FAIL\"}`);\n lines.push(\"\");\n lines.push(\"| Check | Status | Details |\");\n lines.push(\"| --- | --- | --- |\");\n for (const check of result.checks) {\n lines.push(\n `| ${check.name} | ${check.ok ? \"pass\" : \"fail\"} | ${check.message.replace(/\\|/g, \"/\")} |`,\n );\n }\n if (result.diagnostics.length > 0) {\n lines.push(\"\");\n lines.push(\"**Diagnostics**\");\n for (const item of result.diagnostics) lines.push(`- ${item}`);\n }\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderGateReportHtml(result: GateResult): string {\n const rows = result.checks\n .map(\n (check) =>\n `<tr><td>${escapeHtml(check.name)}</td><td>${check.ok ? \"PASS\" : \"FAIL\"}</td><td>${escapeHtml(check.message)}</td></tr>`,\n )\n .join(\"\");\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\" />\n <title>Gate report</title>\n <style>\n body { font-family: system-ui, sans-serif; margin: 2rem; }\n table { border-collapse: collapse; width: 100%; }\n th, td { border: 1px solid #ddd; padding: 0.5rem; text-align: left; }\n th { background: #f6f6f6; }\n </style>\n</head>\n<body>\n <h1>AgentInspect gate</h1>\n <p>Status: <strong>${result.ok ? \"PASS\" : \"FAIL\"}</strong> (exit ${result.exitCode})</p>\n <h2>Checks</h2>\n <table>\n <thead><tr><th>Check</th><th>Status</th><th>Details</th></tr></thead>\n <tbody>${rows}</tbody>\n </table>\n</body>\n</html>`;\n}\n\nexport function renderGateJUnit(result: GateResult): string {\n const failures = result.checks.filter((check) => !check.ok).length;\n const tests = result.checks.length;\n const cases = result.checks\n .map((check) => {\n if (check.ok) {\n return ` <testcase name=\"${escapeXml(check.name)}\" classname=\"gate\" />`;\n }\n return ` <testcase name=\"${escapeXml(check.name)}\" classname=\"gate\">\n <failure message=\"${escapeXml(check.message)}\">${escapeXml(check.message)}</failure>\n </testcase>`;\n })\n .join(\"\\n\");\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites tests=\"${tests}\" failures=\"${failures}\" errors=\"0\" time=\"0\">\n <testsuite name=\"agent-inspect-gate\" tests=\"${tests}\" failures=\"${failures}\" errors=\"0\" time=\"0\">\n${cases}\n </testsuite>\n</testsuites>`;\n}\n\nexport function renderGateReport(\n result: GateResult,\n options: RenderGateReportOptions = {},\n): string {\n const format = options.format ?? \"markdown\";\n if (format === \"json\") return JSON.stringify(result, null, 2);\n if (format === \"html\") return renderGateReportHtml(result);\n if (format === \"junit\") return renderGateJUnit(result);\n if (format === \"github\") return renderGateGithubStepSummary(result);\n return renderGateSummaryMarkdown(result);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../core/src/types/persisted-inspect-event.ts","../../core/src/utils/duration.ts","../../../node_modules/.pnpm/nanoid@5.1.11/node_modules/nanoid/url-alphabet/index.js","../../../node_modules/.pnpm/nanoid@5.1.11/node_modules/nanoid/index.js","../../core/src/utils.ts","../../core/src/persisted/to-trace-event.ts","../../core/src/types.ts","../../core/src/read-trace.ts","../../core/src/logs/redactor.ts","../../core/src/redaction-profiles.ts","../../core/src/storage.ts","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js","../../core/src/correlation-metadata.ts","../../core/src/context.ts","../../core/src/terminal.ts","../../core/src/trace-directory.ts","../../core/src/trace-metadata.ts","../../core/src/trace-filter.ts","../../core/src/timeline.ts","../../core/src/what.ts","../../core/src/explain.ts","../../core/src/stats.ts","../../core/src/outcomes/types.ts","../../core/src/outcomes/validate.ts","../../core/src/outcomes/extract.ts","../../core/src/outcomes/render.ts","../../core/src/search.ts","../../core/src/sessions/activity.ts","../../core/src/sessions/load.ts","../../core/src/sessions/metadata.ts","../../core/src/sessions/status.ts","../../core/src/sessions/checks.ts","../../core/src/sessions/index.ts","../../core/src/sessions/scope.ts","../../core/src/trace-verification.ts","../../core/src/bundle/resolve.ts","../../core/src/bundle/safety-status.ts","../../core/src/bundle/manifest.ts","../../core/src/bundle/summary.ts","../../core/src/bundle/paths.ts","../../core/src/suite/types.ts","../../core/src/suite/validate.ts","../../core/src/suite/load.ts","../../core/src/checks/index.ts","../../core/src/persisted/token-usage.ts","../../core/src/persisted/from-trace-event.ts","../../core/src/logs/tree-builder.ts","../../core/src/persisted/to-inspect-event.ts","../../core/src/persisted/tree-bridge.ts","../../core/src/readers/index.ts","../../core/src/suite/resolve.ts","../../core/src/suite/run.ts","../../core/src/suite/report.ts","../../core/src/cohort/types.ts","../../core/src/cohort/grouping.ts","../../core/src/cohort/compare.ts","../../core/src/cohort/metrics.ts","../../core/src/cohort/analyze.ts","../../core/src/exporters/helpers.ts","../../core/src/cohort/render.ts","../../core/src/gate/parse.ts","../../core/src/gate/evaluate.ts","../../core/src/gate/run.ts","../../core/src/gate/render.ts"],"names":["crypto","path","formatDuration","isRecord","format","asString","process","os","styles","chalk","isNonEmptyString","readdir","stat","parseIsoToMs","readFile","toolSteps","pickCorrelation","observationStatus","toolName","activityMs","warn","retryCount","diagnostic","access","emptySummary","buildFacts","finishedEvents","compactAttributes","percentile","hasThresholds","ok"],"mappings":"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","file":"chunk-4LKKB4Z5.mjs","sourcesContent":["import type { AttributionConfidence, InspectKind } from \"./inspect-event.js\";\n\nexport type PersistedSchemaVersion = \"0.2\" | \"1.0\";\n\nexport type PersistedEventSourceType =\n | \"manual\"\n | \"json-log\"\n | \"log4js\"\n | \"adapter\"\n | \"ai-sdk\"\n | \"otel\";\n\nexport interface PersistedEventSource {\n type: PersistedEventSourceType;\n name?: string;\n version?: string;\n}\n\nexport type PersistedEventStatus = \"running\" | \"ok\" | \"error\" | \"unknown\";\n\nexport interface PersistedInspectError {\n name?: string;\n message: string;\n code?: string;\n}\n\nexport interface PersistedTokenUsage {\n input?: number;\n output?: number;\n total?: number;\n cached?: number;\n}\n\nexport interface PersistedTraceContext {\n traceId?: string;\n spanId?: string;\n parentSpanId?: string;\n}\n\nexport interface PersistedInspectEventBase {\n eventId: string;\n runId: string;\n parentId?: string;\n kind: InspectKind;\n name: string;\n status?: PersistedEventStatus;\n timestamp: string;\n startedAt?: string;\n endedAt?: string;\n durationMs?: number;\n confidence: AttributionConfidence;\n source: PersistedEventSource;\n attributes?: Record<string, unknown>;\n inputSummary?: unknown;\n outputSummary?: unknown;\n error?: PersistedInspectError;\n tokenUsage?: PersistedTokenUsage;\n trace?: PersistedTraceContext;\n}\n\nexport interface PersistedInspectEventV02 extends PersistedInspectEventBase {\n schemaVersion: \"0.2\";\n}\n\nexport interface PersistedInspectEventV10 extends PersistedInspectEventBase {\n schemaVersion: \"1.0\";\n [key: string]: unknown;\n}\n\nexport type PersistedInspectEvent =\n | PersistedInspectEventV02\n | PersistedInspectEventV10;\n\nconst INSPECT_KINDS: readonly InspectKind[] = [\n \"RUN\",\n \"AGENT\",\n \"LLM\",\n \"TOOL\",\n \"CHAIN\",\n \"RETRIEVER\",\n \"DECISION\",\n \"RESULT\",\n \"ERROR\",\n \"LOGIC\",\n \"LOG\",\n \"OUTCOME\",\n];\n\nconst ATTRIBUTION_CONFIDENCES: readonly AttributionConfidence[] = [\n \"explicit\",\n \"correlated\",\n \"heuristic\",\n \"unknown\",\n];\n\nconst PERSISTED_EVENT_SOURCE_TYPES: readonly PersistedEventSourceType[] = [\n \"manual\",\n \"json-log\",\n \"log4js\",\n \"adapter\",\n \"ai-sdk\",\n \"otel\",\n];\n\nconst PERSISTED_EVENT_STATUSES: readonly PersistedEventStatus[] = [\n \"running\",\n \"ok\",\n \"error\",\n \"unknown\",\n];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0;\n}\n\nfunction isOptionalString(value: unknown): boolean {\n return value === undefined || isString(value);\n}\n\nfunction isNonNegativeNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nfunction isOptionalNonNegativeNumber(value: unknown): boolean {\n return value === undefined || isNonNegativeNumber(value);\n}\n\nfunction isInspectKind(value: unknown): value is InspectKind {\n return (\n typeof value === \"string\" &&\n (INSPECT_KINDS as readonly string[]).includes(value)\n );\n}\n\nfunction isAttributionConfidence(value: unknown): value is AttributionConfidence {\n return (\n typeof value === \"string\" &&\n (ATTRIBUTION_CONFIDENCES as readonly string[]).includes(value)\n );\n}\n\nfunction isPersistedEventSourceType(\n value: unknown,\n): value is PersistedEventSourceType {\n return (\n typeof value === \"string\" &&\n (PERSISTED_EVENT_SOURCE_TYPES as readonly string[]).includes(value)\n );\n}\n\nfunction isPersistedEventStatus(value: unknown): value is PersistedEventStatus {\n return (\n typeof value === \"string\" &&\n (PERSISTED_EVENT_STATUSES as readonly string[]).includes(value)\n );\n}\n\nfunction isPersistedEventSource(value: unknown): value is PersistedEventSource {\n if (!isRecord(value)) return false;\n if (!isPersistedEventSourceType(value.type)) return false;\n if (!isOptionalString(value.name)) return false;\n if (!isOptionalString(value.version)) return false;\n return true;\n}\n\nfunction isPersistedInspectError(value: unknown): value is PersistedInspectError {\n if (!isRecord(value)) return false;\n if (!isNonEmptyString(value.message)) return false;\n if (!isOptionalString(value.name)) return false;\n if (!isOptionalString(value.code)) return false;\n return true;\n}\n\nfunction isPersistedTokenUsage(value: unknown): value is PersistedTokenUsage {\n if (!isRecord(value)) return false;\n if (!isOptionalNonNegativeNumber(value.input)) return false;\n if (!isOptionalNonNegativeNumber(value.output)) return false;\n if (!isOptionalNonNegativeNumber(value.total)) return false;\n if (!isOptionalNonNegativeNumber(value.cached)) return false;\n return true;\n}\n\nfunction isPersistedTraceContext(value: unknown): value is PersistedTraceContext {\n if (!isRecord(value)) return false;\n if (!isOptionalString(value.traceId)) return false;\n if (!isOptionalString(value.spanId)) return false;\n if (!isOptionalString(value.parentSpanId)) return false;\n return true;\n}\n\n/**\n * Runtime guard for a v0.2 or v1.0 {@link PersistedInspectEvent} JSON object.\n *\n * Timestamp fields (`timestamp`, `startedAt`, `endedAt`) are validated as\n * non-empty strings only — stricter ISO-8601 parsing may be added later.\n */\nexport function isPersistedInspectEvent(\n value: unknown,\n): value is PersistedInspectEvent {\n if (!isRecord(value)) return false;\n if (value.schemaVersion !== \"0.2\" && value.schemaVersion !== \"1.0\") {\n return false;\n }\n\n if (!isNonEmptyString(value.eventId)) return false;\n if (!isNonEmptyString(value.runId)) return false;\n if (!isInspectKind(value.kind)) return false;\n if (!isNonEmptyString(value.name)) return false;\n // Non-empty string required; ISO format not validated in this PR.\n if (!isNonEmptyString(value.timestamp)) return false;\n if (!isAttributionConfidence(value.confidence)) return false;\n if (!isPersistedEventSource(value.source)) return false;\n\n if (value.parentId !== undefined && !isNonEmptyString(value.parentId)) {\n return false;\n }\n if (value.status !== undefined && !isPersistedEventStatus(value.status)) {\n return false;\n }\n if (!isOptionalString(value.startedAt)) return false;\n if (!isOptionalString(value.endedAt)) return false;\n if (value.durationMs !== undefined && !isNonNegativeNumber(value.durationMs)) {\n return false;\n }\n if (value.attributes !== undefined && !isRecord(value.attributes)) {\n return false;\n }\n if (value.error !== undefined && !isPersistedInspectError(value.error)) {\n return false;\n }\n if (value.tokenUsage !== undefined && !isPersistedTokenUsage(value.tokenUsage)) {\n return false;\n }\n if (value.trace !== undefined && !isPersistedTraceContext(value.trace)) {\n return false;\n }\n\n return true;\n}\n\nexport function isPersistedInspectEventV02(\n value: unknown,\n): value is PersistedInspectEventV02 {\n return isPersistedInspectEvent(value) && value.schemaVersion === \"0.2\";\n}\n\nexport function isPersistedInspectEventV10(\n value: unknown,\n): value is PersistedInspectEventV10 {\n return isPersistedInspectEvent(value) && value.schemaVersion === \"1.0\";\n}\n","/**\n * v0.2 shared duration utilities.\n *\n * `parseDuration` is used for filters such as \"since\" / \"older-than\".\n * `formatDuration` is used for compact display in CLI and summaries.\n */\n\nexport function parseDuration(duration: string): number {\n const raw = typeof duration === \"string\" ? duration.trim() : \"\";\n const match = raw.match(/^(\\d+)(ms|[smhd])$/);\n if (!match) {\n throw new Error(\n `Invalid duration format: ${duration}. Use a positive integer followed by ms, s, m, h, or d (e.g. 500ms, 30s, 5m, 2h, 7d).`,\n );\n }\n\n const amount = Number.parseInt(match[1], 10);\n const unit = match[2];\n\n if (!Number.isFinite(amount) || amount <= 0) {\n throw new Error(\n `Invalid duration amount: ${duration}. Amount must be a positive integer.`,\n );\n }\n\n switch (unit) {\n case \"ms\":\n return amount;\n case \"s\":\n return amount * 1000;\n case \"m\":\n return amount * 60 * 1000;\n case \"h\":\n return amount * 60 * 60 * 1000;\n case \"d\":\n return amount * 24 * 60 * 60 * 1000;\n default: {\n // Should be unreachable due to regex.\n throw new Error(`Unknown duration unit: ${unit}`);\n }\n }\n}\n\nexport function formatDuration(ms: number): string {\n if (!Number.isFinite(ms)) {\n return \"0ms\";\n }\n if (ms < 0) {\n throw new Error(`formatDuration: ms must be non-negative (got ${ms})`);\n }\n if (ms < 1000) {\n return `${Math.floor(ms)}ms`;\n }\n if (ms < 60_000) {\n return `${(ms / 1000).toFixed(2)}s`;\n }\n if (ms < 3_600_000) {\n return `${(ms / 60_000).toFixed(1)}m`;\n }\n return `${(ms / 3_600_000).toFixed(1)}h`;\n}\n\n","export let urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","import { webcrypto as crypto } from 'node:crypto'\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\nfunction fillPool(bytes) {\n if (bytes < 0 || bytes > 1024) throw new RangeError('Wrong ID size')\n if (!pool || pool.length < bytes) {\n pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n crypto.getRandomValues(pool)\n poolOffset = 0\n } else if (poolOffset + bytes > pool.length) {\n crypto.getRandomValues(pool)\n poolOffset = 0\n }\n poolOffset += bytes\n}\nexport function random(bytes) {\n fillPool((bytes |= 0))\n return pool.subarray(poolOffset - bytes, poolOffset)\n}\nexport function customRandom(alphabet, defaultSize, getRandom) {\n let safeByteCutoff = 256 - (256 % alphabet.length)\n if (safeByteCutoff === 256) {\n let mask = alphabet.length - 1\n return (size = defaultSize) => {\n if (!size) return ''\n let id = ''\n while (true) {\n let bytes = getRandom(size)\n let i = size\n while (i--) {\n id += alphabet[bytes[i] & mask]\n if (id.length >= size) return id\n }\n }\n }\n }\n let step = Math.ceil((1.6 * 256 * defaultSize) / safeByteCutoff)\n return (size = defaultSize) => {\n if (!size) return ''\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let i = step\n while (i--) {\n if (bytes[i] < safeByteCutoff) {\n id += alphabet[bytes[i] % alphabet.length]\n if (id.length >= size) return id\n }\n }\n }\n }\n}\nexport function customAlphabet(alphabet, size = 21) {\n return customRandom(alphabet, size, random)\n}\nexport function nanoid(size = 21) {\n fillPool((size |= 0))\n let id = ''\n for (let i = poolOffset - size; i < poolOffset; i++) {\n id += scopedUrlAlphabet[pool[i] & 63]\n }\n return id\n}\n","import { mkdir } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nimport { nanoid } from \"nanoid\";\n\nimport type { ErrorInfo } from \"./types.js\";\nimport { formatDuration as formatDurationV2 } from \"./utils/duration.js\";\n\n/** Default folder under the user home for AgentInspect data. */\nexport const DEFAULT_TRACE_DIR_NAME = \".agent-inspect\";\n\n/** Subfolder where JSONL run traces are stored. */\nexport const RUNS_DIR_NAME = \"runs\";\n\n/** Writable trace root when the default home path cannot be used. */\nexport const FALLBACK_TRACE_DIR = path.join(\n os.tmpdir(),\n \"agent-inspect\",\n RUNS_DIR_NAME,\n);\n\n/** Maximum display length for run/step names before truncation. */\nexport const MAX_NAME_LENGTH = 100;\n\n/** Returns `run_` + a 10-character nanoid segment. */\nexport function createRunId(): string {\n return `run_${nanoid(10)}`;\n}\n\n/** Returns `step_` + a 10-character nanoid segment. */\nexport function createStepId(): string {\n return `step_${nanoid(10)}`;\n}\n\n/** Formats a duration for CLI display (v0.2 rules). */\nexport function formatDuration(ms: number): string {\n return formatDurationV2(ms);\n}\n\n/**\n * Formats a Unix timestamp (ms) as local `YYYY-MM-DD HH:mm:ss`.\n * Invalid values yield `\"Invalid date\"` (no throw).\n */\nexport function formatTimestamp(timestamp: number): string {\n if (!Number.isFinite(timestamp)) {\n return \"Invalid date\";\n }\n const d = new Date(timestamp);\n if (Number.isNaN(d.getTime())) {\n return \"Invalid date\";\n }\n const y = d.getFullYear();\n const mo = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n const h = String(d.getHours()).padStart(2, \"0\");\n const min = String(d.getMinutes()).padStart(2, \"0\");\n const s = String(d.getSeconds()).padStart(2, \"0\");\n return `${y}-${mo}-${day} ${h}:${min}:${s}`;\n}\n\n/**\n * Default directory for trace files: `~/DEFAULT_TRACE_DIR_NAME/RUNS_DIR_NAME`.\n * Falls back to {@link FALLBACK_TRACE_DIR} when home cannot be resolved.\n */\nexport function getDefaultTraceDir(): string {\n const envDir = process.env.AGENT_INSPECT_TRACE_DIR;\n if (typeof envDir === \"string\" && envDir.trim() !== \"\") {\n return envDir.trim();\n }\n try {\n const home = os.homedir();\n if (typeof home !== \"string\" || home.trim() === \"\") {\n return FALLBACK_TRACE_DIR;\n }\n return path.join(home, DEFAULT_TRACE_DIR_NAME, RUNS_DIR_NAME);\n } catch {\n return FALLBACK_TRACE_DIR;\n }\n}\n\n/**\n * Full path to the JSONL trace file for a run.\n * `runId` is passed through `path.basename` to avoid traversal; empty ids become `run_unknown`.\n */\nexport function getTraceFilePath(runId: string, traceDir?: string): string {\n const baseDir = traceDir ?? getDefaultTraceDir();\n let safeId =\n typeof runId === \"string\" && runId.trim() !== \"\" ? runId.trim() : \"run_unknown\";\n safeId = path.basename(safeId);\n if (safeId === \"\" || safeId === \".\" || safeId === \"..\") {\n safeId = \"run_unknown\";\n }\n return path.join(baseDir, `${safeId}.jsonl`);\n}\n\n/**\n * Ensures a trace directory exists (recursive). Tries {@link FALLBACK_TRACE_DIR} on failure.\n * Returns the directory path that callers should prefer: primary, fallback, or original if both mkdir attempts fail.\n * Emits concise `[AgentInspect]` warnings on failure; never throws.\n */\nexport async function ensureTraceDir(traceDir: string): Promise<string> {\n const primary = path.resolve(traceDir);\n try {\n await mkdir(primary, { recursive: true });\n return primary;\n } catch {\n warn(`Failed to create trace directory: ${primary}`);\n const fallback = path.resolve(FALLBACK_TRACE_DIR);\n try {\n await mkdir(fallback, { recursive: true });\n return fallback;\n } catch {\n warn(`Failed to create fallback trace directory: ${fallback}`);\n return primary;\n }\n }\n}\n\n/**\n * Normalizes any thrown/caught value into {@link ErrorInfo}.\n * Never throws (circular structures and non-JSON values fall back to a generic message).\n */\nexport function formatError(error: unknown): ErrorInfo {\n if (error instanceof Error) {\n const out: ErrorInfo = { message: error.message };\n if (typeof error.stack === \"string\" && error.stack.length > 0) {\n out.stack = error.stack;\n }\n return out;\n }\n if (typeof error === \"string\") {\n return { message: error };\n }\n if (error === null) {\n return { message: \"Unknown error: null\" };\n }\n if (error === undefined) {\n return { message: \"Unknown error: undefined\" };\n }\n if (\n typeof error === \"number\" ||\n typeof error === \"boolean\" ||\n typeof error === \"bigint\"\n ) {\n return { message: String(error) };\n }\n if (typeof error === \"object\") {\n try {\n return { message: JSON.stringify(error) };\n } catch {\n return { message: \"Unknown error\" };\n }\n }\n return { message: \"Unknown error\" };\n}\n\n/**\n * Truncates a display name to `maxLength`, appending `\"...\"` when shortened.\n * Empty or non-string input becomes `\"unnamed\"`.\n */\nexport function truncateName(name: string, maxLength = MAX_NAME_LENGTH): string {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"unnamed\";\n }\n const trimmed = name.trim();\n if (trimmed.length <= maxLength) {\n return trimmed;\n }\n const ellipsis = \"...\";\n const head = Math.max(0, maxLength - ellipsis.length);\n return `${trimmed.slice(0, head)}${ellipsis}`;\n}\n\n/**\n * Instrumentation-only warning to stderr. Not a general-purpose logger.\n * Optional `error` is summarized via {@link formatError} (message only).\n */\nexport function warn(message: string, error?: unknown): void {\n const base = `[AgentInspect] ${message}`;\n if (error === undefined) {\n console.warn(base);\n return;\n }\n console.warn(`${base}: ${formatError(error).message}`);\n}\n","import type { InspectKind } from \"../types/inspect-event.js\";\nimport type {\n ErrorInfo,\n RunStatus,\n StepMetadata,\n StepStatus,\n StepType,\n TraceEvent,\n} from \"../types.js\";\nimport {\n isPersistedInspectEvent,\n type PersistedInspectEvent,\n type PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\n\nexport interface PersistedToTraceEventOptions {\n /**\n * Stable index within the source event list.\n * Used for deterministic timestamps when only one instant is known.\n */\n eventIndex?: number;\n}\n\nfunction parseIsoToMs(iso: string): number {\n const parsed = Date.parse(iso);\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction mapInspectKindToStepType(kind: InspectKind): StepType {\n switch (kind) {\n case \"LLM\":\n return \"llm\";\n case \"TOOL\":\n return \"tool\";\n case \"DECISION\":\n return \"decision\";\n case \"RUN\":\n return \"run\";\n default:\n return \"logic\";\n }\n}\n\nfunction mapPersistedStatusToStepStatus(\n status: PersistedInspectEvent[\"status\"],\n): StepStatus | undefined {\n switch (status) {\n case \"ok\":\n return \"success\";\n case \"error\":\n return \"error\";\n case \"running\":\n return \"running\";\n default:\n return undefined;\n }\n}\n\nfunction mapPersistedStatusToRunStatus(\n status: PersistedInspectEvent[\"status\"],\n): RunStatus | undefined {\n switch (status) {\n case \"ok\":\n return \"success\";\n case \"error\":\n return \"error\";\n case \"running\":\n return \"running\";\n default:\n return undefined;\n }\n}\n\nfunction mapPersistedError(\n error: PersistedInspectEvent[\"error\"],\n attributes: Record<string, unknown> | undefined,\n): ErrorInfo | undefined {\n if (!error?.message) return undefined;\n const out: ErrorInfo = { message: error.message };\n const stack =\n typeof attributes?.errorStack === \"string\" &&\n attributes.errorStack.length > 0\n ? attributes.errorStack\n : undefined;\n if (stack) {\n out.stack = stack;\n }\n return out;\n}\n\nfunction mapTokenUsageToMetadata(\n tokenUsage: PersistedTokenUsage | undefined,\n attributes: Record<string, unknown> | undefined,\n): StepMetadata | undefined {\n const metadata: StepMetadata = {};\n if (attributes?.metadata && typeof attributes.metadata === \"object\") {\n Object.assign(metadata, attributes.metadata as Record<string, unknown>);\n }\n if (tokenUsage) {\n metadata.tokens = {\n ...(tokenUsage.input !== undefined ? { input: tokenUsage.input } : {}),\n ...(tokenUsage.output !== undefined ? { output: tokenUsage.output } : {}),\n ...(tokenUsage.total !== undefined ? { total: tokenUsage.total } : {}),\n ...(tokenUsage.cached !== undefined ? { cached: tokenUsage.cached } : {}),\n };\n }\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction pickRunMetadata(\n attributes: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n if (!attributes) return undefined;\n const metadata =\n attributes.metadata && typeof attributes.metadata === \"object\"\n ? { ...(attributes.metadata as Record<string, unknown>) }\n : {};\n for (const key of [\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n \"groupId\",\n ] as const) {\n const value = attributes[key];\n if (typeof value === \"string\" && value.trim() !== \"\") {\n metadata[key] = value;\n }\n }\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nfunction resolveStepId(event: PersistedInspectEvent): string {\n const attrs = event.attributes;\n if (attrs && typeof attrs.stepId === \"string\" && attrs.stepId.trim() !== \"\") {\n return attrs.stepId;\n }\n return event.eventId;\n}\n\nfunction resolveStepType(event: PersistedInspectEvent): StepType {\n const attrs = event.attributes;\n if (attrs && typeof attrs.stepType === \"string\") {\n const t = attrs.stepType;\n if (\n t === \"run\" ||\n t === \"llm\" ||\n t === \"tool\" ||\n t === \"decision\" ||\n t === \"logic\" ||\n t === \"state\" ||\n t === \"custom\"\n ) {\n return t;\n }\n }\n return mapInspectKindToStepType(event.kind);\n}\n\nfunction resolveTimes(event: PersistedInspectEvent): {\n timestamp: number;\n startTime: number;\n endTime: number;\n} {\n const timestamp = parseIsoToMs(event.timestamp);\n const startTime =\n event.startedAt !== undefined ? parseIsoToMs(event.startedAt) : timestamp;\n let endTime =\n event.endedAt !== undefined ? parseIsoToMs(event.endedAt) : timestamp;\n if (\n event.durationMs !== undefined &&\n Number.isFinite(event.durationMs) &&\n event.durationMs >= 0 &&\n event.endedAt === undefined\n ) {\n endTime = startTime + event.durationMs;\n }\n return { timestamp, startTime, endTime };\n}\n\nfunction fromLegacyRunStarted(event: PersistedInspectEvent): TraceEvent {\n const { timestamp, startTime } = resolveTimes(event);\n const out: Extract<TraceEvent, { event: \"run_started\" }> = {\n schemaVersion: \"0.1\",\n event: \"run_started\",\n timestamp,\n runId: event.runId,\n name: event.name,\n startTime,\n };\n const metadata = pickRunMetadata(event.attributes);\n if (metadata) out.metadata = metadata;\n return out;\n}\n\nfunction fromLegacyRunCompleted(event: PersistedInspectEvent): TraceEvent {\n const { timestamp, endTime } = resolveTimes(event);\n const status = mapPersistedStatusToRunStatus(event.status) ?? \"success\";\n const out: Extract<TraceEvent, { event: \"run_completed\" }> = {\n schemaVersion: \"0.1\",\n event: \"run_completed\",\n timestamp,\n runId: event.runId,\n status: status === \"running\" ? \"success\" : status,\n endTime,\n durationMs: event.durationMs ?? Math.max(0, endTime - timestamp),\n };\n const error = mapPersistedError(event.error, event.attributes);\n if (error) out.error = error;\n return out;\n}\n\nfunction fromLegacyStepStarted(event: PersistedInspectEvent): TraceEvent {\n const { timestamp, startTime } = resolveTimes(event);\n const out: Extract<TraceEvent, { event: \"step_started\" }> = {\n schemaVersion: \"0.1\",\n event: \"step_started\",\n timestamp,\n runId: event.runId,\n stepId: resolveStepId(event),\n name: event.name,\n type: resolveStepType(event),\n startTime,\n };\n if (event.parentId !== undefined) out.parentId = event.parentId;\n const metadata = mapTokenUsageToMetadata(event.tokenUsage, event.attributes);\n if (metadata) out.metadata = metadata;\n return out;\n}\n\nfunction fromLegacyStepCompleted(event: PersistedInspectEvent): TraceEvent {\n const { timestamp, endTime } = resolveTimes(event);\n const status = mapPersistedStatusToStepStatus(event.status) ?? \"success\";\n const out: Extract<TraceEvent, { event: \"step_completed\" }> = {\n schemaVersion: \"0.1\",\n event: \"step_completed\",\n timestamp,\n runId: event.runId,\n stepId: resolveStepId(event),\n status: status === \"running\" ? \"success\" : status,\n endTime,\n durationMs: event.durationMs ?? Math.max(0, endTime - timestamp),\n };\n const error = mapPersistedError(event.error, event.attributes);\n if (error) out.error = error;\n return out;\n}\n\nfunction fromLegacyOutcomeObserved(event: PersistedInspectEvent): TraceEvent {\n const attrs = event.attributes ?? {};\n const observedAtRaw = attrs.observedAt;\n const observedAt =\n typeof observedAtRaw === \"string\"\n ? Date.parse(observedAtRaw)\n : typeof observedAtRaw === \"number\" && Number.isFinite(observedAtRaw)\n ? observedAtRaw\n : resolveTimes(event).timestamp;\n const status = attrs.outcomeStatus;\n const out: Extract<TraceEvent, { event: \"outcome_observed\" }> = {\n schemaVersion: \"0.1\",\n event: \"outcome_observed\",\n timestamp: observedAt,\n runId: event.runId,\n outcomeId:\n typeof attrs.outcomeId === \"string\" ? attrs.outcomeId : event.eventId,\n name: event.name,\n expectation:\n typeof attrs.expectation === \"string\" ? attrs.expectation : event.name,\n status:\n status === \"passed\" ||\n status === \"failed\" ||\n status === \"unknown\" ||\n status === \"skipped\"\n ? status\n : \"unknown\",\n observedAt,\n };\n if (event.parentId !== undefined) out.parentId = event.parentId;\n if (typeof attrs.method === \"string\") out.method = attrs.method as never;\n if (attrs.actual !== undefined) out.actual = attrs.actual;\n if (event.outputSummary !== undefined) out.actual = event.outputSummary;\n if (attrs.evidence !== undefined) out.evidence = attrs.evidence;\n return out;\n}\n\nfunction fromNativeOutcome(event: PersistedInspectEvent): TraceEvent[] {\n return [fromLegacyOutcomeObserved(event)];\n}\n\nfunction fromNativeRun(event: PersistedInspectEvent): TraceEvent[] {\n const { timestamp, startTime, endTime } = resolveTimes(event);\n const runStatus = mapPersistedStatusToRunStatus(event.status);\n const out: TraceEvent[] = [];\n\n if (runStatus === \"running\" || event.startedAt !== undefined) {\n const started: Extract<TraceEvent, { event: \"run_started\" }> = {\n schemaVersion: \"0.1\",\n event: \"run_started\",\n timestamp,\n runId: event.runId,\n name: event.name,\n startTime,\n };\n const metadata = pickRunMetadata(event.attributes);\n if (metadata) started.metadata = metadata;\n out.push(started);\n }\n\n if (runStatus === \"success\" || runStatus === \"error\" || event.endedAt !== undefined) {\n const completed: Extract<TraceEvent, { event: \"run_completed\" }> = {\n schemaVersion: \"0.1\",\n event: \"run_completed\",\n timestamp,\n runId: event.runId,\n status: runStatus === \"error\" ? \"error\" : \"success\",\n endTime,\n durationMs: event.durationMs ?? Math.max(0, endTime - startTime),\n };\n const error = mapPersistedError(event.error, event.attributes);\n if (error) completed.error = error;\n out.push(completed);\n }\n\n if (out.length === 0) {\n out.push(fromLegacyRunStarted(event));\n }\n\n return out;\n}\n\nfunction fromNativeStep(event: PersistedInspectEvent): TraceEvent[] {\n const { timestamp, startTime, endTime } = resolveTimes(event);\n const stepStatus = mapPersistedStatusToStepStatus(event.status);\n const stepId = resolveStepId(event);\n const out: TraceEvent[] = [];\n\n const shouldEmitStarted =\n stepStatus === \"running\" ||\n event.startedAt !== undefined ||\n stepStatus === \"success\" ||\n stepStatus === \"error\";\n\n if (shouldEmitStarted) {\n const started: Extract<TraceEvent, { event: \"step_started\" }> = {\n schemaVersion: \"0.1\",\n event: \"step_started\",\n timestamp,\n runId: event.runId,\n stepId,\n name: event.name,\n type: resolveStepType(event),\n startTime,\n };\n if (event.parentId !== undefined) started.parentId = event.parentId;\n const metadata = mapTokenUsageToMetadata(event.tokenUsage, event.attributes);\n if (metadata) started.metadata = metadata;\n out.push(started);\n }\n\n if (\n stepStatus === \"success\" ||\n stepStatus === \"error\" ||\n event.endedAt !== undefined ||\n event.durationMs !== undefined\n ) {\n const completed: Extract<TraceEvent, { event: \"step_completed\" }> = {\n schemaVersion: \"0.1\",\n event: \"step_completed\",\n timestamp,\n runId: event.runId,\n stepId,\n status: stepStatus === \"error\" ? \"error\" : \"success\",\n endTime,\n durationMs: event.durationMs ?? Math.max(0, endTime - startTime),\n };\n const error = mapPersistedError(event.error, event.attributes);\n if (error) completed.error = error;\n out.push(completed);\n }\n\n if (out.length === 0) {\n out.push(fromLegacyStepStarted(event));\n }\n\n return out;\n}\n\n/**\n * Maps one v0.2 {@link PersistedInspectEvent} to zero or more v0.1 {@link TraceEvent} rows\n * for inspection commands. Does not mutate `event`.\n */\nexport function persistedInspectEventToTraceEvents(\n event: PersistedInspectEvent,\n): TraceEvent[] {\n if (!isPersistedInspectEvent(event)) {\n throw new Error(\"Invalid PersistedInspectEvent: failed isPersistedInspectEvent\");\n }\n\n const legacyEvent = event.attributes?.legacyEvent;\n if (legacyEvent === \"run_started\") return [fromLegacyRunStarted(event)];\n if (legacyEvent === \"run_completed\") return [fromLegacyRunCompleted(event)];\n if (legacyEvent === \"step_started\") return [fromLegacyStepStarted(event)];\n if (legacyEvent === \"step_completed\") return [fromLegacyStepCompleted(event)];\n if (legacyEvent === \"outcome_observed\") return [fromLegacyOutcomeObserved(event)];\n\n if (event.kind === \"RUN\") {\n return fromNativeRun(event);\n }\n\n if (event.kind === \"OUTCOME\") {\n return fromNativeOutcome(event);\n }\n\n return fromNativeStep(event);\n}\n\n/**\n * Maps persisted v0.2 events to v0.1 trace events for inspection.\n */\nexport function persistedInspectEventsToTraceEvents(\n events: readonly PersistedInspectEvent[],\n options?: PersistedToTraceEventOptions,\n): TraceEvent[] {\n const out: TraceEvent[] = [];\n events.forEach((event, index) => {\n const rows = persistedInspectEventToTraceEvents(event);\n if (rows.length === 0 && options?.eventIndex !== undefined) {\n void options.eventIndex;\n void index;\n }\n out.push(...rows);\n });\n return out;\n}\n","import type { RedactionRule } from \"./types/log-config.js\";\n\n/**\n * Discriminator for what kind of work a {@link Step} represents.\n * `\"decision\"` captures agent branching/choices; other values cover runs, LLM calls, tools, and user-defined steps.\n */\nexport type StepType =\n | \"run\"\n | \"llm\"\n | \"tool\"\n | \"decision\"\n | \"logic\"\n | \"state\"\n | \"custom\";\n\n/** Lifecycle state of a single {@link Step}. */\nexport type StepStatus = \"running\" | \"success\" | \"error\";\n\n/** Lifecycle state of an entire {@link Run}. */\nexport type RunStatus = \"running\" | \"success\" | \"error\";\n\n/** Structured error attached to a run or step when status is `\"error\"`. */\nexport interface ErrorInfo {\n message: string;\n stack?: string;\n}\n\n/**\n * Optional token counts for a step (e.g. LLM usage).\n * Reserved for future roadmap; MVP does not compute or persist token usage.\n */\nexport interface TokenMetadata {\n input?: number;\n output?: number;\n total?: number;\n cached?: number;\n}\n\n/** Arbitrary structured fields for a step; safe extensions use string keys. */\nexport interface StepMetadata {\n model?: string;\n toolName?: string;\n tokens?: TokenMetadata;\n retryCount?: number;\n [key: string]: unknown;\n}\n\n/**\n * One traced agent run (root of an execution tree).\n * MVP intentionally omits `input` / `output` on the run to limit PII, secrets, and serialization risk.\n */\nexport interface Run {\n id: string;\n name: string;\n status: RunStatus;\n startTime: number;\n endTime?: number;\n durationMs?: number;\n error?: ErrorInfo;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * One node in the execution tree under a {@link Run}.\n * MVP intentionally omits `input` / `output`; capture/redaction may come in a later version.\n */\nexport interface Step {\n id: string;\n runId: string;\n parentId?: string;\n name: string;\n type: StepType;\n status: StepStatus;\n startTime: number;\n endTime?: number;\n durationMs?: number;\n error?: ErrorInfo;\n metadata?: StepMetadata;\n}\n\n/** Version of the JSONL trace line schema consumed by AgentInspect tooling. */\nexport type TraceSchemaVersion = \"0.1\";\n\n/**\n * Status for lightweight trace metadata extraction.\n * `\"unknown\"` means the file contained valid events but a run status could not be determined safely.\n */\nexport type TraceMetadataStatus = \"success\" | \"error\" | \"running\" | \"unknown\";\n\nexport interface TraceMetadata {\n runId: string;\n name?: string;\n status: TraceMetadataStatus;\n startedAt?: number;\n endedAt?: number;\n durationMs?: number;\n eventCount: number;\n filePath: string;\n fileSize: number;\n createdAt: Date;\n}\n\nexport interface RunSummary {\n runId: string;\n name?: string;\n status: TraceMetadataStatus;\n durationMs?: number;\n totalSteps: number;\n llmSteps: number;\n toolSteps: number;\n logicSteps: number;\n errorSteps: number;\n maxDepth: number;\n longestStep?: {\n name: string;\n durationMs: number;\n type: string;\n };\n totalTokens?: {\n input: number;\n output: number;\n /** Present only when every token-bearing step has a supplied or derivable total. */\n total?: number;\n /** Sum of supplied cached counts; cached is not added to total. */\n cached?: number;\n };\n}\n\n/** Fields shared by every persisted trace event line. */\nexport interface TraceEventBase {\n schemaVersion: TraceSchemaVersion;\n event: string;\n timestamp: number;\n}\n\n/** Emitted when a run begins. */\nexport interface RunStartedEvent extends TraceEventBase {\n event: \"run_started\";\n runId: string;\n name: string;\n startTime: number;\n metadata?: Record<string, unknown>;\n}\n\n/** Emitted when a run finishes successfully or with an error. */\nexport interface RunCompletedEvent extends TraceEventBase {\n event: \"run_completed\";\n runId: string;\n status: \"success\" | \"error\";\n endTime: number;\n durationMs: number;\n error?: ErrorInfo;\n}\n\n/** Emitted when a step begins (including nested steps under `parentId`). */\nexport interface StepStartedEvent extends TraceEventBase {\n event: \"step_started\";\n runId: string;\n stepId: string;\n parentId?: string;\n name: string;\n type: StepType;\n startTime: number;\n metadata?: StepMetadata;\n}\n\n/**\n * Emitted when a step finishes (success or failure).\n * Failures use `status: \"error\"` and optional {@link ErrorInfo}; there is no separate `step_failed` event in MVP.\n */\nexport interface StepCompletedEvent extends TraceEventBase {\n event: \"step_completed\";\n runId: string;\n stepId: string;\n status: \"success\" | \"error\";\n endTime: number;\n durationMs: number;\n error?: ErrorInfo;\n}\n\n/** Emitted when an external-world outcome is observed (v4.4+). */\nexport interface OutcomeObservedEvent extends TraceEventBase {\n event: \"outcome_observed\";\n runId: string;\n outcomeId: string;\n parentId?: string;\n name: string;\n expectation: string;\n status: \"passed\" | \"failed\" | \"unknown\" | \"skipped\";\n method?:\n | \"dom\"\n | \"accessibility\"\n | \"snapshot\"\n | \"network\"\n | \"storage\"\n | \"filesystem\"\n | \"database\"\n | \"queue\"\n | \"custom\";\n actual?: unknown;\n evidence?: unknown;\n observedAt: number;\n}\n\n/** Discriminated union of all MVP trace events written as JSONL lines. */\nexport type TraceEvent =\n | RunStartedEvent\n | RunCompletedEvent\n | StepStartedEvent\n | StepCompletedEvent\n | OutcomeObservedEvent;\n\n/** Named redaction presets for trace writing and share-safe exports (v1.3.0+). */\nexport type RedactionProfile = \"local\" | \"share\" | \"strict\";\n\n/** Optional correlation fields for grouping and cross-run tracing (v1.3.0+). */\nexport interface TraceCorrelationMetadata {\n correlationId?: string;\n requestId?: string;\n decisionId?: string;\n groupId?: string;\n}\n\n/** Options for `inspectRun()` and `maybeInspectRun()`. */\nexport interface InspectRunOptions extends TraceCorrelationMetadata {\n traceDir?: string;\n silent?: boolean;\n metadata?: Record<string, unknown>;\n /**\n * When `false`, runs `fn` with no trace file, no execution context, and no terminal output.\n * Omitted or `true` preserves default tracing behavior.\n */\n enabled?: boolean;\n /**\n * Redact sensitive metadata keys before writing JSONL. Default `true` (conservative keys).\n * Pass `false` to persist metadata as-is (explicit opt-out).\n */\n redact?: boolean | { rules?: RedactionRule[] };\n /**\n * Redaction preset for trace metadata. Default `local` (same keys as default redaction).\n * `share` and `strict` add extra key-based redaction and tighter string bounds.\n * Ignored when `redact: false`.\n */\n redactionProfile?: RedactionProfile;\n /** Max UTF-8 bytes for a serialized trace event line. Default 65536. */\n maxEventBytes?: number;\n /** Max length for string metadata values (non-preview keys). Default 2000. */\n maxMetadataValueLength?: number;\n /** Max length for preview-like metadata keys (contains `preview`). Default 500. */\n maxPreviewLength?: number;\n}\n\n/** Options passed when opening a logical step (implemented in a later step). */\nexport interface StepOptions {\n type?: StepType;\n metadata?: StepMetadata;\n}\n\n/** Options for `observe()` — same surface as {@link InspectRunOptions} in MVP. */\nexport type ObserveOptions = InspectRunOptions;\n\n/**\n * Resolved settings for the active run while tracing is enabled.\n * Populated by runtime code in a later step; defined here for `context.ts`.\n */\nexport interface ExecutionContext {\n runId: string;\n runName: string;\n traceDir: string;\n silent: boolean;\n metadata?: Record<string, unknown>;\n}\n\n/** Stack position of the step currently executing (used by future context tracking). */\nexport interface ActiveStepContext {\n stepId: string;\n parentId?: string;\n depth: number;\n}\n\nconst STEP_TYPES: readonly StepType[] = [\n \"run\",\n \"llm\",\n \"tool\",\n \"decision\",\n \"logic\",\n \"state\",\n \"custom\",\n] as const;\n\nconst STEP_STATUSES: readonly StepStatus[] = [\n \"running\",\n \"success\",\n \"error\",\n] as const;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** Returns true if `value` is one of the MVP {@link StepType} literals. */\nexport function isStepType(value: unknown): value is StepType {\n return (\n typeof value === \"string\" &&\n (STEP_TYPES as readonly string[]).includes(value)\n );\n}\n\n/** Returns true if `value` is one of the MVP {@link StepStatus} literals. */\nexport function isStepStatus(value: unknown): value is StepStatus {\n return (\n typeof value === \"string\" &&\n (STEP_STATUSES as readonly string[]).includes(value)\n );\n}\n\n/**\n * Narrowing guard for a {@link TraceEvent} object with required MVP fields.\n * Does not deeply validate optional `metadata` shapes.\n */\nexport function isTraceEvent(value: unknown): value is TraceEvent {\n if (!isRecord(value)) return false;\n if (value.schemaVersion !== \"0.1\") return false;\n if (typeof value.timestamp !== \"number\") return false;\n if (typeof value.event !== \"string\") return false;\n\n switch (value.event) {\n case \"run_started\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.name === \"string\" &&\n typeof value.startTime === \"number\"\n );\n }\n case \"run_completed\": {\n return (\n typeof value.runId === \"string\" &&\n (value.status === \"success\" || value.status === \"error\") &&\n typeof value.endTime === \"number\" &&\n typeof value.durationMs === \"number\"\n );\n }\n case \"step_started\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.stepId === \"string\" &&\n typeof value.name === \"string\" &&\n isStepType(value.type) &&\n typeof value.startTime === \"number\"\n );\n }\n case \"step_completed\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.stepId === \"string\" &&\n (value.status === \"success\" || value.status === \"error\") &&\n typeof value.endTime === \"number\" &&\n typeof value.durationMs === \"number\"\n );\n }\n case \"outcome_observed\": {\n return (\n typeof value.runId === \"string\" &&\n typeof value.outcomeId === \"string\" &&\n typeof value.name === \"string\" &&\n typeof value.expectation === \"string\" &&\n (value.status === \"passed\" ||\n value.status === \"failed\" ||\n value.status === \"unknown\" ||\n value.status === \"skipped\") &&\n typeof value.observedAt === \"number\"\n );\n }\n default:\n return false;\n }\n}\n","import { persistedInspectEventToTraceEvents } from \"./persisted/to-trace-event.js\";\nimport { isPersistedInspectEvent } from \"./types/persisted-inspect-event.js\";\nimport type { PersistedInspectEvent } from \"./types/persisted-inspect-event.js\";\nimport { isTraceEvent } from \"./types.js\";\nimport type { TraceEvent } from \"./types.js\";\nimport { warn } from \"./utils.js\";\n\nexport type TraceJsonlFormat = \"0.1\" | \"0.2\" | \"1.0\" | \"mixed\" | \"empty\";\n\nexport type ParsedTraceJsonlRow =\n | { format: \"0.1\"; event: TraceEvent; sourceLine: number }\n | { format: \"0.2\"; event: PersistedInspectEvent; sourceLine: number }\n | { format: \"1.0\"; event: PersistedInspectEvent; sourceLine: number };\n\nexport interface ParseTraceJsonlResult {\n format: TraceJsonlFormat;\n /** Count of valid source JSONL rows before any one-to-many normalization. */\n sourceEventCount: number;\n events: TraceEvent[];\n persisted: PersistedInspectEvent[];\n /** Valid source rows in JSONL order, before cross-version normalization. */\n rows: ParsedTraceJsonlRow[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction detectLineFormat(parsed: unknown): \"0.1\" | \"0.2\" | \"1.0\" | \"unknown\" {\n if (!isRecord(parsed)) return \"unknown\";\n if (parsed.schemaVersion === \"0.1\") return \"0.1\";\n if (parsed.schemaVersion === \"0.2\") return \"0.2\";\n if (parsed.schemaVersion === \"1.0\") return \"1.0\";\n return \"unknown\";\n}\n\nexport interface ParseTraceJsonlOptions {\n validate?: (value: unknown) => value is TraceEvent;\n /** Emit parse warnings through the standard AgentInspect warning channel (default true). */\n warnings?: boolean;\n}\n\n/**\n * Parses JSONL content into normalized v0.1 {@link TraceEvent} rows.\n * Accepts homogenous v0.1, v0.2, or v1.0 files; mixed files are converted with a warning.\n */\nexport function parseTraceJsonl(\n raw: string,\n options: ParseTraceJsonlOptions = {},\n): ParseTraceJsonlResult {\n const validate = options.validate ?? isTraceEvent;\n const emitWarning = (message: string): void => {\n if (options.warnings !== false) warn(message);\n };\n const persisted: PersistedInspectEvent[] = [];\n const traceEvents: TraceEvent[] = [];\n const rows: ParsedTraceJsonlRow[] = [];\n let sourceEventCount = 0;\n let saw01 = false;\n let saw02 = false;\n let saw10 = false;\n let lineNumber = 0;\n\n for (const line of raw.split(/\\r?\\n/)) {\n lineNumber += 1;\n const trimmed = line.trim();\n if (trimmed === \"\") continue;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed) as unknown;\n } catch {\n emitWarning(\"Skipped invalid JSON line in trace file\");\n continue;\n }\n\n const format = detectLineFormat(parsed);\n if (format === \"0.1\") {\n saw01 = true;\n if (validate(parsed)) {\n sourceEventCount += 1;\n traceEvents.push(parsed);\n rows.push({ format: \"0.1\", event: parsed, sourceLine: lineNumber });\n } else {\n emitWarning(\"Skipped invalid trace event line in trace file\");\n }\n continue;\n }\n\n if (format === \"0.2\" || format === \"1.0\") {\n if (format === \"0.2\") saw02 = true;\n else saw10 = true;\n if (isPersistedInspectEvent(parsed)) {\n sourceEventCount += 1;\n persisted.push(parsed);\n rows.push({ format, event: parsed, sourceLine: lineNumber });\n traceEvents.push(...persistedInspectEventToTraceEvents(parsed));\n } else {\n emitWarning(\"Skipped invalid persisted inspect event line in trace file\");\n }\n continue;\n }\n\n emitWarning(\"Skipped trace line with unknown schemaVersion\");\n }\n\n const seenFormats = [saw01, saw02, saw10].filter(Boolean).length;\n if (seenFormats > 1) {\n emitWarning(\n \"Trace file mixes AgentInspect schemaVersion rows; normalizing all rows\",\n );\n }\n\n let format: TraceJsonlFormat = \"empty\";\n if (seenFormats > 1) format = \"mixed\";\n else if (saw01) format = \"0.1\";\n else if (saw02) format = \"0.2\";\n else if (saw10) format = \"1.0\";\n\n return { format, sourceEventCount, events: traceEvents, persisted, rows };\n}\n\n/**\n * Returns a user-facing message when a trace file uses an unsupported schema version.\n */\nexport function unknownTraceFormatMessage(): string {\n return (\n \"Unsupported trace format. Expected schemaVersion 0.1 (TraceEvent), 0.2 (PersistedInspectEvent), or 1.0 (PersistedInspectEvent).\"\n );\n}\n","import crypto from \"node:crypto\";\n\nimport type { RedactionRule } from \"../types/log-config.js\";\n\nexport const DEFAULT_REDACT_KEYS = [\n \"authorization\",\n \"cookie\",\n \"token\",\n \"apiKey\",\n \"password\",\n \"secret\",\n \"email\",\n] as const;\n\nexport interface RedactorOptions {\n rules?: RedactionRule[];\n /** Additional exact keys (case-insensitive) to redact in addition to defaults. */\n extraKeys?: readonly string[];\n}\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction toKey(s: string): string {\n return s.toLowerCase();\n}\n\nfunction stableHash(value: string): string {\n const h = crypto.createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n return h.slice(0, 8);\n}\n\ntype CompiledRule =\n | { key: string; strategy: \"full\" }\n | { key: string; strategy: \"prefix\"; keep: number }\n | { key: string; strategy: \"hash\" };\n\nfunction compileRules(\n rules?: RedactionRule[],\n extraKeys?: readonly string[],\n): CompiledRule[] {\n const out = new Map<string, CompiledRule>();\n\n const set = (r: CompiledRule) => {\n const k = toKey(r.key);\n out.set(k, { ...r, key: k } as CompiledRule);\n };\n\n for (const k of DEFAULT_REDACT_KEYS) {\n set({ key: k, strategy: \"full\" });\n }\n\n for (const k of extraKeys ?? []) {\n if (typeof k === \"string\" && k.length > 0) {\n set({ key: k, strategy: \"full\" });\n }\n }\n\n for (const r of rules ?? []) {\n if (typeof r === \"string\") {\n set({ key: r, strategy: \"full\" });\n continue;\n }\n const key = r.key;\n if (r.strategy === \"full\") set({ key, strategy: \"full\" });\n if (r.strategy === \"hash\") set({ key, strategy: \"hash\" });\n if (r.strategy === \"prefix\") {\n set({ key, strategy: \"prefix\", keep: typeof r.keep === \"number\" ? r.keep : 8 });\n }\n }\n\n return [...out.values()];\n}\n\nexport class Redactor {\n readonly #rules: CompiledRule[];\n\n constructor(options?: RedactorOptions) {\n this.#rules = compileRules(options?.rules, options?.extraKeys);\n }\n\n redactValue(key: string, value: unknown): unknown {\n const k = toKey(key);\n const rule = this.#rules.find((r) => r.key === k);\n if (!rule) {\n return this.#redactNested(value);\n }\n\n if (rule.strategy === \"full\") return \"[REDACTED]\";\n const asString =\n typeof value === \"string\"\n ? value\n : typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\"\n ? String(value)\n : undefined;\n\n if (rule.strategy === \"prefix\") {\n if (asString === undefined) return \"[REDACTED]\";\n const keep = Math.max(0, Math.floor(rule.keep));\n return asString.length <= keep ? `${asString}…` : `${asString.slice(0, keep)}…`;\n }\n\n if (rule.strategy === \"hash\") {\n if (asString === undefined) return \"[HASH:unknown]\";\n return `[HASH:${stableHash(asString)}]`;\n }\n\n return this.#redactNested(value);\n }\n\n redactRecord(record: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(record)) {\n out[k] = this.redactValue(k, v);\n }\n return out;\n }\n\n #redactNested(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((v) => this.#redactNested(v));\n }\n if (isRecord(value)) {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n out[k] = this.redactValue(k, v);\n }\n return out;\n }\n return value;\n }\n}\n\n","import type { RedactionProfile } from \"./types.js\";\n\n/** Extra keys redacted under the `share` profile (in addition to {@link DEFAULT_REDACT_KEYS}). */\nexport const SHARE_PROFILE_EXTRA_KEYS = [\n \"userEmail\",\n \"customerEmail\",\n \"phone\",\n \"phoneNumber\",\n \"address\",\n \"ip\",\n \"ipAddress\",\n \"sessionId\",\n \"requestId\",\n \"correlationId\",\n \"decisionId\",\n \"groupId\",\n \"customerId\",\n \"userId\",\n \"accountId\",\n \"tenantId\",\n \"orgId\",\n \"organizationId\",\n \"traceId\",\n \"spanId\",\n \"parentSpanId\",\n] as const;\n\n/** Extra keys redacted under the `strict` profile (in addition to share keys). */\nexport const STRICT_PROFILE_EXTRA_KEYS = [\n \"prompt\",\n \"completion\",\n \"input\",\n \"output\",\n \"inputPreview\",\n \"outputPreview\",\n \"message\",\n \"messages\",\n \"transcript\",\n \"context\",\n \"document\",\n \"documents\",\n \"chunk\",\n \"chunks\",\n \"retrieval\",\n \"query\",\n] as const;\n\nexport interface ResolvedRedactionProfile {\n profile: RedactionProfile;\n extraKeys: readonly string[];\n maxMetadataValueLengthCap?: number;\n maxPreviewLengthCap?: number;\n}\n\n/** Resolves named profile behavior (keys + metadata string caps). */\nexport function resolveRedactionProfile(\n profile: RedactionProfile = \"local\",\n): ResolvedRedactionProfile {\n switch (profile) {\n case \"local\":\n return { profile: \"local\", extraKeys: [] };\n case \"share\":\n return {\n profile: \"share\",\n extraKeys: SHARE_PROFILE_EXTRA_KEYS,\n maxMetadataValueLengthCap: 500,\n maxPreviewLengthCap: 200,\n };\n case \"strict\":\n return {\n profile: \"strict\",\n extraKeys: [...SHARE_PROFILE_EXTRA_KEYS, ...STRICT_PROFILE_EXTRA_KEYS],\n maxMetadataValueLengthCap: 200,\n maxPreviewLengthCap: 80,\n };\n default:\n return { profile: \"local\", extraKeys: [] };\n }\n}\n\nfunction isPreviewKey(key: string): boolean {\n return key.toLowerCase().includes(\"preview\");\n}\n\n/**\n * Applies profile metadata string caps. User-provided lower limits are preserved.\n */\nexport function applyProfileMetadataCaps(\n maxMetadataValueLength: number,\n maxPreviewLength: number,\n resolved: ResolvedRedactionProfile,\n): { maxMetadataValueLength: number; maxPreviewLength: number } {\n let meta = maxMetadataValueLength;\n let preview = maxPreviewLength;\n\n if (resolved.maxMetadataValueLengthCap !== undefined) {\n meta = Math.min(meta, resolved.maxMetadataValueLengthCap);\n }\n if (resolved.maxPreviewLengthCap !== undefined) {\n preview = Math.min(preview, resolved.maxPreviewLengthCap);\n }\n\n return { maxMetadataValueLength: meta, maxPreviewLength: preview };\n}\n\nexport function truncateStringForProfile(\n value: string,\n key: string,\n maxMetadataValueLength: number,\n maxPreviewLength: number,\n): string {\n const max = isPreviewKey(key) ? maxPreviewLength : maxMetadataValueLength;\n if (max <= 0) return \"…\";\n if (value.length <= max) return value;\n return `${value.slice(0, max)}…`;\n}\n","import { appendFile, readdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type { TraceEvent } from \"./types.js\";\nimport { isStepType } from \"./types.js\";\nimport {\n DEFAULT_MAX_EVENT_BYTES,\n prepareTraceEventForDisk,\n resolveTraceSafetyOptions,\n} from \"./trace-event-safety.js\";\nimport { parseTraceJsonl } from \"./read-trace.js\";\nimport {\n ensureTraceDir,\n FALLBACK_TRACE_DIR,\n getTraceFilePath,\n warn,\n} from \"./utils.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim() !== \"\";\n}\n\nfunction finiteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction optionalErrorInfo(value: unknown): boolean {\n if (value === undefined) return true;\n if (!isRecord(value)) return false;\n if (typeof value.message !== \"string\") return false;\n if (\"stack\" in value && value.stack !== undefined) {\n if (typeof value.stack !== \"string\") return false;\n }\n return true;\n}\n\n/**\n * Strict MVP validation before writing JSONL. Rejects empty ids, non-finite times, and malformed payloads.\n */\nexport function validateEvent(event: unknown): event is TraceEvent {\n if (!isRecord(event)) return false;\n if (event.schemaVersion !== \"0.1\") return false;\n if (!finiteNumber(event.timestamp)) return false;\n if (typeof event.event !== \"string\") return false;\n\n switch (event.event) {\n case \"run_started\": {\n if (\n !nonEmptyString(event.runId) ||\n !nonEmptyString(event.name) ||\n !finiteNumber(event.startTime)\n ) {\n return false;\n }\n if (event.metadata !== undefined && !isRecord(event.metadata)) {\n return false;\n }\n return true;\n }\n case \"run_completed\": {\n return (\n nonEmptyString(event.runId) &&\n (event.status === \"success\" || event.status === \"error\") &&\n finiteNumber(event.endTime) &&\n finiteNumber(event.durationMs) &&\n optionalErrorInfo(event.error)\n );\n }\n case \"step_started\": {\n if (\n !nonEmptyString(event.runId) ||\n !nonEmptyString(event.stepId) ||\n !nonEmptyString(event.name) ||\n !isStepType(event.type) ||\n !finiteNumber(event.startTime)\n ) {\n return false;\n }\n if (event.parentId !== undefined && typeof event.parentId !== \"string\") {\n return false;\n }\n if (event.metadata !== undefined && !isRecord(event.metadata)) {\n return false;\n }\n return true;\n }\n case \"step_completed\": {\n return (\n nonEmptyString(event.runId) &&\n nonEmptyString(event.stepId) &&\n (event.status === \"success\" || event.status === \"error\") &&\n finiteNumber(event.endTime) &&\n finiteNumber(event.durationMs) &&\n optionalErrorInfo(event.error)\n );\n }\n case \"outcome_observed\": {\n return (\n nonEmptyString(event.runId) &&\n nonEmptyString(event.outcomeId) &&\n nonEmptyString(event.name) &&\n nonEmptyString(event.expectation) &&\n (event.status === \"passed\" ||\n event.status === \"failed\" ||\n event.status === \"unknown\" ||\n event.status === \"skipped\") &&\n finiteNumber(event.observedAt)\n );\n }\n default:\n return false;\n }\n}\n\n/** Serializes a trace line as compact JSON without a trailing newline. */\nexport function serializeEvent(event: TraceEvent): string {\n try {\n return JSON.stringify(event);\n } catch {\n return \"\";\n }\n}\n\n/**\n * Creates (or truncates) an empty JSONL file for a run. Uses {@link ensureTraceDir} then {@link getTraceFilePath}.\n * On failure, retries once under {@link FALLBACK_TRACE_DIR}.\n */\nexport async function initializeTraceFile(\n runId: string,\n traceDir: string,\n): Promise<string | undefined> {\n try {\n const usable = await ensureTraceDir(traceDir);\n const filePath = getTraceFilePath(runId, usable);\n await writeFile(filePath, \"\", \"utf-8\");\n return filePath;\n } catch (e) {\n warn(\"Failed to initialize trace file\", e);\n }\n\n try {\n const usable = await ensureTraceDir(FALLBACK_TRACE_DIR);\n const filePath = getTraceFilePath(runId, usable);\n await writeFile(filePath, \"\", \"utf-8\");\n return filePath;\n } catch (e) {\n warn(\"Failed to initialize trace file on fallback directory\", e);\n return undefined;\n }\n}\n\n/**\n * Appends one validated JSONL line for `event.runId`. Falls back to {@link FALLBACK_TRACE_DIR} on append failure.\n */\nfunction ensureEventWithinBounds(event: TraceEvent): TraceEvent {\n const line = serializeEvent(event);\n if (line === \"\") return event;\n const bytes = Buffer.byteLength(line, \"utf8\");\n if (bytes <= DEFAULT_MAX_EVENT_BYTES) return event;\n return prepareTraceEventForDisk(event, resolveTraceSafetyOptions());\n}\n\nexport async function writeTraceEvent(\n event: TraceEvent,\n traceDir: string,\n): Promise<void> {\n const bounded = ensureEventWithinBounds(event);\n\n if (!validateEvent(bounded)) {\n warn(\"Skipped invalid trace event (validation failed)\");\n return;\n }\n\n const line = serializeEvent(bounded);\n if (line === \"\") {\n warn(\"Skipped trace event (serialization failed)\");\n return;\n }\n\n const payload = `${line}\\n`;\n\n const tryAppend = async (dir: string): Promise<boolean> => {\n try {\n const usable = await ensureTraceDir(dir);\n const filePath = getTraceFilePath(event.runId, usable);\n await appendFile(filePath, payload, \"utf-8\");\n return true;\n } catch {\n return false;\n }\n };\n\n if (await tryAppend(traceDir)) {\n return;\n }\n\n warn(`Failed to append trace event for run ${event.runId}`);\n\n if (await tryAppend(FALLBACK_TRACE_DIR)) {\n return;\n }\n\n warn(\"Failed to append trace event to fallback directory\");\n}\n\n/**\n * Reads raw JSONL file contents for a run, or `undefined` if missing or unreadable.\n */\nexport async function readTraceFile(\n runId: string,\n traceDir: string,\n): Promise<string | undefined> {\n try {\n const filePath = getTraceFilePath(runId, traceDir);\n return await readFile(filePath, \"utf-8\");\n } catch (e) {\n if (e && typeof e === \"object\" && \"code\" in e && e.code === \"ENOENT\") {\n return undefined;\n }\n warn(\"Unexpected error reading trace file\", e);\n return undefined;\n }\n}\n\n/**\n * Parses JSONL into validated {@link TraceEvent} rows (v0.1 native or v0.2 normalized).\n * Invalid lines are skipped with a warning.\n */\nexport async function readTraceEvents(\n runId: string,\n traceDir: string,\n): Promise<TraceEvent[]> {\n try {\n const filePath = getTraceFilePath(runId, traceDir);\n return await readTraceEventsFromFile(filePath);\n } catch (e) {\n warn(\"Failed to read trace events\", e);\n return [];\n }\n}\n\n/**\n * Reads and normalizes trace events from an exact file path.\n * Used by directory scans where the embedded run id may differ from the basename.\n */\nexport async function readTraceEventsFromFile(\n filePath: string,\n): Promise<TraceEvent[]> {\n try {\n const raw = await readFile(filePath, \"utf-8\");\n return parseTraceJsonl(raw, { validate: validateEvent }).events;\n } catch (e) {\n if (e && typeof e === \"object\" && \"code\" in e && e.code === \"ENOENT\") {\n return [];\n }\n warn(\"Failed to read trace events from file\", e);\n return [];\n }\n}\n\n/**\n * Lists `.jsonl` file names in `traceDir`, newest by mtime first (name sort as tie-breaker).\n */\nexport async function listTraceFiles(traceDir: string): Promise<string[]> {\n try {\n const usable = path.resolve(traceDir);\n const names = await readdir(usable);\n const jsonl = names.filter((n) => n.endsWith(\".jsonl\"));\n const withStat = await Promise.all(\n jsonl.map(async (name) => {\n try {\n const st = await stat(path.join(usable, name));\n return { name, mtime: st.mtimeMs };\n } catch {\n return { name, mtime: 0 };\n }\n }),\n );\n withStat.sort((a, b) => {\n if (b.mtime !== a.mtime) return b.mtime - a.mtime;\n return a.name.localeCompare(b.name);\n });\n return withStat.map((x) => x.name);\n } catch {\n return [];\n }\n}\n\n/** Maps a `.jsonl` file name to its run id (basename only; no traversal). */\nexport function getRunIdFromTraceFileName(fileName: string): string | undefined {\n try {\n const base = path.basename(fileName);\n if (!base.endsWith(\".jsonl\")) return undefined;\n const id = base.slice(0, -\".jsonl\".length);\n return id === \"\" ? undefined : id;\n } catch {\n return undefined;\n }\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","import type { InspectRunOptions, TraceCorrelationMetadata } from \"./types.js\";\n\nexport const TRACE_CORRELATION_KEYS = [\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n \"groupId\",\n] as const satisfies readonly (keyof TraceCorrelationMetadata)[];\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0;\n}\n\n/** Extracts known correlation keys from a metadata record. */\nexport function extractCorrelationMetadata(\n record: Record<string, unknown> | undefined,\n): TraceCorrelationMetadata | undefined {\n if (!record) {\n return undefined;\n }\n\n const out: TraceCorrelationMetadata = {};\n let found = false;\n\n for (const key of TRACE_CORRELATION_KEYS) {\n const value = record[key];\n if (isNonEmptyString(value)) {\n out[key] = value;\n found = true;\n }\n }\n\n return found ? out : undefined;\n}\n\n/**\n * Builds `run_started` metadata from optional run metadata and top-level correlation fields.\n * Top-level correlation options override the same keys in `options.metadata`.\n */\nexport function buildRunStartedMetadata(\n options?: Pick<\n InspectRunOptions,\n | \"metadata\"\n | \"correlationId\"\n | \"requestId\"\n | \"decisionId\"\n | \"groupId\"\n >,\n): Record<string, unknown> | undefined {\n if (!options) {\n return undefined;\n }\n\n const merged: Record<string, unknown> =\n options.metadata !== undefined ? { ...options.metadata } : {};\n\n if (isNonEmptyString(options.correlationId)) {\n merged.correlationId = options.correlationId;\n }\n if (isNonEmptyString(options.requestId)) {\n merged.requestId = options.requestId;\n }\n if (isNonEmptyString(options.decisionId)) {\n merged.decisionId = options.decisionId;\n }\n if (isNonEmptyString(options.groupId)) {\n merged.groupId = options.groupId;\n }\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport { extractCorrelationMetadata } from \"./correlation-metadata.js\";\nimport type { ExecutionContext, TraceCorrelationMetadata } from \"./types.js\";\nimport {\n resolveTraceSafetyOptions,\n type TraceSafetyOptions,\n} from \"./trace-event-safety.js\";\n\ntype RuntimeExecutionContext = ExecutionContext & {\n currentStepId?: string;\n currentDepth: number;\n traceSafety: TraceSafetyOptions;\n};\n\nconst storage = new AsyncLocalStorage<RuntimeExecutionContext>();\n\nfunction toPublicContext(ctx: RuntimeExecutionContext): ExecutionContext {\n return {\n runId: ctx.runId,\n runName: ctx.runName,\n traceDir: ctx.traceDir,\n silent: ctx.silent,\n metadata: ctx.metadata,\n };\n}\n\nfunction invoke<T>(fn: () => T | Promise<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n try {\n Promise.resolve(fn()).then(resolve, reject);\n } catch (e) {\n reject(e);\n }\n });\n}\n\n/** Returns the active run context, without internal step fields. */\nexport function getCurrentContext(): ExecutionContext | undefined {\n try {\n const s = storage.getStore();\n if (!s) return undefined;\n return toPublicContext(s);\n } catch {\n return undefined;\n }\n}\n\n/** Active `runId` when inside `runWithContext`, else `undefined`. */\nexport function getCurrentRunId(): string | undefined {\n try {\n return storage.getStore()?.runId;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Correlation metadata for the active run (`correlationId`, `requestId`, `decisionId`, `groupId`).\n * `undefined` outside `inspectRun` / `maybeInspectRun` or when no correlation fields were set.\n */\nexport function getCurrentCorrelationMetadata():\n | TraceCorrelationMetadata\n | undefined {\n try {\n return extractCorrelationMetadata(storage.getStore()?.metadata);\n } catch {\n return undefined;\n }\n}\n\n/** Active `runName` when inside `runWithContext`, else `undefined`. */\nexport function getCurrentRunName(): string | undefined {\n try {\n return storage.getStore()?.runName;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Active step id in this async scope (parent for nested `step()` calls).\n * `undefined` at run root or outside any run.\n */\nexport function getCurrentStepId(): string | undefined {\n try {\n return storage.getStore()?.currentStepId;\n } catch {\n return undefined;\n }\n}\n\n/** Alias of {@link getCurrentStepId} for readability in step instrumentation. */\nexport function getParentStepId(): string | undefined {\n return getCurrentStepId();\n}\n\n/**\n * Nesting depth: `0` at run root, increments by one per nested `runWithStepContext`.\n * Returns `0` outside any run.\n */\nexport function getCurrentDepth(): number {\n try {\n const d = storage.getStore()?.currentDepth;\n return typeof d === \"number\" && Number.isFinite(d) ? d : 0;\n } catch {\n return 0;\n }\n}\n\nexport function hasActiveContext(): boolean {\n try {\n return storage.getStore() !== undefined;\n } catch {\n return false;\n }\n}\n\nexport function getTraceDirFromContext(): string | undefined {\n try {\n return storage.getStore()?.traceDir;\n } catch {\n return undefined;\n }\n}\n\nexport function isSilentContext(): boolean {\n try {\n const s = storage.getStore();\n return s ? s.silent : false;\n } catch {\n return false;\n }\n}\n\n/** Resolved trace safety settings for the active run (redaction + size bounds). */\nexport function getTraceSafetyFromContext(): TraceSafetyOptions | undefined {\n try {\n return storage.getStore()?.traceSafety;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Runs `fn` with a fresh AgentInspect run context (depth 0, no active step).\n * Propagates sync/async results and rejections; does not swallow user errors.\n */\nexport function runWithContext<T>(\n context: ExecutionContext,\n fn: () => Promise<T> | T,\n traceSafety: TraceSafetyOptions = resolveTraceSafetyOptions(),\n): Promise<T> {\n const runtime: RuntimeExecutionContext = {\n runId: context.runId,\n runName: context.runName,\n traceDir: context.traceDir,\n silent: context.silent,\n metadata: context.metadata,\n traceSafety,\n currentDepth: 0,\n };\n\n return new Promise((resolve, reject) => {\n storage.run(runtime, () => {\n try {\n Promise.resolve(fn()).then(resolve, reject);\n } catch (e) {\n reject(e);\n }\n });\n });\n}\n\n/**\n * Runs `fn` with `stepId` as the active step (incremented depth).\n * If no run is active, runs `fn` without altering async context.\n */\nexport function runWithStepContext<T>(\n stepId: string,\n fn: () => Promise<T> | T,\n): Promise<T> {\n let parent: RuntimeExecutionContext | undefined;\n try {\n parent = storage.getStore();\n } catch {\n parent = undefined;\n }\n\n if (!parent) {\n return invoke(fn);\n }\n\n const derived: RuntimeExecutionContext = {\n runId: parent.runId,\n runName: parent.runName,\n traceDir: parent.traceDir,\n silent: parent.silent,\n metadata: parent.metadata,\n traceSafety: parent.traceSafety,\n currentStepId: stepId,\n currentDepth: parent.currentDepth + 1,\n };\n\n return new Promise((resolve, reject) => {\n storage.run(derived, () => {\n try {\n Promise.resolve(fn()).then(resolve, reject);\n } catch (e) {\n reject(e);\n }\n });\n });\n}\n","import chalk from \"chalk\";\n\nimport { isSilentContext } from \"./context.js\";\nimport type { ErrorInfo, RunStatus, StepStatus } from \"./types.js\";\nimport { formatDuration, truncateName } from \"./utils.js\";\n\n/** Two spaces per nesting level in terminal output. */\nexport const TERMINAL_INDENT = \" \";\n\n/** Max display length for names in terminal output. */\nexport const MAX_TERMINAL_NAME_LENGTH = 80;\n\n/** Max nesting depth used for indentation (prevents huge indents). */\nexport const MAX_TERMINAL_DEPTH = 10;\n\nfunction normalizeDepth(depth: number): number {\n if (!Number.isFinite(depth) || depth < 0) {\n return 0;\n }\n return Math.min(Math.floor(depth), MAX_TERMINAL_DEPTH);\n}\n\nfunction safePrint(line = \"\"): void {\n try {\n console.log(line);\n } catch {\n /* never break callers */\n }\n}\n\n/** Indentation string for a nesting depth (capped, never negative). */\nexport function getIndent(depth: number): string {\n return TERMINAL_INDENT.repeat(normalizeDepth(depth));\n}\n\n/** Truncates a display name for terminal use; invalid input becomes `\"unnamed\"`. */\nexport function formatTerminalName(name: string): string {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"unnamed\";\n }\n return truncateName(name, MAX_TERMINAL_NAME_LENGTH);\n}\n\nfunction getStatusIcon(status: StepStatus | RunStatus): string {\n if (status === \"success\") return chalk.green(\"✔\");\n if (status === \"error\") return chalk.red(\"✖\");\n return chalk.yellow(\"⏳\");\n}\n\n/** Renders a single step line (colored); does not consult silent mode. */\nexport function renderStepLine(\n name: string,\n durationMs: number | undefined,\n status: StepStatus,\n depth?: number,\n): string {\n try {\n const nm = formatTerminalName(name);\n const ind = getIndent(depth ?? 0);\n if (status === \"running\" && durationMs === undefined) {\n return `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n }\n const hasDur =\n durationMs !== undefined && Number.isFinite(durationMs as number);\n const dur = hasDur ? formatDuration(durationMs as number) : undefined;\n if (status === \"running\") {\n return dur !== undefined\n ? `${ind}${chalk.yellow(\"⏳\")} ${nm} (${dur})`\n : `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n }\n if (!hasDur || dur === undefined) {\n return `${ind}${chalk.yellow(\"⏳\")} ${nm}`;\n }\n if (status === \"success\") {\n return `${ind}${getStatusIcon(\"success\")} ${nm} (${dur})`;\n }\n return `${ind}${getStatusIcon(\"error\")} ${nm} (${dur})`;\n } catch {\n return \"\";\n }\n}\n\n/** Renders an error summary line (no stack in MVP). */\nexport function renderErrorLine(error: ErrorInfo, depth?: number): string {\n try {\n const msg =\n typeof error.message === \"string\" ? error.message : \"\";\n const ind = getIndent((depth ?? 0) + 1);\n return `${ind}Error: ${msg}`;\n } catch {\n return \"\";\n }\n}\n\n/** Plain-text run summary lines (no chalk) for stable testing and CLI reuse. */\nexport function renderRunSummary(\n durationMs: number,\n status: RunStatus,\n traceFilePath?: string,\n): string[] {\n try {\n const dur = Number.isFinite(durationMs)\n ? formatDuration(durationMs)\n : formatDuration(0);\n const head =\n status === \"error\" ? `Failed in ${dur}` : `Completed in ${dur}`;\n const lines = [head];\n if (traceFilePath !== undefined && traceFilePath.trim() !== \"\") {\n lines.push(`Trace: ${traceFilePath}`);\n }\n return lines;\n } catch {\n return [];\n }\n}\n\n/** Prints run header with icon and dim run id. */\nexport function printRunStart(runId: string, name: string): void {\n if (isSilentContext()) return;\n try {\n safePrint(\"\");\n const header = `${chalk.cyan.bold(\"🔍 AgentInspect:\")} ${formatTerminalName(name)} ${chalk.dim(`(${runId})`)}`;\n safePrint(header);\n } catch {\n /* noop */\n }\n}\n\n/** Prints a running step line. */\nexport function printStepStart(name: string, depth = 0): void {\n if (isSilentContext()) return;\n try {\n safePrint(renderStepLine(name, undefined, \"running\", depth));\n } catch {\n /* noop */\n }\n}\n\n/** Prints a completed step line with duration and status icon. */\nexport function printStepComplete(\n name: string,\n durationMs: number,\n status: StepStatus,\n depth = 0,\n): void {\n if (isSilentContext()) return;\n try {\n safePrint(renderStepLine(name, durationMs, status, depth));\n } catch {\n /* noop */\n }\n}\n\n/** Prints a structured error line (message only, no stack). */\nexport function printError(error: ErrorInfo, depth = 0): void {\n if (isSilentContext()) return;\n try {\n safePrint(renderErrorLine(error, depth));\n } catch {\n /* noop */\n }\n}\n\n/** Prints run completion summary and optional trace path. */\nexport function printRunComplete(\n _name: string,\n _runId: string,\n durationMs: number,\n status: RunStatus,\n traceFilePath?: string,\n): void {\n if (isSilentContext()) return;\n try {\n const lines = renderRunSummary(durationMs, status, traceFilePath);\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!;\n if (i === 0) {\n const color =\n status === \"error\"\n ? chalk.red\n : status === \"running\"\n ? chalk.yellow\n : chalk.green;\n safePrint(color(line));\n } else {\n safePrint(chalk.dim(line));\n }\n }\n } catch {\n /* noop */\n }\n}\n\n/** Prints which step failed. */\nexport function printFailedAt(stepName: string): void {\n if (isSilentContext()) return;\n try {\n safePrint(`Failed at: ${formatTerminalName(stepName)}`);\n } catch {\n /* noop */\n }\n}\n","import type { Stats } from \"node:fs\";\nimport { readdir, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { getDefaultTraceDir } from \"./utils.js\";\n\nexport interface TraceDirectoryOptions {\n dir?: string;\n}\n\nexport function resolveTraceDir(options: TraceDirectoryOptions = {}): string {\n if (typeof options.dir === \"string\" && options.dir.trim() !== \"\") {\n return options.dir.trim();\n }\n const envDir = process.env.AGENT_INSPECT_TRACE_DIR;\n if (typeof envDir === \"string\" && envDir.trim() !== \"\") {\n return envDir.trim();\n }\n return getDefaultTraceDir();\n}\n\nexport class TraceDirectory {\n readonly #dir: string;\n\n constructor(options: TraceDirectoryOptions = {}) {\n this.#dir = resolveTraceDir(options);\n }\n\n getPath(filename?: string): string {\n return filename ? path.join(this.#dir, filename) : this.#dir;\n }\n\n async list(): Promise<string[]> {\n try {\n const files = await readdir(this.#dir);\n return files.filter((f) => f.endsWith(\".jsonl\"));\n } catch (e) {\n if (e && typeof e === \"object\" && \"code\" in e && e.code === \"ENOENT\") {\n return [];\n }\n throw e;\n }\n }\n\n async getFileStats(filename: string): Promise<Stats> {\n return await stat(this.getPath(filename));\n }\n}\n\n","import { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type {\n RunCompletedEvent,\n RunStartedEvent,\n StepCompletedEvent,\n StepStartedEvent,\n TraceEvent,\n TraceMetadata,\n TraceMetadataStatus,\n RunSummary,\n StepType,\n StepStatus,\n} from \"./types.js\";\nimport { parseTraceJsonl } from \"./read-trace.js\";\n\nfunction isFiniteNumber(v: unknown): v is number {\n return typeof v === \"number\" && Number.isFinite(v);\n}\n\nfunction parseIsoToMs(value: string | undefined): number | undefined {\n if (value === undefined) return undefined;\n const parsed = Date.parse(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nexport async function extractMetadata(\n filePath: string,\n _quickScan?: boolean,\n): Promise<TraceMetadata> {\n const stats = await stat(filePath);\n\n let runIdFromFile = path.basename(filePath);\n if (runIdFromFile.endsWith(\".jsonl\")) {\n runIdFromFile = runIdFromFile.slice(0, -\".jsonl\".length);\n }\n\n const raw = await readFile(filePath, \"utf-8\");\n const parsedTrace = parseTraceJsonl(raw, { warnings: false });\n\n let runId: string | undefined;\n let name: string | undefined;\n let startedAt: number | undefined;\n let endedAt: number | undefined;\n let explicitDurationMs: number | undefined;\n\n let hasRunStarted = false;\n let hasRunCompleted = false;\n let runCompletedStatus: \"success\" | \"error\" | undefined;\n let anyStepError = false;\n const anyKnownEvent = parsedTrace.sourceEventCount > 0;\n let persistedStatus: TraceMetadataStatus | undefined;\n\n const persistedRun = parsedTrace.persisted.find(\n (event) => event.kind === \"RUN\",\n );\n if (persistedRun) {\n runId = persistedRun.runId;\n if (persistedRun.name.trim() !== \"\") {\n name = persistedRun.name;\n }\n startedAt =\n parseIsoToMs(persistedRun.startedAt) ??\n parseIsoToMs(persistedRun.timestamp);\n endedAt = parseIsoToMs(persistedRun.endedAt);\n if (isFiniteNumber(persistedRun.durationMs)) {\n explicitDurationMs = persistedRun.durationMs;\n if (endedAt === undefined && startedAt !== undefined) {\n endedAt = startedAt + persistedRun.durationMs;\n }\n }\n if (persistedRun.status === \"ok\") persistedStatus = \"success\";\n else if (persistedRun.status === \"error\") persistedStatus = \"error\";\n else if (persistedRun.status === \"running\") persistedStatus = \"running\";\n else if (persistedRun.status === \"unknown\") persistedStatus = \"unknown\";\n } else {\n runId = parsedTrace.persisted[0]?.runId;\n }\n\n for (const e of parsedTrace.events) {\n if (\n runId === undefined &&\n typeof (e as { runId?: unknown }).runId === \"string\"\n ) {\n runId = (e as { runId: string }).runId;\n }\n\n if (e.event === \"run_started\") {\n hasRunStarted = true;\n const rs = e as RunStartedEvent;\n if (typeof rs.name === \"string\" && rs.name.trim() !== \"\") {\n name = rs.name;\n }\n if (isFiniteNumber(rs.startTime)) {\n startedAt = rs.startTime;\n } else if (isFiniteNumber(rs.timestamp)) {\n startedAt = rs.timestamp;\n }\n }\n\n if (e.event === \"run_completed\") {\n hasRunCompleted = true;\n const rc = e as RunCompletedEvent;\n runCompletedStatus = rc.status;\n if (isFiniteNumber(rc.endTime)) endedAt = rc.endTime;\n else if (isFiniteNumber(rc.timestamp)) endedAt = rc.timestamp;\n if (isFiniteNumber(rc.durationMs)) explicitDurationMs = rc.durationMs;\n }\n\n if (e.event === \"step_completed\") {\n const sc = e as StepCompletedEvent;\n if (sc.status === \"error\") {\n anyStepError = true;\n }\n }\n }\n\n const resolvedRunId = runId ?? runIdFromFile;\n\n let status: TraceMetadataStatus = \"unknown\";\n if (\n hasRunCompleted &&\n (runCompletedStatus === \"success\" || runCompletedStatus === \"error\")\n ) {\n status = runCompletedStatus;\n } else if (anyStepError) {\n // If run_completed is missing, but at least one step failed, treat as error.\n status = \"error\";\n } else if (persistedStatus !== undefined) {\n status = persistedStatus;\n } else if (hasRunStarted && !hasRunCompleted) {\n status = \"running\";\n } else if (anyKnownEvent) {\n status = \"unknown\";\n } else {\n status = \"unknown\";\n }\n\n const durationMs =\n explicitDurationMs ??\n (startedAt !== undefined &&\n endedAt !== undefined &&\n Number.isFinite(startedAt) &&\n Number.isFinite(endedAt) &&\n endedAt >= startedAt\n ? endedAt - startedAt\n : undefined);\n\n return {\n runId: resolvedRunId,\n name,\n status,\n startedAt,\n endedAt,\n durationMs,\n eventCount: parsedTrace.sourceEventCount,\n filePath,\n fileSize: stats.size,\n createdAt: stats.birthtime,\n };\n}\n\ntype StepAgg = {\n type: StepType;\n name: string;\n status: StepStatus;\n durationMs?: number;\n parentId?: string;\n tokensInput?: number;\n tokensOutput?: number;\n tokensTotal?: number;\n tokensCached?: number;\n};\n\nfunction isNonNegativeFiniteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nexport function buildRunSummary(events: TraceEvent[]): RunSummary {\n const started = events.find(\n (e): e is RunStartedEvent => e.event === \"run_started\",\n );\n const completed = events.filter(\n (e): e is RunCompletedEvent => e.event === \"run_completed\",\n );\n const lastCompleted = completed[completed.length - 1];\n\n const runId = started?.runId ?? events.find((e: any) => typeof e.runId === \"string\")?.runId ?? \"unknown-run\";\n\n const name =\n typeof started?.name === \"string\" && started.name.trim() !== \"\"\n ? started.name\n : undefined;\n\n const status: TraceMetadataStatus = lastCompleted\n ? lastCompleted.status\n : started\n ? \"running\"\n : \"unknown\";\n\n const durationMs =\n lastCompleted && isFiniteNumber(lastCompleted.durationMs)\n ? lastCompleted.durationMs\n : undefined;\n\n const startedAt =\n started && isFiniteNumber(started.startTime)\n ? started.startTime\n : undefined;\n\n const steps = new Map<string, StepAgg>();\n\n for (const e of events) {\n if (e.event === \"step_started\") {\n const s = e as StepStartedEvent;\n steps.set(s.stepId, {\n type: s.type,\n name: s.name,\n status: \"running\",\n parentId: s.parentId,\n tokensInput:\n isNonNegativeFiniteNumber(s.metadata?.tokens?.input)\n ? s.metadata.tokens.input\n : undefined,\n tokensOutput:\n isNonNegativeFiniteNumber(s.metadata?.tokens?.output)\n ? s.metadata.tokens.output\n : undefined,\n tokensTotal: isNonNegativeFiniteNumber(s.metadata?.tokens?.total)\n ? s.metadata.tokens.total\n : undefined,\n tokensCached: isNonNegativeFiniteNumber(s.metadata?.tokens?.cached)\n ? s.metadata.tokens.cached\n : undefined,\n });\n }\n }\n\n for (const e of events) {\n if (e.event === \"step_completed\") {\n const c = e as StepCompletedEvent;\n const existing = steps.get(c.stepId);\n if (!existing) continue;\n existing.status = c.status;\n existing.durationMs = c.durationMs;\n }\n }\n\n let totalSteps = 0;\n let llmSteps = 0;\n let toolSteps = 0;\n let logicSteps = 0;\n let errorSteps = 0;\n let maxDepth = 0;\n let longestStep: RunSummary[\"longestStep\"] | undefined;\n\n let totalTokensInput = 0;\n let totalTokensOutput = 0;\n let totalTokensTotal = 0;\n let totalTokensCached = 0;\n let tokenBearingSteps = 0;\n let stepsWithKnownTotal = 0;\n let hasCachedTokens = false;\n\n const depthCache = new Map<string, number>();\n const computeDepth = (stepId: string): number => {\n const cached = depthCache.get(stepId);\n if (cached !== undefined) return cached;\n const node = steps.get(stepId);\n if (!node) return 0;\n const parent = node.parentId;\n if (typeof parent !== \"string\" || parent.trim() === \"\" || !steps.has(parent)) {\n depthCache.set(stepId, 0);\n return 0;\n }\n // Depth is parent depth + 1. Cap at a sane limit to avoid cycles.\n const d = Math.min(1000, computeDepth(parent) + 1);\n depthCache.set(stepId, d);\n return d;\n };\n\n for (const [id, s] of steps.entries()) {\n totalSteps += 1;\n if (s.type === \"llm\") llmSteps += 1;\n else if (s.type === \"tool\") toolSteps += 1;\n else logicSteps += 1;\n\n if (s.status === \"error\") errorSteps += 1;\n const depth = computeDepth(id);\n if (depth > maxDepth) maxDepth = depth;\n\n if (typeof s.durationMs === \"number\" && Number.isFinite(s.durationMs)) {\n if (!longestStep || s.durationMs > longestStep.durationMs) {\n longestStep = { name: s.name, durationMs: s.durationMs, type: s.type };\n }\n }\n\n if (\n s.tokensInput !== undefined ||\n s.tokensOutput !== undefined ||\n s.tokensTotal !== undefined ||\n s.tokensCached !== undefined\n ) {\n tokenBearingSteps += 1;\n if (s.tokensInput !== undefined) totalTokensInput += s.tokensInput;\n if (s.tokensOutput !== undefined) totalTokensOutput += s.tokensOutput;\n\n if (s.tokensTotal !== undefined) {\n totalTokensTotal += s.tokensTotal;\n stepsWithKnownTotal += 1;\n } else if (s.tokensInput !== undefined && s.tokensOutput !== undefined) {\n totalTokensTotal += s.tokensInput + s.tokensOutput;\n stepsWithKnownTotal += 1;\n }\n\n if (s.tokensCached !== undefined) {\n totalTokensCached += s.tokensCached;\n hasCachedTokens = true;\n }\n }\n }\n\n const summary: RunSummary = {\n runId,\n name,\n status,\n durationMs,\n totalSteps,\n llmSteps,\n toolSteps,\n logicSteps,\n errorSteps,\n maxDepth,\n ...(longestStep ? { longestStep } : {}),\n ...(tokenBearingSteps > 0\n ? {\n totalTokens: {\n input: totalTokensInput,\n output: totalTokensOutput,\n ...(stepsWithKnownTotal === tokenBearingSteps\n ? { total: totalTokensTotal }\n : {}),\n ...(hasCachedTokens ? { cached: totalTokensCached } : {}),\n },\n }\n : {}),\n };\n\n // startedAt isn't in RunSummary spec, but keep deterministic results: ignore.\n void startedAt;\n return summary;\n}\n","import type { TraceMetadata, TraceMetadataStatus } from \"./types.js\";\nimport { parseDuration } from \"./utils/duration.js\";\n\nexport interface TraceFilterOptions {\n status?: TraceMetadataStatus;\n name?: string;\n since?: string;\n limit?: number;\n}\n\nfunction toLower(s: string | undefined): string {\n return typeof s === \"string\" ? s.toLowerCase() : \"\";\n}\n\nexport function filterTraces(\n traces: TraceMetadata[],\n options: TraceFilterOptions,\n): TraceMetadata[] {\n const input = [...traces];\n\n let out = input.filter((t) => {\n if (options.status && t.status !== options.status) return false;\n\n if (options.name) {\n const q = options.name.toLowerCase();\n const hay = `${toLower(t.name)} ${toLower(t.runId)}`;\n if (!hay.includes(q)) return false;\n }\n\n if (options.since) {\n const windowMs = parseDuration(options.since);\n const cutoff = Date.now() - windowMs;\n const started = typeof t.startedAt === \"number\" ? t.startedAt : undefined;\n const basis = started ?? t.createdAt.getTime();\n if (!Number.isFinite(basis) || basis < cutoff) return false;\n }\n\n return true;\n });\n\n out.sort((a, b) => {\n const aTime = (typeof a.startedAt === \"number\" ? a.startedAt : undefined) ?? a.createdAt.getTime();\n const bTime = (typeof b.startedAt === \"number\" ? b.startedAt : undefined) ?? b.createdAt.getTime();\n return bTime - aTime;\n });\n\n if (typeof options.limit === \"number\" && Number.isFinite(options.limit)) {\n const n = Math.max(0, Math.floor(options.limit));\n out = out.slice(0, n);\n }\n\n return out;\n}\n\n","import type {\n RunCompletedEvent,\n RunStartedEvent,\n StepCompletedEvent,\n StepStartedEvent,\n StepStatus,\n StepType,\n TraceEvent,\n TraceMetadataStatus,\n} from \"./types.js\";\nimport { formatDuration, formatTimestamp } from \"./utils.js\";\n\nexport type TimelineFocus = \"all\" | \"slow\";\n\nexport interface TimelineEntry {\n stepId: string;\n name: string;\n type: StepType;\n status: StepStatus;\n depth: number;\n startedAt: number;\n offsetMs: number;\n durationMs?: number;\n isError: boolean;\n slow?: boolean;\n streaming?: {\n chunkCount?: number;\n streamDurationMs?: number;\n streamedCharCount?: number;\n };\n}\n\nexport interface RunTimeline {\n runId: string;\n name?: string;\n status: TraceMetadataStatus;\n startedAt?: number;\n endedAt?: number;\n durationMs?: number;\n correlation?: {\n correlationId?: string;\n requestId?: string;\n decisionId?: string;\n groupId?: string;\n };\n entries: TimelineEntry[];\n}\n\nexport interface TimelineOptions {\n focus?: TimelineFocus;\n slowTopN?: number;\n}\n\nfunction finite(n: unknown): n is number {\n return typeof n === \"number\" && Number.isFinite(n);\n}\n\nfunction pickStreamingMeta(\n metadata: Record<string, unknown> | undefined,\n): TimelineEntry[\"streaming\"] | undefined {\n if (!metadata || typeof metadata !== \"object\") return undefined;\n const chunkCount = metadata.chunkCount;\n const streamDurationMs = metadata.streamDurationMs;\n const streamedCharCount = metadata.streamedCharCount;\n if (\n !finite(chunkCount) &&\n !finite(streamDurationMs) &&\n !finite(streamedCharCount)\n ) {\n return undefined;\n }\n return {\n ...(finite(chunkCount) ? { chunkCount } : {}),\n ...(finite(streamDurationMs) ? { streamDurationMs } : {}),\n ...(finite(streamedCharCount) ? { streamedCharCount } : {}),\n };\n}\n\nfunction pickCorrelation(\n metadata: Record<string, unknown> | undefined,\n): RunTimeline[\"correlation\"] | undefined {\n if (!metadata || typeof metadata !== \"object\") return undefined;\n const out: NonNullable<RunTimeline[\"correlation\"]> = {};\n for (const key of [\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n \"groupId\",\n ] as const) {\n const v = metadata[key];\n if (typeof v === \"string\" && v.trim() !== \"\") {\n out[key] = v;\n }\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nexport function buildRunTimeline(\n events: TraceEvent[],\n options: TimelineOptions = {},\n): RunTimeline {\n const started = events.find(\n (e): e is RunStartedEvent => e.event === \"run_started\",\n );\n const completed = events.filter(\n (e): e is RunCompletedEvent => e.event === \"run_completed\",\n );\n const lastCompleted = completed[completed.length - 1];\n\n const runId =\n started?.runId ??\n events.find((e) => typeof (e as { runId?: string }).runId === \"string\")\n ?.runId ??\n \"unknown-run\";\n\n const runStart =\n started && finite(started.startTime)\n ? started.startTime\n : started && finite(started.timestamp)\n ? started.timestamp\n : undefined;\n\n const status: TraceMetadataStatus = lastCompleted\n ? lastCompleted.status\n : started\n ? \"running\"\n : \"unknown\";\n\n const steps = new Map<\n string,\n {\n name: string;\n type: StepType;\n parentId?: string;\n startedAt: number;\n status: StepStatus;\n durationMs?: number;\n metadata?: Record<string, unknown>;\n }\n >();\n\n for (const e of events) {\n if (e.event === \"step_started\") {\n const s = e as StepStartedEvent;\n steps.set(s.stepId, {\n name: s.name,\n type: s.type,\n parentId: s.parentId,\n startedAt: finite(s.startTime) ? s.startTime : s.timestamp,\n status: \"running\",\n metadata: s.metadata as Record<string, unknown> | undefined,\n });\n }\n }\n\n for (const e of events) {\n if (e.event !== \"step_completed\") continue;\n const c = e as StepCompletedEvent;\n const node = steps.get(c.stepId);\n if (!node) continue;\n node.status = c.status;\n if (finite(c.durationMs)) node.durationMs = c.durationMs;\n }\n\n const depthCache = new Map<string, number>();\n const computeDepth = (stepId: string): number => {\n const cached = depthCache.get(stepId);\n if (cached !== undefined) return cached;\n const node = steps.get(stepId);\n if (!node) return 0;\n const parent = node.parentId;\n if (\n typeof parent !== \"string\" ||\n parent.trim() === \"\" ||\n !steps.has(parent)\n ) {\n depthCache.set(stepId, 0);\n return 0;\n }\n const d = Math.min(1000, computeDepth(parent) + 1);\n depthCache.set(stepId, d);\n return d;\n };\n\n const entries: TimelineEntry[] = [];\n for (const [stepId, s] of steps.entries()) {\n const offsetMs =\n runStart !== undefined && finite(s.startedAt)\n ? Math.max(0, s.startedAt - runStart)\n : 0;\n entries.push({\n stepId,\n name: s.name,\n type: s.type,\n status: s.status,\n depth: computeDepth(stepId),\n startedAt: s.startedAt,\n offsetMs,\n durationMs: s.durationMs,\n isError: s.status === \"error\",\n streaming: pickStreamingMeta(s.metadata),\n });\n }\n\n entries.sort((a, b) => a.startedAt - b.startedAt);\n\n const slowTopN = options.slowTopN ?? 3;\n if (options.focus === \"slow\" && entries.length > 0) {\n const ranked = [...entries]\n .filter((e) => finite(e.durationMs))\n .sort((a, b) => (b.durationMs ?? 0) - (a.durationMs ?? 0));\n const slowIds = new Set(\n ranked.slice(0, slowTopN).map((e) => e.stepId),\n );\n for (const e of entries) {\n if (slowIds.has(e.stepId)) e.slow = true;\n }\n }\n\n return {\n runId,\n name:\n typeof started?.name === \"string\" && started.name.trim() !== \"\"\n ? started.name\n : undefined,\n status,\n startedAt: runStart,\n endedAt:\n lastCompleted && finite(lastCompleted.endTime)\n ? lastCompleted.endTime\n : undefined,\n durationMs:\n lastCompleted && finite(lastCompleted.durationMs)\n ? lastCompleted.durationMs\n : undefined,\n correlation: pickCorrelation(\n started?.metadata as Record<string, unknown> | undefined,\n ),\n entries,\n };\n}\n\nexport interface RenderTimelineOptions {\n focus?: TimelineFocus;\n}\n\nexport function renderTimeline(\n timeline: RunTimeline,\n options: RenderTimelineOptions = {},\n): string {\n const lines: string[] = [];\n lines.push(`Timeline: ${timeline.name ?? timeline.runId}`);\n lines.push(`Run ID: ${timeline.runId}`);\n lines.push(`Status: ${timeline.status}`);\n if (timeline.startedAt !== undefined) {\n lines.push(`Started: ${formatTimestamp(timeline.startedAt)}`);\n }\n if (timeline.durationMs !== undefined) {\n lines.push(`Duration: ${formatDuration(timeline.durationMs)}`);\n }\n if (timeline.correlation) {\n const parts = Object.entries(timeline.correlation)\n .filter(([, v]) => typeof v === \"string\")\n .map(([k, v]) => `${k}=${v}`);\n if (parts.length > 0) {\n lines.push(`Correlation: ${parts.join(\", \")}`);\n }\n }\n lines.push(\"\");\n lines.push(\"Steps (chronological):\");\n\n const show = timeline.entries.filter((e) => {\n if (options.focus === \"slow\") return e.slow === true;\n return true;\n });\n\n if (show.length === 0) {\n lines.push(\n options.focus === \"slow\"\n ? \"(no steps with duration for slow focus)\"\n : \"(no steps)\",\n );\n return lines.join(\"\\n\");\n }\n\n for (const e of show) {\n const prefix = e.slow ? \"[slow] \" : \"\";\n const typeTag =\n e.type === \"llm\" ? \"llm\" : e.type === \"tool\" ? \"tool\" : e.type;\n const dur =\n e.durationMs !== undefined ? formatDuration(e.durationMs) : \"-\";\n const err = e.isError ? \" error\" : \"\";\n const off = formatDuration(e.offsetMs);\n let line = `${prefix}+${off} ${typeTag}:${e.name} (${dur})${err}`;\n if (e.streaming?.chunkCount !== undefined) {\n line += ` chunks=${e.streaming.chunkCount}`;\n }\n if (e.streaming?.streamDurationMs !== undefined) {\n line += ` stream=${formatDuration(e.streaming.streamDurationMs)}`;\n }\n lines.push(line);\n }\n\n return lines.join(\"\\n\");\n}\n","import type {\n RunCompletedEvent,\n RunStartedEvent,\n StepCompletedEvent,\n StepStartedEvent,\n TraceCorrelationMetadata,\n TraceEvent,\n TraceMetadataStatus,\n} from \"./types.js\";\nimport { buildRunSummary } from \"./trace-metadata.js\";\nimport { formatDuration } from \"./utils.js\";\n\nexport interface RunWhatSummary {\n runId: string;\n name?: string;\n status: TraceMetadataStatus;\n durationMs?: number;\n totalSteps: number;\n llmSteps: number;\n toolSteps: number;\n logicSteps: number;\n errorSteps: number;\n maxDepth: number;\n longestStep?: {\n name: string;\n durationMs: number;\n type: string;\n };\n totalTokens?: {\n input: number;\n output: number;\n total?: number;\n cached?: number;\n };\n correlation?: TraceCorrelationMetadata;\n failedStepNames: string[];\n runErrorMessage?: string;\n}\n\nfunction pickCorrelation(\n metadata: Record<string, unknown> | undefined,\n): TraceCorrelationMetadata | undefined {\n if (!metadata) return undefined;\n const out: TraceCorrelationMetadata = {};\n for (const key of [\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n \"groupId\",\n ] as const) {\n const value = metadata[key];\n if (typeof value === \"string\" && value.trim() !== \"\") {\n out[key] = value;\n }\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction stepMixLine(summary: RunWhatSummary): string {\n const parts: string[] = [];\n if (summary.llmSteps > 0) parts.push(`${summary.llmSteps} LLM`);\n if (summary.toolSteps > 0) parts.push(`${summary.toolSteps} tool`);\n if (summary.logicSteps > 0) parts.push(`${summary.logicSteps} logic`);\n return parts.length > 0 ? parts.join(\", \") : \"none\";\n}\n\nfunction outcomeLine(summary: RunWhatSummary): string {\n if (summary.status === \"success\") {\n return summary.errorSteps > 0\n ? \"Completed with step errors recorded.\"\n : \"Completed successfully.\";\n }\n if (summary.status === \"error\") {\n if (summary.failedStepNames.length > 0) {\n const names = summary.failedStepNames.slice(0, 3).join(\", \");\n const suffix =\n summary.failedStepNames.length > 3\n ? ` (+${summary.failedStepNames.length - 3} more)`\n : \"\";\n return `Failed at step(s): ${names}${suffix}.`;\n }\n if (summary.runErrorMessage) {\n return `Run failed: ${summary.runErrorMessage}`;\n }\n return \"Run failed.\";\n }\n if (summary.status === \"running\") {\n return \"Run is still in progress (no run_completed).\";\n }\n return \"Outcome unknown — inspect events may be incomplete.\";\n}\n\n/**\n * Build a concise inspection summary for `what` / report workflows.\n * Read-only over in-memory v0.1 {@link TraceEvent} rows.\n */\nexport function buildRunWhatSummary(events: TraceEvent[]): RunWhatSummary {\n const base = buildRunSummary(events);\n const started = events.find(\n (e): e is RunStartedEvent => e.event === \"run_started\",\n );\n const completed = events.filter(\n (e): e is RunCompletedEvent => e.event === \"run_completed\",\n );\n const lastCompleted = completed[completed.length - 1];\n\n const failedStepNames: string[] = [];\n const stepNames = new Map<string, string>();\n for (const e of events) {\n if (e.event === \"step_started\") {\n const s = e as StepStartedEvent;\n stepNames.set(s.stepId, s.name);\n }\n }\n for (const e of events) {\n if (e.event === \"step_completed\") {\n const sc = e as StepCompletedEvent;\n if (sc.status === \"error\") {\n failedStepNames.push(stepNames.get(sc.stepId) ?? sc.stepId);\n }\n }\n }\n\n return {\n runId: base.runId,\n name: base.name,\n status: base.status,\n durationMs: base.durationMs,\n totalSteps: base.totalSteps,\n llmSteps: base.llmSteps,\n toolSteps: base.toolSteps,\n logicSteps: base.logicSteps,\n errorSteps: base.errorSteps,\n maxDepth: base.maxDepth,\n longestStep: base.longestStep,\n totalTokens: base.totalTokens,\n correlation: pickCorrelation(started?.metadata),\n failedStepNames,\n runErrorMessage: lastCompleted?.error?.message,\n };\n}\n\nexport interface RenderWhatOptions {\n /** Include correlation ids when present (default true). */\n correlation?: boolean;\n}\n\n/**\n * Render a human-readable `what` summary (plain text, no ANSI).\n */\nexport function renderRunWhat(\n summary: RunWhatSummary,\n options: RenderWhatOptions = {},\n): string {\n const showCorrelation = options.correlation !== false;\n const lines: string[] = [];\n const label = summary.name ?? summary.runId;\n lines.push(`What: ${label}`);\n\n const duration =\n summary.durationMs !== undefined ? formatDuration(summary.durationMs) : \"—\";\n lines.push(\n `Status: ${summary.status} · Duration: ${duration} · Steps: ${summary.totalSteps} (${stepMixLine(summary)})`,\n );\n\n if (summary.totalTokens) {\n const tokenParts = [\n `${summary.totalTokens.input} in`,\n `${summary.totalTokens.output} out`,\n ];\n if (summary.totalTokens.total !== undefined) {\n tokenParts.push(`${summary.totalTokens.total} total`);\n }\n if (summary.totalTokens.cached !== undefined) {\n tokenParts.push(`${summary.totalTokens.cached} cached`);\n }\n lines.push(`Tokens: ${tokenParts.join(\" / \")}`);\n }\n\n if (showCorrelation && summary.correlation) {\n const parts: string[] = [];\n if (summary.correlation.correlationId) {\n parts.push(`correlationId=${summary.correlation.correlationId}`);\n }\n if (summary.correlation.requestId) {\n parts.push(`requestId=${summary.correlation.requestId}`);\n }\n if (summary.correlation.decisionId) {\n parts.push(`decisionId=${summary.correlation.decisionId}`);\n }\n if (summary.correlation.groupId) {\n parts.push(`groupId=${summary.correlation.groupId}`);\n }\n if (parts.length > 0) {\n lines.push(`Correlation: ${parts.join(\", \")}`);\n }\n }\n\n lines.push(`Outcome: ${outcomeLine(summary)}`);\n\n if (summary.longestStep && summary.totalSteps > 0) {\n lines.push(\n `Slowest: ${summary.longestStep.name} (${formatDuration(summary.longestStep.durationMs)}, ${summary.longestStep.type})`,\n );\n }\n\n if (summary.maxDepth > 0) {\n lines.push(`Max depth: ${summary.maxDepth}`);\n }\n\n return lines.join(\"\\n\");\n}\n","import { Redactor } from \"./logs/redactor.js\";\nimport { resolveRedactionProfile } from \"./redaction-profiles.js\";\nimport type { RedactionProfile } from \"./types.js\";\nimport type { InspectNode, InspectRunTree } from \"./types/inspect-event.js\";\n\nexport type ExplainMode = \"dry-run\" | \"local\";\n\nexport interface ExplainFact {\n id: string;\n label: string;\n value: unknown;\n source: \"trace\";\n confidence: \"observed\";\n}\n\nexport interface ExplainInference {\n id: string;\n label: string;\n text: string;\n evidence: string[];\n confidence: \"deterministic\";\n}\n\nexport interface ExplainResult {\n mode: ExplainMode;\n runId: string;\n name?: string;\n status?: string;\n redactionProfile: RedactionProfile;\n facts: ExplainFact[];\n inferences: ExplainInference[];\n notes: string[];\n}\n\nexport interface ExplainOptions {\n mode?: ExplainMode;\n redactionProfile?: RedactionProfile;\n}\n\ninterface FlatNode {\n node: InspectNode;\n index: number;\n}\n\nfunction flatten(nodes: InspectNode[], out: FlatNode[] = []): FlatNode[] {\n for (const node of nodes) {\n out.push({ node, index: out.length + 1 });\n flatten(node.children, out);\n }\n return out;\n}\n\nfunction redactValue(\n redactor: Redactor,\n key: string,\n value: unknown,\n): unknown {\n return redactor.redactValue(key, value);\n}\n\nfunction fact(\n id: string,\n label: string,\n value: unknown,\n redactor: Redactor,\n): ExplainFact {\n return {\n id,\n label,\n value: redactValue(redactor, id.split(\".\").at(-1) ?? id, value),\n source: \"trace\",\n confidence: \"observed\",\n };\n}\n\nfunction topKinds(run: InspectRunTree): string[] {\n return Object.entries(run.metadata.kinds)\n .filter(([, count]) => count > 0)\n .sort((a, b) => {\n if (b[1] !== a[1]) return b[1] - a[1];\n return a[0].localeCompare(b[0]);\n })\n .slice(0, 5)\n .map(([kind, count]) => `${kind}:${count}`);\n}\n\nfunction countErrorNodes(nodes: FlatNode[]): number {\n return nodes.filter((entry) => entry.node.event.status === \"error\").length;\n}\n\nfunction slowestNode(nodes: FlatNode[]): FlatNode | undefined {\n return nodes\n .filter((entry) => entry.node.event.durationMs !== undefined)\n .sort((a, b) => {\n const delta = (b.node.event.durationMs ?? 0) - (a.node.event.durationMs ?? 0);\n return delta !== 0 ? delta : a.index - b.index;\n })[0];\n}\n\nfunction attributeFacts(nodes: FlatNode[], redactor: Redactor): ExplainFact[] {\n const facts: ExplainFact[] = [];\n for (const entry of nodes) {\n const attrs = entry.node.event.attributes;\n if (attrs === undefined) continue;\n for (const key of Object.keys(attrs).sort()) {\n facts.push({\n id: `node.${entry.index}.attributes.${key}`,\n label: `${entry.node.event.name} attribute ${key}`,\n value: redactValue(redactor, key, attrs[key]),\n source: \"trace\",\n confidence: \"observed\",\n });\n if (facts.length >= 8) return facts;\n }\n }\n return facts;\n}\n\nfunction buildFacts(run: InspectRunTree, redactor: Redactor): ExplainFact[] {\n const nodes = flatten(run.children);\n const facts = [\n fact(\"run.id\", \"Run id\", run.runId, redactor),\n fact(\"run.name\", \"Run name\", run.name ?? run.runId, redactor),\n fact(\"run.status\", \"Run status\", run.status ?? \"unknown\", redactor),\n fact(\"run.totalEvents\", \"Total events\", run.metadata.totalEvents, redactor),\n fact(\"run.stepCount\", \"Top-level step count\", run.children.length, redactor),\n fact(\"run.nodeCount\", \"Total node count\", nodes.length, redactor),\n fact(\"run.errorNodeCount\", \"Error node count\", countErrorNodes(nodes), redactor),\n fact(\"run.kinds\", \"Observed kind mix\", topKinds(run), redactor),\n ];\n if (run.durationMs !== undefined) {\n facts.push(fact(\"run.durationMs\", \"Run duration milliseconds\", run.durationMs, redactor));\n }\n const slowest = slowestNode(nodes);\n if (slowest !== undefined) {\n facts.push(\n fact(\"run.slowestNode\", \"Slowest observed node\", {\n name: slowest.node.event.name,\n kind: slowest.node.event.kind,\n durationMs: slowest.node.event.durationMs,\n }, redactor),\n );\n }\n facts.push(...attributeFacts(nodes, redactor));\n return facts;\n}\n\nfunction buildInferences(run: InspectRunTree, facts: ExplainFact[]): ExplainInference[] {\n const inferences: ExplainInference[] = [];\n const errorFact = facts.find((item) => item.id === \"run.errorNodeCount\");\n const kindFact = facts.find((item) => item.id === \"run.kinds\");\n const durationFact = facts.find((item) => item.id === \"run.durationMs\");\n const errorNodeCount =\n typeof errorFact?.value === \"number\" ? errorFact.value : 0;\n\n if (run.status === \"error\" || errorNodeCount > 0) {\n inferences.push({\n id: \"outcome.error\",\n label: \"Outcome\",\n text: \"The run recorded an error status or at least one error node.\",\n evidence: [\"run.status\", \"run.errorNodeCount\"],\n confidence: \"deterministic\",\n });\n } else if (run.status === \"ok\") {\n inferences.push({\n id: \"outcome.success\",\n label: \"Outcome\",\n text: \"The run completed without observed error nodes.\",\n evidence: [\"run.status\", \"run.errorNodeCount\"],\n confidence: \"deterministic\",\n });\n }\n\n if (kindFact !== undefined) {\n inferences.push({\n id: \"shape.kind-mix\",\n label: \"Trace shape\",\n text: \"The explanation is based on the observed event kind mix, not generated content.\",\n evidence: [kindFact.id],\n confidence: \"deterministic\",\n });\n }\n\n if (durationFact !== undefined) {\n inferences.push({\n id: \"timing.duration\",\n label: \"Timing\",\n text: \"Timing claims are limited to persisted duration fields in the trace.\",\n evidence: [durationFact.id],\n confidence: \"deterministic\",\n });\n }\n\n return inferences;\n}\n\n/**\n * Build a local, deterministic explanation payload from a reader-selected run.\n *\n * This helper performs no network I/O and does not call a model provider.\n */\nexport function buildLocalExplanation(\n run: InspectRunTree,\n options: ExplainOptions = {},\n): ExplainResult {\n const redactionProfile = options.redactionProfile ?? \"local\";\n const resolved = resolveRedactionProfile(redactionProfile);\n const redactor = new Redactor({ extraKeys: resolved.extraKeys });\n const mode = options.mode ?? \"local\";\n const facts = buildFacts(run, redactor);\n return {\n mode,\n runId: String(redactValue(redactor, \"runId\", run.runId)),\n ...(run.name !== undefined ? { name: String(redactValue(redactor, \"name\", run.name)) } : {}),\n ...(run.status !== undefined ? { status: run.status } : {}),\n redactionProfile,\n facts,\n inferences: mode === \"dry-run\" ? [] : buildInferences(run, facts),\n notes: [\n \"Generated locally without provider or network calls.\",\n \"Facts are observed from normalized trace data; inferences are deterministic labels.\",\n ],\n };\n}\n","import type { RunStartedEvent, TraceEvent, TraceMetadata } from \"./types.js\";\nimport { buildRunSummary } from \"./trace-metadata.js\";\nimport { filterTraces } from \"./trace-filter.js\";\nimport { readTraceEventsFromFile } from \"./storage.js\";\nimport { formatDuration } from \"./utils.js\";\n\nexport interface DurationStats {\n minMs?: number;\n maxMs?: number;\n avgMs?: number;\n p50Ms?: number;\n p95Ms?: number;\n}\n\nexport interface TraceStatsRankedRun {\n runId: string;\n name?: string;\n durationMs?: number;\n status: string;\n}\n\nexport interface TraceStatsRankedStep {\n runId: string;\n stepName: string;\n stepType: string;\n durationMs: number;\n}\n\nexport interface TraceStats {\n traceDir: string;\n since?: string;\n correlationId?: string;\n groupId?: string;\n totalRuns: number;\n successCount: number;\n errorCount: number;\n runningCount: number;\n unknownCount: number;\n errorRate: number;\n duration: DurationStats;\n totalSteps: number;\n avgStepsPerRun: number;\n totalLlmSteps: number;\n totalToolSteps: number;\n totalErrorSteps: number;\n slowestRuns: TraceStatsRankedRun[];\n slowestSteps: TraceStatsRankedStep[];\n}\n\nexport interface TraceStatsOptions {\n traceDir: string;\n since?: string;\n correlationId?: string;\n groupId?: string;\n slowRunLimit?: number;\n slowStepLimit?: number;\n}\n\nfunction percentile(sorted: number[], p: number): number | undefined {\n if (sorted.length === 0) return undefined;\n const idx = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n );\n return sorted[idx];\n}\n\nasync function readRunStartedMetadata(\n filePath: string,\n): Promise<Record<string, unknown> | undefined> {\n try {\n const events = await readTraceEventsFromFile(filePath);\n for (const event of events) {\n if (event.event !== \"run_started\") continue;\n const rs = event as RunStartedEvent;\n if (rs.metadata && typeof rs.metadata === \"object\") {\n return rs.metadata as Record<string, unknown>;\n }\n return undefined;\n }\n } catch {\n /* skip */\n }\n return undefined;\n}\n\nfunction metaMatchesCorrelation(\n metadata: Record<string, unknown> | undefined,\n correlationId?: string,\n groupId?: string,\n): boolean {\n if (correlationId) {\n const v = metadata?.correlationId;\n if (typeof v !== \"string\" || v !== correlationId) return false;\n }\n if (groupId) {\n const v = metadata?.groupId;\n if (typeof v !== \"string\" || v !== groupId) return false;\n }\n return true;\n}\n\nexport async function buildTraceStats(\n metas: TraceMetadata[],\n options: TraceStatsOptions,\n): Promise<TraceStats> {\n let filtered = filterTraces(metas, { since: options.since });\n\n if (options.correlationId || options.groupId) {\n const next: TraceMetadata[] = [];\n for (const m of filtered) {\n const md = await readRunStartedMetadata(m.filePath);\n if (metaMatchesCorrelation(md, options.correlationId, options.groupId)) {\n next.push(m);\n }\n }\n filtered = next;\n }\n\n let successCount = 0;\n let errorCount = 0;\n let runningCount = 0;\n let unknownCount = 0;\n const durations: number[] = [];\n let totalSteps = 0;\n let totalLlmSteps = 0;\n let totalToolSteps = 0;\n let totalErrorSteps = 0;\n const slowestRuns: TraceStatsRankedRun[] = [];\n const slowestSteps: TraceStatsRankedStep[] = [];\n\n for (const m of filtered) {\n if (m.status === \"success\") successCount += 1;\n else if (m.status === \"error\") errorCount += 1;\n else if (m.status === \"running\") runningCount += 1;\n else unknownCount += 1;\n\n if (\n typeof m.durationMs === \"number\" &&\n Number.isFinite(m.durationMs) &&\n m.durationMs >= 0\n ) {\n durations.push(m.durationMs);\n slowestRuns.push({\n runId: m.runId,\n name: m.name,\n durationMs: m.durationMs,\n status: m.status,\n });\n }\n\n try {\n const events = await readTraceEventsFromFile(m.filePath);\n if (events.length === 0) continue;\n const summary = buildRunSummary(events);\n totalSteps += summary.totalSteps;\n totalLlmSteps += summary.llmSteps;\n totalToolSteps += summary.toolSteps;\n totalErrorSteps += summary.errorSteps;\n\n const steps = collectCompletedSteps(events, m.runId);\n for (const s of steps) {\n slowestSteps.push(s);\n }\n } catch {\n /* skip malformed */\n }\n }\n\n slowestRuns.sort((a, b) => (b.durationMs ?? 0) - (a.durationMs ?? 0));\n slowestSteps.sort((a, b) => b.durationMs - a.durationMs);\n\n const runLimit = options.slowRunLimit ?? 5;\n const stepLimit = options.slowStepLimit ?? 5;\n const sortedDur = [...durations].sort((a, b) => a - b);\n const totalRuns = filtered.length;\n const errorRate = totalRuns > 0 ? errorCount / totalRuns : 0;\n const sumDur = durations.reduce((a, b) => a + b, 0);\n\n return {\n traceDir: options.traceDir,\n ...(options.since ? { since: options.since } : {}),\n ...(options.correlationId ? { correlationId: options.correlationId } : {}),\n ...(options.groupId ? { groupId: options.groupId } : {}),\n totalRuns,\n successCount,\n errorCount,\n runningCount,\n unknownCount,\n errorRate,\n duration: {\n ...(sortedDur.length > 0\n ? {\n minMs: sortedDur[0],\n maxMs: sortedDur[sortedDur.length - 1],\n avgMs: sumDur / sortedDur.length,\n p50Ms: percentile(sortedDur, 50),\n p95Ms: percentile(sortedDur, 95),\n }\n : {}),\n },\n totalSteps,\n avgStepsPerRun: totalRuns > 0 ? totalSteps / totalRuns : 0,\n totalLlmSteps,\n totalToolSteps,\n totalErrorSteps,\n slowestRuns: slowestRuns.slice(0, runLimit),\n slowestSteps: slowestSteps.slice(0, stepLimit),\n };\n}\n\nfunction collectCompletedSteps(\n events: TraceEvent[],\n runId: string,\n): TraceStatsRankedStep[] {\n const started = new Map<string, { name: string; type: string }>();\n const out: TraceStatsRankedStep[] = [];\n for (const e of events) {\n if (e.event === \"step_started\") {\n const s = e as { stepId: string; name: string; type: string };\n started.set(s.stepId, { name: s.name, type: s.type });\n }\n if (e.event === \"step_completed\") {\n const c = e as {\n stepId: string;\n durationMs?: number;\n status: string;\n };\n if (c.status !== \"success\" && c.status !== \"error\") continue;\n if (typeof c.durationMs !== \"number\" || !Number.isFinite(c.durationMs)) {\n continue;\n }\n const meta = started.get(c.stepId);\n out.push({\n runId,\n stepName: meta?.name ?? c.stepId,\n stepType: meta?.type ?? \"logic\",\n durationMs: c.durationMs,\n });\n }\n }\n return out;\n}\n\nexport function renderTraceStats(stats: TraceStats): string {\n const lines: string[] = [];\n lines.push(\"Trace stats (local)\");\n lines.push(`Directory: ${stats.traceDir}`);\n if (stats.since) lines.push(`Since: ${stats.since}`);\n if (stats.correlationId) lines.push(`Correlation ID: ${stats.correlationId}`);\n if (stats.groupId) lines.push(`Group ID: ${stats.groupId}`);\n lines.push(\"\");\n lines.push(`Runs: ${stats.totalRuns}`);\n lines.push(\n ` success: ${stats.successCount} error: ${stats.errorCount} running: ${stats.runningCount} unknown: ${stats.unknownCount}`,\n );\n lines.push(`Error rate: ${(stats.errorRate * 100).toFixed(1)}%`);\n if (stats.duration.avgMs !== undefined) {\n lines.push(\n `Duration: min ${formatDuration(stats.duration.minMs ?? 0)} | avg ${formatDuration(stats.duration.avgMs)} | p50 ${formatDuration(stats.duration.p50Ms ?? 0)} | p95 ${formatDuration(stats.duration.p95Ms ?? 0)} | max ${formatDuration(stats.duration.maxMs ?? 0)}`,\n );\n }\n lines.push(\"\");\n lines.push(`Steps: ${stats.totalSteps} (avg ${stats.avgStepsPerRun.toFixed(1)} per run)`);\n lines.push(\n ` LLM: ${stats.totalLlmSteps} tool: ${stats.totalToolSteps} errors: ${stats.totalErrorSteps}`,\n );\n if (stats.slowestRuns.length > 0) {\n lines.push(\"\");\n lines.push(\"Slowest runs:\");\n for (const r of stats.slowestRuns) {\n lines.push(\n ` ${r.runId} | ${r.name ?? \"-\"} | ${formatDuration(r.durationMs ?? 0)} | ${r.status}`,\n );\n }\n }\n if (stats.slowestSteps.length > 0) {\n lines.push(\"\");\n lines.push(\"Slowest steps:\");\n for (const s of stats.slowestSteps) {\n lines.push(\n ` ${s.runId} | ${s.stepType}:${s.stepName} | ${formatDuration(s.durationMs)}`,\n );\n }\n }\n return lines.join(\"\\n\");\n}\n","export type ObservedOutcomeStatus = \"passed\" | \"failed\" | \"unknown\" | \"skipped\";\n\nexport type ObservedOutcomeMethod =\n | \"dom\"\n | \"accessibility\"\n | \"snapshot\"\n | \"network\"\n | \"storage\"\n | \"filesystem\"\n | \"database\"\n | \"queue\"\n | \"custom\";\n\nexport interface ObservedOutcome {\n outcomeId: string;\n runId: string;\n parentId?: string;\n name: string;\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt: number;\n}\n\nexport interface ObserveOutcomeOptions {\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt?: number | string;\n}\n\nexport interface ObservedOutcomeSummary {\n total: number;\n passed: number;\n failed: number;\n unknown: number;\n skipped: number;\n outcomes: ObservedOutcome[];\n}\n\nexport const OBSERVED_OUTCOME_STATUSES: readonly ObservedOutcomeStatus[] = [\n \"passed\",\n \"failed\",\n \"unknown\",\n \"skipped\",\n];\n\nexport const OBSERVED_OUTCOME_METHODS: readonly ObservedOutcomeMethod[] = [\n \"dom\",\n \"accessibility\",\n \"snapshot\",\n \"network\",\n \"storage\",\n \"filesystem\",\n \"database\",\n \"queue\",\n \"custom\",\n];\n\nexport const OUTCOME_ATTRIBUTE_STATUS_KEY = \"outcomeStatus\";\nexport const OUTCOME_ATTRIBUTE_EXPECTATION_KEY = \"expectation\";\nexport const OUTCOME_ATTRIBUTE_METHOD_KEY = \"method\";\nexport const OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY = \"observedAt\";\nexport const OUTCOME_LEGACY_EVENT = \"outcome_observed\";\n","import type { TraceSafetyOptions } from \"../trace-event-safety.js\";\nimport { prepareMetadataForDisk } from \"../trace-event-safety.js\";\nimport type { OutcomeObservedEvent } from \"../types.js\";\nimport {\n OBSERVED_OUTCOME_METHODS,\n OBSERVED_OUTCOME_STATUSES,\n type ObserveOutcomeOptions,\n type ObservedOutcomeMethod,\n type ObservedOutcomeStatus,\n} from \"./types.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction normalizeName(name: string): string {\n const trimmed = name.trim();\n if (trimmed === \"\") {\n throw new Error(\"observeOutcome requires a non-empty name.\");\n }\n return trimmed.slice(0, 100);\n}\n\nfunction normalizeExpectation(value: string): string {\n const trimmed = value.trim();\n if (trimmed === \"\") {\n throw new Error(\"observeOutcome requires a non-empty expectation.\");\n }\n return trimmed.slice(0, 500);\n}\n\nexport function parseObservedOutcomeStatus(value: string): ObservedOutcomeStatus {\n const trimmed = value.trim().toLowerCase();\n if ((OBSERVED_OUTCOME_STATUSES as readonly string[]).includes(trimmed)) {\n return trimmed as ObservedOutcomeStatus;\n }\n throw new Error(\n `Unsupported observation status \"${value}\". Use passed, failed, unknown, or skipped.`,\n );\n}\n\nfunction parseMethod(value: string | undefined): ObservedOutcomeMethod | undefined {\n if (value === undefined || value.trim() === \"\") return undefined;\n const trimmed = value.trim().toLowerCase();\n if ((OBSERVED_OUTCOME_METHODS as readonly string[]).includes(trimmed)) {\n return trimmed as ObservedOutcomeMethod;\n }\n throw new Error(`Unsupported observation method \"${value}\".`);\n}\n\nfunction parseObservedAt(value: number | string | undefined, fallback: number): number {\n if (value === undefined) return fallback;\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\") {\n const parsed = Date.parse(value);\n if (Number.isFinite(parsed)) return parsed;\n }\n return fallback;\n}\n\nexport function normalizeObserveOutcomeInput(\n name: string,\n options: ObserveOutcomeOptions,\n nowMs: number = Date.now(),\n): {\n name: string;\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt: number;\n} {\n return {\n name: normalizeName(name),\n expectation: normalizeExpectation(options.expectation),\n status: options.status,\n ...(options.method !== undefined ? { method: parseMethod(options.method) } : {}),\n ...(options.actual !== undefined ? { actual: options.actual } : {}),\n ...(options.evidence !== undefined ? { evidence: options.evidence } : {}),\n observedAt: parseObservedAt(options.observedAt, nowMs),\n };\n}\n\nfunction boundPayload(\n value: unknown,\n opts: TraceSafetyOptions,\n): unknown {\n if (value === undefined) return undefined;\n if (!isRecord(value) && !Array.isArray(value)) {\n if (typeof value === \"string\") {\n return value.length > opts.maxMetadataValueLength\n ? `${value.slice(0, opts.maxMetadataValueLength)}…`\n : value;\n }\n return value;\n }\n return prepareMetadataForDisk(\n isRecord(value) ? value : { items: value },\n opts,\n );\n}\n\nexport function prepareOutcomeEventForDisk(\n event: OutcomeObservedEvent,\n opts: TraceSafetyOptions,\n): OutcomeObservedEvent {\n const actual = boundPayload(event.actual, opts);\n const evidence = boundPayload(event.evidence, opts);\n const next: OutcomeObservedEvent = {\n ...event,\n ...(actual !== undefined ? { actual } : {}),\n ...(evidence !== undefined ? { evidence } : {}),\n };\n if (\"actual\" in event && actual === undefined) {\n const { actual: _a, ...rest } = next;\n return rest;\n }\n if (\"evidence\" in event && evidence === undefined) {\n const { evidence: _e, ...rest } = next;\n return rest;\n }\n return next;\n}\n","import type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport type { TraceEvent } from \"../types.js\";\nimport {\n OUTCOME_ATTRIBUTE_EXPECTATION_KEY,\n OUTCOME_ATTRIBUTE_METHOD_KEY,\n OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY,\n OUTCOME_ATTRIBUTE_STATUS_KEY,\n OUTCOME_LEGACY_EVENT,\n type ObservedOutcome,\n type ObservedOutcomeMethod,\n type ObservedOutcomeStatus,\n type ObservedOutcomeSummary,\n} from \"./types.js\";\nimport { parseObservedOutcomeStatus } from \"./validate.js\";\n\nfunction isOutcomeStatus(value: unknown): value is ObservedOutcomeStatus {\n return (\n value === \"passed\" ||\n value === \"failed\" ||\n value === \"unknown\" ||\n value === \"skipped\"\n );\n}\n\nfunction parseMethod(value: unknown): ObservedOutcomeMethod | undefined {\n if (typeof value !== \"string\" || value.trim() === \"\") return undefined;\n return value as ObservedOutcomeMethod;\n}\n\nfunction fromOutcomeObservedEvent(event: Extract<TraceEvent, { event: \"outcome_observed\" }>): ObservedOutcome {\n return {\n outcomeId: event.outcomeId,\n runId: event.runId,\n ...(event.parentId !== undefined ? { parentId: event.parentId } : {}),\n name: event.name,\n expectation: event.expectation,\n status: event.status,\n ...(event.method !== undefined ? { method: event.method } : {}),\n ...(event.actual !== undefined ? { actual: event.actual } : {}),\n ...(event.evidence !== undefined ? { evidence: event.evidence } : {}),\n observedAt: event.observedAt,\n };\n}\n\nfunction fromPersistedOutcome(event: PersistedInspectEvent): ObservedOutcome | undefined {\n if (event.kind !== \"OUTCOME\") return undefined;\n const attrs = event.attributes ?? {};\n const statusRaw = attrs[OUTCOME_ATTRIBUTE_STATUS_KEY];\n if (!isOutcomeStatus(statusRaw)) return undefined;\n const expectation =\n typeof attrs[OUTCOME_ATTRIBUTE_EXPECTATION_KEY] === \"string\"\n ? attrs[OUTCOME_ATTRIBUTE_EXPECTATION_KEY]\n : event.name;\n const observedAtRaw = attrs[OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY];\n const observedAt =\n typeof observedAtRaw === \"string\"\n ? Date.parse(observedAtRaw)\n : typeof observedAtRaw === \"number\" && Number.isFinite(observedAtRaw)\n ? observedAtRaw\n : Date.parse(event.timestamp);\n return {\n outcomeId: event.eventId,\n runId: event.runId,\n ...(event.parentId !== undefined ? { parentId: event.parentId } : {}),\n name: event.name,\n expectation,\n status: statusRaw,\n ...(parseMethod(attrs[OUTCOME_ATTRIBUTE_METHOD_KEY]) !== undefined\n ? { method: parseMethod(attrs[OUTCOME_ATTRIBUTE_METHOD_KEY]) }\n : {}),\n ...(event.outputSummary !== undefined ? { actual: event.outputSummary } : {}),\n ...(attrs.evidence !== undefined ? { evidence: attrs.evidence } : {}),\n observedAt: Number.isFinite(observedAt) ? observedAt : Date.parse(event.timestamp),\n };\n}\n\nexport function extractOutcomesFromTraceEvents(events: readonly TraceEvent[]): ObservedOutcome[] {\n const out: ObservedOutcome[] = [];\n for (const event of events) {\n if (event.event === OUTCOME_LEGACY_EVENT) {\n out.push(fromOutcomeObservedEvent(event as Extract<TraceEvent, { event: \"outcome_observed\" }>));\n }\n }\n return out.sort((a, b) => a.observedAt - b.observedAt || a.name.localeCompare(b.name));\n}\n\nexport function extractOutcomesFromPersistedEvents(\n events: readonly PersistedInspectEvent[],\n): ObservedOutcome[] {\n const out: ObservedOutcome[] = [];\n for (const event of events) {\n const outcome = fromPersistedOutcome(event);\n if (outcome) out.push(outcome);\n }\n return out.sort((a, b) => a.observedAt - b.observedAt || a.name.localeCompare(b.name));\n}\n\nexport function summarizeObservedOutcomes(outcomes: readonly ObservedOutcome[]): ObservedOutcomeSummary {\n const summary: ObservedOutcomeSummary = {\n total: outcomes.length,\n passed: 0,\n failed: 0,\n unknown: 0,\n skipped: 0,\n outcomes: [...outcomes],\n };\n for (const outcome of outcomes) {\n summary[outcome.status] += 1;\n }\n return summary;\n}\n\nexport function outcomesMatchingStatus(\n outcomes: readonly ObservedOutcome[],\n statuses: readonly ObservedOutcomeStatus[],\n): ObservedOutcome[] {\n const set = new Set(statuses);\n return outcomes.filter((outcome) => set.has(outcome.status));\n}\n\nexport function parseObservationFilter(value: string | undefined): ObservedOutcomeStatus | undefined {\n if (value === undefined || value.trim() === \"\") return undefined;\n return parseObservedOutcomeStatus(value);\n}\n","import type { ObservedOutcome, ObservedOutcomeSummary } from \"./types.js\";\n\nfunction formatPayload(value: unknown): string {\n if (value === undefined) return \"\";\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function renderObservedOutcomesMarkdown(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"No observed outcomes recorded for this run.\";\n }\n const lines = [\n `Total: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})`,\n \"\",\n \"| Name | Status | Expectation | Method |\",\n \"| --- | --- | --- | --- |\",\n ];\n for (const outcome of summary.outcomes) {\n lines.push(\n `| ${outcome.name} | ${outcome.status} | ${outcome.expectation.replace(/\\|/g, \"\\\\|\")} | ${outcome.method ?? \"-\"} |`,\n );\n }\n return lines.join(\"\\n\");\n}\n\nexport function renderObservedOutcomesText(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"No observed outcomes recorded for this run.\";\n }\n const lines = [\n `Observed outcomes: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})`,\n ];\n for (const outcome of summary.outcomes) {\n const evidence = formatPayload(outcome.evidence);\n const suffix = evidence ? ` evidence=${evidence}` : \"\";\n lines.push(\n `- ${outcome.name} [${outcome.status}] ${outcome.expectation}${suffix}`,\n );\n }\n return lines.join(\"\\n\");\n}\n\nexport function renderObservedOutcomesHtml(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"<p>No observed outcomes recorded for this run.</p>\";\n }\n const rows = summary.outcomes\n .map((outcome: ObservedOutcome) => {\n const esc = (v: string) =>\n v.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n return `<tr><td>${esc(outcome.name)}</td><td>${esc(outcome.status)}</td><td>${esc(outcome.expectation)}</td><td>${esc(outcome.method ?? \"-\")}</td></tr>`;\n })\n .join(\"\");\n return `<p>Total: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})</p><table><thead><tr><th>Name</th><th>Status</th><th>Expectation</th><th>Method</th></tr></thead><tbody>${rows}</tbody></table>`;\n}\n","import type { StepCompletedEvent, StepStartedEvent, TraceEvent } from \"./types.js\";\nimport { extractMetadata } from \"./trace-metadata.js\";\nimport { filterTraces as filterTraceMetas } from \"./trace-filter.js\";\nimport { readTraceEventsFromFile } from \"./storage.js\";\nimport type { TraceMetadata, StepType } from \"./types.js\";\nimport { parseDuration } from \"./utils/duration.js\";\nimport {\n extractOutcomesFromTraceEvents,\n parseObservationFilter,\n} from \"./outcomes/index.js\";\n\nexport interface TraceSearchOptions {\n traceDir: string;\n since?: string;\n status?: \"success\" | \"error\" | \"running\" | \"unknown\";\n kind?: string;\n type?: string;\n name?: string;\n tool?: string;\n duration?: string;\n limit?: number;\n session?: string;\n correlateGroup?: boolean;\n observation?: string;\n}\n\nexport interface TraceSearchResult {\n runId: string;\n runName?: string;\n runStatus: string;\n stepId?: string;\n stepName?: string;\n stepType?: string;\n timestamp?: number;\n durationMs?: number;\n matchReason: string;\n matchedFields: string[];\n filePath: string;\n sessionId?: string;\n}\n\nexport interface ParsedDurationFilter {\n op: \">\" | \">=\" | \"<\" | \"<=\";\n ms: number;\n}\n\nexport function parseDurationFilter(expr: string): ParsedDurationFilter {\n const raw = expr.trim();\n const m = raw.match(/^(>=|<=|>|<)\\s*(.+)$/);\n if (!m) {\n throw new Error(\n `Invalid --duration \"${expr}\". Use forms like >5s, >=500ms, <2m.`,\n );\n }\n const op = m[1] as ParsedDurationFilter[\"op\"];\n const ms = parseDuration(m[2].trim());\n return { op, ms };\n}\n\nfunction durationMatches(\n valueMs: number | undefined,\n filter: ParsedDurationFilter,\n): boolean {\n if (valueMs === undefined || !Number.isFinite(valueMs)) return false;\n switch (filter.op) {\n case \">\":\n return valueMs > filter.ms;\n case \">=\":\n return valueMs >= filter.ms;\n case \"<\":\n return valueMs < filter.ms;\n case \"<=\":\n return valueMs <= filter.ms;\n default:\n return false;\n }\n}\n\nfunction normalizeStepTypeFilter(kind?: string, type?: string): string | undefined {\n const v = (kind ?? type)?.trim().toLowerCase();\n return v && v !== \"\" ? v : undefined;\n}\n\nfunction nameMatches(hay: string, needle: string): boolean {\n return hay.toLowerCase().includes(needle.toLowerCase());\n}\n\nexport async function searchTraces(\n metas: TraceMetadata[],\n options: TraceSearchOptions,\n): Promise<TraceSearchResult[]> {\n let filtered = filterTraceMetas(metas, { since: options.since });\n const stepTypeFilter = normalizeStepTypeFilter(options.kind, options.type);\n const nameQuery = options.name?.trim();\n const toolQuery = options.tool?.trim();\n let durationFilter: ParsedDurationFilter | undefined;\n if (options.duration) {\n durationFilter = parseDurationFilter(options.duration);\n }\n const limit = options.limit ?? 50;\n const sessionId = options.session?.trim();\n const observationStatus = parseObservationFilter(options.observation);\n\n const hasContentFilter = Boolean(\n options.status ||\n stepTypeFilter ||\n nameQuery ||\n toolQuery ||\n durationFilter ||\n observationStatus,\n );\n\n const results: TraceSearchResult[] = [];\n const sessionLabel = sessionId && sessionId !== \"\" ? sessionId : undefined;\n\n if (!hasContentFilter) {\n for (const m of filtered) {\n results.push({\n runId: m.runId,\n runName: m.name,\n runStatus: m.status,\n timestamp: m.startedAt,\n durationMs: m.durationMs,\n matchReason: sessionLabel\n ? `trace in session ${sessionLabel}`\n : \"trace in directory\",\n matchedFields: sessionLabel ? [\"run\", \"session\"] : [\"run\"],\n filePath: m.filePath,\n ...(sessionLabel ? { sessionId: sessionLabel } : {}),\n });\n }\n return results.slice(0, limit);\n }\n\n for (const m of filtered) {\n if (options.status && m.status !== options.status) continue;\n\n let events: TraceEvent[] = [];\n try {\n events = await readTraceEventsFromFile(m.filePath);\n } catch {\n continue;\n }\n if (events.length === 0) continue;\n\n const runMatches = matchRunLevel(m, {\n stepTypeFilter,\n nameQuery,\n toolQuery,\n durationFilter,\n statusFilter: options.status,\n });\n results.push(...runMatches);\n\n const stepMatches = matchStepLevel(m, events, {\n stepTypeFilter,\n nameQuery,\n toolQuery,\n durationFilter,\n statusFilter: options.status,\n });\n results.push(...stepMatches);\n\n if (observationStatus) {\n const outcomes = extractOutcomesFromTraceEvents(events);\n const matched = outcomes.filter((outcome) => outcome.status === observationStatus);\n for (const outcome of matched) {\n results.push({\n runId: m.runId,\n runName: m.name,\n runStatus: m.status,\n stepName: outcome.name,\n timestamp: outcome.observedAt,\n matchReason: `observation status=${outcome.status}`,\n matchedFields: [\"outcome.status\", \"outcome.name\"],\n filePath: m.filePath,\n });\n }\n }\n }\n\n results.sort((a, b) => {\n const ta = a.timestamp ?? 0;\n const tb = b.timestamp ?? 0;\n if (ta !== tb) return ta - tb;\n const runCmp = a.runId.localeCompare(b.runId);\n if (runCmp !== 0) return runCmp;\n return (a.stepName ?? \"\").localeCompare(b.stepName ?? \"\");\n });\n\n return results.slice(0, limit);\n}\n\nfunction matchRunLevel(\n m: TraceMetadata,\n opts: {\n stepTypeFilter?: string;\n nameQuery?: string;\n toolQuery?: string;\n durationFilter?: ParsedDurationFilter;\n statusFilter?: string;\n },\n): TraceSearchResult[] {\n if (opts.stepTypeFilter || opts.toolQuery) return [];\n const out: TraceSearchResult[] = [];\n const fields: string[] = [];\n\n if (opts.statusFilter && m.status === opts.statusFilter) {\n fields.push(\"run.status\");\n }\n if (opts.nameQuery && nameMatches(m.name ?? m.runId, opts.nameQuery)) {\n fields.push(\"run.name\");\n }\n if (\n opts.durationFilter &&\n durationMatches(m.durationMs, opts.durationFilter)\n ) {\n fields.push(\"run.durationMs\");\n }\n\n if (fields.length === 0) return out;\n\n out.push({\n runId: m.runId,\n runName: m.name,\n runStatus: m.status,\n timestamp: m.startedAt,\n durationMs: m.durationMs,\n matchReason: `run match: ${fields.join(\", \")}`,\n matchedFields: fields,\n filePath: m.filePath,\n });\n return out;\n}\n\nfunction matchStepLevel(\n m: TraceMetadata,\n events: TraceEvent[],\n opts: {\n stepTypeFilter?: string;\n nameQuery?: string;\n toolQuery?: string;\n durationFilter?: ParsedDurationFilter;\n statusFilter?: string;\n },\n): TraceSearchResult[] {\n const out: TraceSearchResult[] = [];\n const started = new Map<string, StepStartedEvent>();\n\n for (const e of events) {\n if (e.event === \"step_started\") {\n started.set((e as StepStartedEvent).stepId, e as StepStartedEvent);\n }\n }\n\n for (const e of events) {\n if (e.event !== \"step_completed\") continue;\n const c = e as StepCompletedEvent;\n const s = started.get(c.stepId);\n if (!s) continue;\n\n const fields: string[] = [];\n const stepType = s.type as StepType;\n\n if (opts.stepTypeFilter && stepType !== opts.stepTypeFilter) {\n continue;\n }\n\n const hasStepFilters =\n opts.stepTypeFilter ||\n opts.nameQuery ||\n opts.toolQuery ||\n opts.durationFilter ||\n opts.statusFilter === \"error\" ||\n opts.statusFilter === \"success\";\n\n if (!hasStepFilters) continue;\n\n if (opts.statusFilter === \"error\" && c.status === \"error\") {\n fields.push(\"step.status\");\n } else if (opts.statusFilter === \"success\" && c.status === \"success\") {\n fields.push(\"step.status\");\n } else if (opts.statusFilter === \"error\" || opts.statusFilter === \"success\") {\n continue;\n }\n\n if (opts.nameQuery) {\n if (!nameMatches(s.name, opts.nameQuery)) continue;\n fields.push(\"step.name\");\n }\n if (opts.toolQuery) {\n const toolName =\n typeof s.metadata?.toolName === \"string\"\n ? s.metadata.toolName\n : s.name;\n if (!nameMatches(toolName, opts.toolQuery)) continue;\n fields.push(\"step.tool\");\n }\n if (opts.durationFilter) {\n if (!durationMatches(c.durationMs, opts.durationFilter)) continue;\n fields.push(\"step.durationMs\");\n }\n if (opts.stepTypeFilter) {\n fields.push(\"step.type\");\n }\n\n if (fields.length === 0) continue;\n\n out.push({\n runId: m.runId,\n runName: m.name,\n runStatus: m.status,\n stepId: c.stepId,\n stepName: s.name,\n stepType,\n timestamp: s.startTime ?? s.timestamp,\n durationMs: c.durationMs,\n matchReason: `step match: ${fields.join(\", \")}`,\n matchedFields: fields,\n filePath: m.filePath,\n });\n }\n\n return out;\n}\n\nexport async function loadTraceMetadataList(\n _traceDir: string,\n fileNames: string[],\n getPath: (fileName: string) => string,\n): Promise<TraceMetadata[]> {\n const metas: TraceMetadata[] = [];\n for (const fileName of fileNames) {\n try {\n const filePath = getPath(fileName);\n const meta = await extractMetadata(filePath);\n metas.push(meta);\n } catch {\n /* skip */\n }\n }\n return metas;\n}\n","import type {\n ActivityEntry,\n ActivitySummary,\n BuildActivitySummaryOptions,\n SessionIndex,\n SessionStatus,\n SessionSummary,\n} from \"./types.js\";\n\nfunction statusLine(session: SessionSummary): string {\n const name =\n session.workflowId ??\n session.correlationId ??\n session.sessionId;\n const status = session.status;\n if (session.lastError) {\n return `${name} session ${session.sessionId} failed at ${session.lastError.message}`;\n }\n if (session.observationSummary) {\n return `${name} session ${session.sessionId} ${status} with observation warning`;\n }\n return `${name} session ${session.sessionId} ${status}`;\n}\n\nfunction parseSinceMs(since: string | undefined, nowMs: number): number {\n if (!since || since.trim() === \"\") return nowMs - 7 * 86_400_000;\n const trimmed = since.trim().toLowerCase();\n const match = /^(\\d+)([smhd])$/.exec(trimmed);\n if (!match) return nowMs - 7 * 86_400_000;\n const amount = Number.parseInt(match[1]!, 10);\n const unit = match[2];\n const mult =\n unit === \"s\" ? 1000 : unit === \"m\" ? 60_000 : unit === \"h\" ? 3_600_000 : 86_400_000;\n return nowMs - amount * mult;\n}\n\nfunction isFailed(status: SessionStatus): boolean {\n return status === \"error\";\n}\n\nfunction isStale(status: SessionStatus): boolean {\n return status === \"stale\";\n}\n\nfunction guardrailWarnings(session: SessionSummary): number {\n const summary = session.checkSummary;\n if (!summary) return 0;\n return summary.warn;\n}\n\n/**\n * Builds a deterministic activity summary from a session index (v4.2).\n * Read-only; does not mutate traces or invent relationships.\n */\nexport function buildActivitySummary(\n index: SessionIndex,\n options: BuildActivitySummaryOptions = {},\n): ActivitySummary {\n const nowMs = options.nowMs ?? Date.now();\n const sinceMs = parseSinceMs(options.since, nowMs);\n const sinceIso = new Date(sinceMs).toISOString();\n const limit =\n Number.isInteger(options.limit) && options.limit! > 0 ? options.limit! : 20;\n\n const inWindow = index.sessions.filter((session) => {\n const activityMs = Date.parse(session.lastActivity);\n return Number.isFinite(activityMs) && activityMs >= sinceMs;\n });\n\n const entries: ActivityEntry[] = [...inWindow]\n .sort((a, b) => Date.parse(b.lastActivity) - Date.parse(a.lastActivity))\n .slice(0, limit)\n .map((session) => ({\n sessionId: session.sessionId,\n status: session.status,\n summary: statusLine(session),\n lastActivity: session.lastActivity,\n runCount: session.runIds.length,\n }));\n\n let failed = 0;\n let stale = 0;\n let guardrailWarningTotal = 0;\n for (const session of inWindow) {\n if (isFailed(session.status)) failed += 1;\n if (isStale(session.status)) stale += 1;\n guardrailWarningTotal += guardrailWarnings(session);\n }\n\n return {\n since: sinceIso,\n sessions: inWindow.length,\n failed,\n stale,\n guardrailWarnings: guardrailWarningTotal,\n entries,\n };\n}\n\n/** Renders a human activity summary for terminal output. */\nexport function renderActivitySummaryHuman(\n summary: ActivitySummary,\n options?: { nowMs?: number },\n): string {\n const lines: string[] = [];\n const nowMs = options?.nowMs ?? Date.now();\n const todayStart = new Date(nowMs);\n todayStart.setHours(0, 0, 0, 0);\n const todayMs = todayStart.getTime();\n\n const today = summary.entries.filter(\n (entry) => Date.parse(entry.lastActivity) >= todayMs,\n );\n if (today.length > 0) {\n lines.push(\"Today\");\n for (const entry of today) {\n lines.push(` ${entry.summary}`);\n }\n lines.push(\"\");\n }\n\n lines.push(`Since ${summary.since}`);\n lines.push(` ${summary.sessions} sessions`);\n lines.push(` ${summary.failed} failed`);\n lines.push(` ${summary.stale} stale`);\n lines.push(` ${summary.guardrailWarnings} guardrail warnings`);\n\n return lines.join(\"\\n\");\n}\n","import { readTraceEventsFromFile } from \"../storage.js\";\nimport type { TraceMetadata } from \"../types.js\";\nimport type { SessionRunRecord } from \"./types.js\";\n\n/** Enriches trace metadata with run_started metadata for session indexing. */\nexport async function enrichSessionRunRecord(\n meta: TraceMetadata,\n): Promise<SessionRunRecord> {\n let metadata: Record<string, unknown> | undefined;\n try {\n const events = await readTraceEventsFromFile(meta.filePath);\n for (const event of events) {\n if (event.event !== \"run_started\") continue;\n if (event.metadata && typeof event.metadata === \"object\") {\n metadata = event.metadata as Record<string, unknown>;\n }\n break;\n }\n } catch {\n /* skip */\n }\n\n return {\n runId: meta.runId,\n name: meta.name,\n status: meta.status,\n startedAt: meta.startedAt,\n endedAt: meta.endedAt,\n durationMs: meta.durationMs,\n filePath: meta.filePath,\n metadata,\n };\n}\n\n/** Builds session run records from extracted trace metadata rows. */\nexport async function loadSessionRunRecords(\n metas: readonly TraceMetadata[],\n): Promise<SessionRunRecord[]> {\n const out: SessionRunRecord[] = [];\n for (const meta of metas) {\n out.push(await enrichSessionRunRecord(meta));\n }\n return out;\n}\n","import type { SessionWorkflowMetadata } from \"./types.js\";\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim() !== \"\";\n}\n\nfunction finitePositiveInt(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 1) {\n return undefined;\n }\n return Math.trunc(value);\n}\n\n/** Extracts session/workflow metadata from a run metadata or attributes bag. */\nexport function extractSessionWorkflowMetadata(\n record: Record<string, unknown> | undefined,\n): SessionWorkflowMetadata | undefined {\n if (!record) return undefined;\n\n const out: SessionWorkflowMetadata = {};\n let found = false;\n\n const assignString = (\n key: Exclude<keyof SessionWorkflowMetadata, \"attempt\">,\n value: unknown,\n ): void => {\n if (isNonEmptyString(value)) {\n out[key] = value.trim();\n found = true;\n }\n };\n\n assignString(\"sessionId\", record.sessionId);\n assignString(\"conversationId\", record.conversationId);\n assignString(\"groupId\", record.groupId);\n assignString(\"parentGroupId\", record.parentGroupId);\n assignString(\"retryOf\", record.retryOf);\n assignString(\"retryReason\", record.retryReason);\n assignString(\"handoffFrom\", record.handoffFrom);\n assignString(\"handoffTo\", record.handoffTo);\n assignString(\"subAgentId\", record.subAgentId);\n assignString(\"subAgentName\", record.subAgentName);\n assignString(\"jobId\", record.jobId);\n assignString(\"queueName\", record.queueName);\n assignString(\"workflowName\", record.workflowName);\n assignString(\"workflowStep\", record.workflowStep);\n assignString(\"toolCallId\", record.toolCallId);\n assignString(\"mcpToolCallId\", record.mcpToolCallId);\n assignString(\"linkedStepId\", record.linkedStepId);\n assignString(\"correlationId\", record.correlationId);\n assignString(\"requestId\", record.requestId);\n assignString(\"decisionId\", record.decisionId);\n\n const attempt = finitePositiveInt(record.attempt);\n if (attempt !== undefined) {\n out.attempt = attempt;\n found = true;\n }\n\n return found ? out : undefined;\n}\n\nexport function sessionKeyForRun(\n meta: SessionWorkflowMetadata | undefined,\n options?: { correlateByGroupId?: boolean },\n): string | undefined {\n if (meta?.sessionId) return meta.sessionId;\n if (options?.correlateByGroupId && meta?.groupId) {\n return `group:${meta.groupId}`;\n }\n return undefined;\n}\n","import { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type {\n EnrichSessionSummaryOptions,\n SessionCheckSummary,\n SessionLastError,\n SessionRunRecord,\n SessionStatus,\n SessionSummary,\n} from \"./types.js\";\n\nconst DEFAULT_STALE_THRESHOLD_MS = 86_400_000;\n\nconst EXPLICIT_STATUS_PRIORITY: Record<string, number> = {\n error: 5,\n waiting_input: 4,\n idle: 3,\n stale: 2,\n completed: 1,\n};\n\nconst EXPLICIT_SESSION_STATUSES = new Set<string>([\n \"running\",\n \"waiting_input\",\n \"idle\",\n \"completed\",\n \"error\",\n \"stale\",\n \"unknown\",\n]);\n\nfunction isExplicitSessionStatus(value: unknown): value is SessionStatus {\n return typeof value === \"string\" && EXPLICIT_SESSION_STATUSES.has(value);\n}\n\nfunction activityMs(run: SessionRunRecord): number {\n return run.endedAt ?? run.startedAt ?? 0;\n}\n\nfunction latestActivityMs(runs: readonly SessionRunRecord[]): number {\n let latest = 0;\n for (const run of runs) {\n const ms = activityMs(run);\n if (ms > latest) latest = ms;\n }\n return latest;\n}\n\nfunction earliestStart(runs: readonly SessionRunRecord[]): number | undefined {\n let earliest: number | undefined;\n for (const run of runs) {\n if (run.startedAt === undefined) continue;\n if (earliest === undefined || run.startedAt < earliest) {\n earliest = run.startedAt;\n }\n }\n return earliest;\n}\n\nfunction latestEndWhenAllEnded(runs: readonly SessionRunRecord[]): number | undefined {\n if (runs.length === 0) return undefined;\n let latest: number | undefined;\n for (const run of runs) {\n if (run.endedAt === undefined) return undefined;\n if (latest === undefined || run.endedAt > latest) latest = run.endedAt;\n }\n return latest;\n}\n\nfunction pickExplicitStatus(runs: readonly SessionRunRecord[]): SessionStatus | undefined {\n let best: SessionStatus | undefined;\n let bestPriority = 0;\n for (const run of runs) {\n const raw = run.metadata?.sessionStatus;\n if (!isExplicitSessionStatus(raw)) continue;\n const priority = EXPLICIT_STATUS_PRIORITY[raw] ?? 0;\n if (priority > bestPriority) {\n bestPriority = priority;\n best = raw;\n }\n }\n return best;\n}\n\nfunction deriveLastError(runs: readonly SessionRunRecord[]): SessionLastError | undefined {\n const errorRuns = runs\n .filter((run) => run.status === \"error\")\n .sort((a, b) => activityMs(b) - activityMs(a));\n const latest = errorRuns[0];\n if (!latest) return undefined;\n\n const meta = latest.metadata ?? {};\n const message =\n typeof meta.errorMessage === \"string\" && meta.errorMessage.trim() !== \"\"\n ? meta.errorMessage.trim()\n : (latest.name ?? latest.runId);\n const code =\n typeof meta.errorCode === \"string\" && meta.errorCode.trim() !== \"\"\n ? meta.errorCode.trim()\n : undefined;\n\n return { runId: latest.runId, message, code };\n}\n\nfunction deriveCheckSummary(\n runs: readonly SessionRunRecord[],\n): SessionCheckSummary | undefined {\n let pass = 0;\n let fail = 0;\n let warn = 0;\n let found = false;\n\n for (const run of runs) {\n const summary = run.metadata?.checkSummary;\n if (!summary || typeof summary !== \"object\") continue;\n const record = summary as Record<string, unknown>;\n if (typeof record.pass === \"number\") {\n pass += record.pass;\n found = true;\n }\n if (typeof record.fail === \"number\") {\n fail += record.fail;\n found = true;\n }\n if (typeof record.warn === \"number\") {\n warn += record.warn;\n found = true;\n }\n }\n\n return found ? { pass, fail, warn } : undefined;\n}\n\nfunction deriveObservationSummary(runs: readonly SessionRunRecord[]): string | undefined {\n for (const run of [...runs].sort((a, b) => activityMs(b) - activityMs(a))) {\n const value = run.metadata?.observationSummary;\n if (typeof value === \"string\" && value.trim() !== \"\") {\n return value.trim();\n }\n }\n return undefined;\n}\n\n/** Derives session status from run records per the v4.2 RFC (no timestamp-only causality). */\nexport function deriveSessionStatus(\n runs: readonly SessionRunRecord[],\n options: EnrichSessionSummaryOptions = {},\n): SessionStatus {\n if (runs.length === 0) return \"unknown\";\n\n if (runs.some((run) => run.status === \"running\")) return \"running\";\n\n const explicit = pickExplicitStatus(runs);\n if (explicit && explicit !== \"running\") return explicit;\n\n if (runs.some((run) => run.status === \"error\")) return \"error\";\n\n if (runs.every((run) => run.status === \"success\")) return \"completed\";\n\n const nowMs = options.nowMs ?? Date.now();\n const staleThresholdMs = options.staleThresholdMs ?? DEFAULT_STALE_THRESHOLD_MS;\n const lastMs = latestActivityMs(runs);\n if (lastMs > 0 && nowMs - lastMs > staleThresholdMs) return \"stale\";\n\n return \"unknown\";\n}\n\n/**\n * Enriches a session summary with v4.2 derived fields (status, timing, errors).\n * Pure function; does not read trace files.\n */\nexport function enrichSessionSummary(\n summary: Omit<\n SessionSummary,\n | \"status\"\n | \"lastActivity\"\n | \"retryCount\"\n | \"startedAt\"\n | \"endedAt\"\n | \"durationMs\"\n | \"correlationId\"\n | \"jobId\"\n | \"workflowId\"\n | \"lastError\"\n | \"observationSummary\"\n | \"checkSummary\"\n >,\n runs: readonly SessionRunRecord[],\n options: EnrichSessionSummaryOptions = {},\n): SessionSummary {\n const sessionRuns = runs\n .filter((run) => summary.runIds.includes(run.runId))\n .sort((a, b) => a.runId.localeCompare(b.runId));\n\n const startedAt = earliestStart(sessionRuns);\n const endedAt = latestEndWhenAllEnded(sessionRuns);\n const durationMs =\n startedAt !== undefined && endedAt !== undefined ? endedAt - startedAt : undefined;\n\n let correlationId: string | undefined;\n let jobId: string | undefined;\n let workflowId: string | undefined;\n for (const run of sessionRuns) {\n const meta = extractSessionWorkflowMetadata(run.metadata);\n if (!correlationId && meta?.correlationId) correlationId = meta.correlationId;\n if (!jobId && meta?.jobId) jobId = meta.jobId;\n if (!workflowId && meta?.workflowName) workflowId = meta.workflowName;\n else if (!workflowId && meta?.workflowStep) workflowId = meta.workflowStep;\n }\n\n const lastMs = latestActivityMs(sessionRuns);\n const lastActivity =\n lastMs > 0 ? new Date(lastMs).toISOString() : new Date(0).toISOString();\n\n const retryCount = summary.retries.filter(\n (retry) => retry.retryOf !== undefined || (retry.attempt ?? 0) > 1,\n ).length;\n\n return {\n ...summary,\n status: deriveSessionStatus(sessionRuns, options),\n startedAt,\n endedAt,\n durationMs,\n correlationId,\n jobId,\n workflowId,\n lastError: deriveLastError(sessionRuns),\n lastActivity,\n retryCount,\n observationSummary: deriveObservationSummary(sessionRuns),\n checkSummary: deriveCheckSummary(sessionRuns),\n };\n}\n","import type {\n TraceCheckDiagnostic,\n TraceCheckFinding,\n TraceCheckResult,\n TraceCheckStatus,\n TraceCheckSummary,\n} from \"../checks/index.js\";\nimport type { SessionWarning } from \"./types.js\";\n\nexport interface TraceSessionCheckResult extends TraceCheckResult {\n scopeKind: \"session\" | \"group\";\n scopeLabel: string;\n runIds: string[];\n runResults: Array<{ runId: string; status: TraceCheckStatus }>;\n sessionWarnings?: SessionWarning[];\n}\n\nfunction emptySummary(): TraceCheckSummary {\n return { passed: 0, failed: 0, warnings: 0, errors: 0 };\n}\n\nfunction mergeSummary(\n target: TraceCheckSummary,\n source: TraceCheckSummary,\n): TraceCheckSummary {\n return {\n passed: target.passed + source.passed,\n failed: target.failed + source.failed,\n warnings: target.warnings + source.warnings,\n errors: target.errors + source.errors,\n };\n}\n\nfunction sessionDiagnostic(\n code: \"AI_CHECK_INVALID_ARGUMENTS\" | \"AI_CHECK_TRACE_UNREADABLE\",\n message: string,\n): TraceCheckDiagnostic {\n return { code, message, severity: \"error\" };\n}\n\n/** Aggregates per-run check results for a session or group scope. */\nexport function aggregateSessionCheckResults(\n perRun: readonly TraceCheckResult[],\n scope: {\n scopeKind: \"session\" | \"group\";\n scopeLabel: string;\n runIds: string[];\n sessionWarnings?: SessionWarning[];\n notFound?: boolean;\n empty?: boolean;\n },\n): TraceSessionCheckResult {\n if (scope.notFound) {\n return {\n ok: false,\n status: \"error\",\n format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n scopeKind: scope.scopeKind,\n scopeLabel: scope.scopeLabel,\n runIds: [],\n runResults: [],\n summary: { ...emptySummary(), errors: 1 },\n findings: [],\n diagnostics: [\n sessionDiagnostic(\n \"AI_CHECK_INVALID_ARGUMENTS\",\n `${scope.scopeKind} not found: ${scope.scopeLabel}`,\n ),\n ],\n ...(scope.sessionWarnings?.length\n ? { sessionWarnings: [...scope.sessionWarnings] }\n : {}),\n };\n }\n\n if (scope.empty || perRun.length === 0) {\n return {\n ok: false,\n status: \"error\",\n format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n scopeKind: scope.scopeKind,\n scopeLabel: scope.scopeLabel,\n runIds: scope.runIds,\n runResults: [],\n summary: { ...emptySummary(), errors: 1 },\n findings: [],\n diagnostics: [\n sessionDiagnostic(\n \"AI_CHECK_TRACE_UNREADABLE\",\n `No readable traces in ${scope.scopeKind}: ${scope.scopeLabel}`,\n ),\n ],\n ...(scope.sessionWarnings?.length\n ? { sessionWarnings: [...scope.sessionWarnings] }\n : {}),\n };\n }\n\n let summary = emptySummary();\n const findings: TraceCheckFinding[] = [];\n const diagnostics: TraceCheckDiagnostic[] = [];\n const runResults: Array<{ runId: string; status: TraceCheckStatus }> = [];\n\n for (const result of perRun) {\n summary = mergeSummary(summary, result.summary);\n findings.push(...result.findings);\n diagnostics.push(...result.diagnostics);\n if (result.runId) {\n runResults.push({ runId: result.runId, status: result.status });\n }\n }\n\n runResults.sort((a, b) => a.runId.localeCompare(b.runId));\n findings.sort((a, b) => {\n const runCmp = (a.evidence[0]?.runId ?? \"\").localeCompare(\n b.evidence[0]?.runId ?? \"\",\n );\n if (runCmp !== 0) return runCmp;\n return a.ruleId.localeCompare(b.ruleId);\n });\n\n const hasErrors = diagnostics.some((item) => item.severity === \"error\");\n const status: TraceCheckStatus = hasErrors\n ? \"error\"\n : summary.failed > 0\n ? \"fail\"\n : \"pass\";\n\n return {\n ok: status === \"pass\",\n status,\n format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n scopeKind: scope.scopeKind,\n scopeLabel: scope.scopeLabel,\n runIds: scope.runIds,\n runResults,\n summary,\n findings,\n diagnostics,\n ...(scope.sessionWarnings?.length\n ? { sessionWarnings: [...scope.sessionWarnings] }\n : {}),\n };\n}\n","import {\n extractSessionWorkflowMetadata,\n sessionKeyForRun,\n} from \"./metadata.js\";\nimport { enrichSessionSummary } from \"./status.js\";\nimport type {\n BuildSessionIndexOptions,\n CriticalPathStep,\n HandoffEdge,\n RetryLink,\n SessionGroup,\n SessionIndex,\n SessionRunRecord,\n SessionSummary,\n SessionWarning,\n SessionWorkflowMetadata,\n} from \"./types.js\";\n\nfunction compareRuns(a: SessionRunRecord, b: SessionRunRecord): number {\n const aStart = a.startedAt ?? 0;\n const bStart = b.startedAt ?? 0;\n if (aStart !== bStart) return aStart - bStart;\n return a.runId.localeCompare(b.runId);\n}\n\nfunction buildGroups(\n runIds: string[],\n metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n): SessionGroup[] {\n const byGroup = new Map<string, SessionGroup>();\n\n for (const runId of runIds) {\n const groupId = metaByRunId.get(runId)?.groupId;\n if (!groupId) continue;\n const existing = byGroup.get(groupId);\n if (existing) {\n existing.runIds.push(runId);\n } else {\n byGroup.set(groupId, {\n groupId,\n parentGroupId: metaByRunId.get(runId)?.parentGroupId,\n runIds: [runId],\n });\n }\n }\n\n return [...byGroup.values()].map((group) => ({\n ...group,\n runIds: [...group.runIds].sort((a, b) => a.localeCompare(b)),\n }));\n}\n\nfunction buildHandoffs(\n runIds: string[],\n metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n warnings: SessionWarning[],\n sessionId: string,\n): HandoffEdge[] {\n const edges: HandoffEdge[] = [];\n const seen = new Set<string>();\n\n const pushEdge = (edge: HandoffEdge): void => {\n const key = `${edge.from}->${edge.to}:${edge.confidence}`;\n if (seen.has(key)) return;\n seen.add(key);\n edges.push(edge);\n };\n\n for (const runId of runIds) {\n const meta = metaByRunId.get(runId);\n if (!meta) continue;\n\n if (meta.handoffFrom && meta.handoffTo) {\n pushEdge({\n from: meta.handoffFrom,\n to: meta.handoffTo,\n source: \"manual\",\n confidence: \"explicit\",\n });\n continue;\n }\n\n if (meta.handoffFrom) {\n pushEdge({\n from: meta.handoffFrom,\n to: runId,\n source: \"manual\",\n confidence: \"explicit\",\n });\n }\n\n if (meta.handoffTo) {\n pushEdge({\n from: runId,\n to: meta.handoffTo,\n source: \"manual\",\n confidence: \"explicit\",\n });\n }\n\n if (\n meta.subAgentId &&\n meta.parentGroupId &&\n !meta.handoffFrom &&\n !meta.handoffTo\n ) {\n pushEdge({\n from: meta.parentGroupId,\n to: meta.subAgentId,\n source: \"inferred\",\n confidence: \"correlated\",\n });\n warnings.push({\n code: \"ambiguous-handoff-endpoints\",\n message:\n \"Handoff inferred from parentGroupId and subAgentId without explicit handoffFrom/handoffTo.\",\n runId,\n sessionId,\n });\n }\n }\n\n return edges.sort((a, b) => {\n const from = a.from.localeCompare(b.from);\n if (from !== 0) return from;\n return a.to.localeCompare(b.to);\n });\n}\n\nfunction buildRetries(\n runIds: string[],\n metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n warnings: SessionWarning[],\n sessionId: string,\n): RetryLink[] {\n const retries: RetryLink[] = [];\n\n for (const runId of runIds) {\n const meta = metaByRunId.get(runId);\n if (!meta) continue;\n\n if (meta.retryOf) {\n retries.push({\n runId,\n retryOf: meta.retryOf,\n attempt: meta.attempt,\n source: \"manual\",\n confidence: \"explicit\",\n });\n continue;\n }\n\n if (meta.attempt !== undefined && meta.attempt > 1) {\n retries.push({\n runId,\n attempt: meta.attempt,\n source: \"inferred\",\n confidence: \"correlated\",\n });\n warnings.push({\n code: \"ambiguous-retry-link\",\n message: \"attempt > 1 without retryOf; retry link is correlated only.\",\n runId,\n sessionId,\n });\n }\n }\n\n return retries.sort((a, b) => a.runId.localeCompare(b.runId));\n}\n\nfunction buildCriticalPath(\n runs: SessionRunRecord[],\n handoffs: HandoffEdge[],\n): CriticalPathStep[] {\n const runById = new Map(runs.map((run) => [run.runId, run]));\n const explicitTargets = new Set(\n handoffs\n .filter((edge) => edge.confidence === \"explicit\")\n .map((edge) => edge.to),\n );\n const explicitSources = new Set(\n handoffs\n .filter((edge) => edge.confidence === \"explicit\")\n .map((edge) => edge.from),\n );\n\n const ordered = [...runs].sort(compareRuns);\n const path: CriticalPathStep[] = [];\n const visited = new Set<string>();\n\n const pushRun = (\n run: SessionRunRecord,\n confidence: CriticalPathStep[\"confidence\"],\n source: CriticalPathStep[\"source\"],\n ): void => {\n if (visited.has(run.runId)) return;\n visited.add(run.runId);\n path.push({\n runId: run.runId,\n name: run.name,\n startedAt: run.startedAt,\n durationMs: run.durationMs,\n confidence,\n source,\n });\n };\n\n for (const edge of handoffs) {\n if (edge.confidence !== \"explicit\") continue;\n const fromRun = [...runById.values()].find(\n (run) =>\n run.runId === edge.from ||\n metaRunIdMatches(run, edge.from, runById),\n );\n const toRun = [...runById.values()].find(\n (run) =>\n run.runId === edge.to || metaRunIdMatches(run, edge.to, runById),\n );\n if (fromRun) pushRun(fromRun, \"explicit\", \"manual\");\n if (toRun) pushRun(toRun, \"explicit\", \"manual\");\n }\n\n for (const run of ordered) {\n if (visited.has(run.runId)) continue;\n const confidence =\n explicitTargets.has(run.runId) || explicitSources.has(run.runId)\n ? \"explicit\"\n : \"correlated\";\n pushRun(run, confidence, confidence === \"explicit\" ? \"manual\" : \"inferred\");\n }\n\n return path;\n}\n\nfunction metaRunIdMatches(\n run: SessionRunRecord,\n token: string,\n runById: Map<string, SessionRunRecord>,\n): boolean {\n const meta = extractSessionWorkflowMetadata(run.metadata);\n return (\n meta?.subAgentId === token ||\n meta?.groupId === token ||\n runById.has(token)\n );\n}\n\n/**\n * Builds a deterministic session index from local run records and metadata.\n * Does not read files or infer causality from timestamps alone.\n */\nexport function buildSessionIndex(\n inputRuns: readonly SessionRunRecord[],\n options: BuildSessionIndexOptions = {},\n): SessionIndex {\n const warnings: SessionWarning[] = [];\n const runs = [...inputRuns].sort(compareRuns);\n const metaByRunId = new Map<string, SessionWorkflowMetadata | undefined>();\n\n for (const run of runs) {\n metaByRunId.set(run.runId, extractSessionWorkflowMetadata(run.metadata));\n }\n\n const sessionsByKey = new Map<string, SessionRunRecord[]>();\n const unscopedRunIds: string[] = [];\n\n for (const run of runs) {\n const meta = metaByRunId.get(run.runId);\n const key = sessionKeyForRun(meta, {\n correlateByGroupId: options.correlateByGroupId === true,\n });\n if (!key) {\n unscopedRunIds.push(run.runId);\n continue;\n }\n const bucket = sessionsByKey.get(key) ?? [];\n bucket.push(run);\n sessionsByKey.set(key, bucket);\n }\n\n const sessions: SessionSummary[] = [...sessionsByKey.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([sessionId, sessionRuns]) => {\n const runIds = sessionRuns.map((run) => run.runId).sort();\n const handoffs = buildHandoffs(runIds, metaByRunId, warnings, sessionId);\n const retries = buildRetries(runIds, metaByRunId, warnings, sessionId);\n const groups = buildGroups(runIds, metaByRunId);\n const criticalPath = buildCriticalPath(sessionRuns, handoffs);\n\n const confidences = new Set(handoffs.map((edge) => edge.confidence));\n if (confidences.has(\"explicit\") && confidences.has(\"correlated\")) {\n warnings.push({\n code: \"mixed-confidence-group\",\n message: \"Session aggregates explicit and correlated handoff edges.\",\n sessionId,\n });\n }\n\n return enrichSessionSummary(\n {\n sessionId,\n runIds,\n groups,\n handoffs,\n retries,\n criticalPath,\n },\n runs,\n {\n nowMs: options.nowMs,\n staleThresholdMs: options.staleThresholdMs,\n },\n );\n });\n\n if (sessions.length === 0 && runs.length > 0) {\n warnings.push({\n code: \"missing-session-id\",\n message: \"No sessionId (or correlated groupId) found on input runs.\",\n });\n }\n\n warnings.sort((a, b) => {\n const code = a.code.localeCompare(b.code);\n if (code !== 0) return code;\n return (a.runId ?? \"\").localeCompare(b.runId ?? \"\");\n });\n\n return {\n runs,\n sessions,\n unscopedRunIds: unscopedRunIds.sort(),\n warnings,\n };\n}\n\nexport { extractSessionWorkflowMetadata, sessionKeyForRun } from \"./metadata.js\";\nexport { deriveSessionStatus, enrichSessionSummary } from \"./status.js\";\nexport {\n buildActivitySummary,\n renderActivitySummaryHuman,\n} from \"./activity.js\";\nexport type {\n ActivityEntry,\n ActivitySummary,\n BuildActivitySummaryOptions,\n BuildSessionIndexOptions,\n CriticalPathStep,\n EnrichSessionSummaryOptions,\n HandoffEdge,\n RetryLink,\n SessionCheckSummary,\n SessionConfidence,\n SessionEdgeSource,\n SessionGroup,\n SessionIndex,\n SessionLastError,\n SessionRunRecord,\n SessionStatus,\n SessionSummary,\n SessionWarning,\n SessionWorkflowMetadata,\n SessionWorkflowKey,\n} from \"./types.js\";\nexport { SESSION_WORKFLOW_KEYS } from \"./types.js\";\nexport { enrichSessionRunRecord, loadSessionRunRecords } from \"./load.js\";\nexport {\n filterMetasBySessionScope,\n traceMetasToSessionRunRecords,\n type SessionScopeOptions,\n type SessionScopeResult,\n} from \"./scope.js\";\nexport {\n groupSessionCohorts,\n type GroupSessionCohortsOptions,\n type SessionCohort,\n type SessionCohortKind,\n} from \"./cohort.js\";\nexport {\n aggregateSessionCheckResults,\n type TraceSessionCheckResult,\n} from \"./checks.js\";\n","import type { TraceMetadata } from \"../types.js\";\nimport { buildSessionIndex } from \"./index.js\";\nimport { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type { SessionRunRecord, SessionWarning } from \"./types.js\";\n\nexport interface SessionScopeOptions {\n sessionId?: string;\n groupId?: string;\n correlateByGroupId?: boolean;\n}\n\nexport interface SessionScopeResult {\n metas: TraceMetadata[];\n scopeLabel: string;\n scopeKind: \"session\" | \"group\";\n runIds: string[];\n warnings: SessionWarning[];\n notFound: boolean;\n}\n\nfunction metaToSessionRunRecord(meta: TraceMetadata): SessionRunRecord {\n return {\n runId: meta.runId,\n name: meta.name,\n status: meta.status,\n startedAt: meta.startedAt,\n endedAt: meta.endedAt,\n durationMs: meta.durationMs,\n filePath: meta.filePath,\n metadata: undefined,\n };\n}\n\n/** Filters trace metadata rows to runs in a session or group scope. */\nexport function filterMetasBySessionScope(\n metas: readonly TraceMetadata[],\n records: readonly SessionRunRecord[],\n options: SessionScopeOptions,\n): SessionScopeResult {\n const sessionId = options.sessionId?.trim();\n const groupId = options.groupId?.trim();\n const warnings: SessionWarning[] = [];\n\n if (sessionId) {\n const index = buildSessionIndex(records, {\n correlateByGroupId: options.correlateByGroupId === true,\n });\n warnings.push(...index.warnings);\n const session = index.sessions.find((item) => item.sessionId === sessionId);\n if (!session) {\n return {\n metas: [],\n scopeLabel: sessionId,\n scopeKind: \"session\",\n runIds: [],\n warnings,\n notFound: true,\n };\n }\n const runIdSet = new Set(session.runIds);\n const filtered = metas.filter((meta) => runIdSet.has(meta.runId));\n return {\n metas: filtered,\n scopeLabel: sessionId,\n scopeKind: \"session\",\n runIds: session.runIds,\n warnings,\n notFound: false,\n };\n }\n\n if (groupId) {\n const runIds = records\n .filter((run) => extractSessionWorkflowMetadata(run.metadata)?.groupId === groupId)\n .map((run) => run.runId)\n .sort();\n if (runIds.length === 0) {\n return {\n metas: [],\n scopeLabel: groupId,\n scopeKind: \"group\",\n runIds: [],\n warnings,\n notFound: true,\n };\n }\n const runIdSet = new Set(runIds);\n return {\n metas: metas.filter((meta) => runIdSet.has(meta.runId)),\n scopeLabel: groupId,\n scopeKind: \"group\",\n runIds,\n warnings,\n notFound: false,\n };\n }\n\n return {\n metas: [...metas],\n scopeLabel: \"\",\n scopeKind: \"session\",\n runIds: [],\n warnings,\n notFound: false,\n };\n}\n\n/** Lightweight metadata rows for scope resolution when run_started metadata is absent. */\nexport function traceMetasToSessionRunRecords(\n metas: readonly TraceMetadata[],\n): SessionRunRecord[] {\n return metas.map(metaToSessionRunRecord);\n}\n","import { createReadStream } from \"node:fs\";\nimport { createInterface } from \"node:readline\";\n\nimport { isTraceEvent } from \"./types.js\";\n\nconst KNOWN_EVENTS = new Set([\n \"run_started\",\n \"run_completed\",\n \"step_started\",\n \"step_completed\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction safeParse(line: string): unknown | undefined {\n try {\n return JSON.parse(line) as unknown;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Safety check for cleanup workflows: returns true only when the file appears to be an AgentInspect trace.\n * This should be conservative: false positives are more dangerous than false negatives.\n */\nexport async function isAgentInspectTrace(filePath: string): Promise<boolean> {\n try {\n const rl = createInterface({\n input: createReadStream(filePath, { encoding: \"utf8\" }),\n crlfDelay: Infinity,\n });\n\n let checked = 0;\n for await (const line of rl) {\n const trimmed = line.trim();\n if (trimmed === \"\") continue;\n const parsed = safeParse(trimmed);\n if (!parsed) continue;\n if (!isRecord(parsed)) continue;\n\n checked += 1;\n\n // Strong signal: a valid TraceEvent (schemaVersion 0.1 + known shape).\n if (isTraceEvent(parsed)) return true;\n\n // Secondary signal: recognizable event name + runId.\n const ev = parsed.event;\n const runId = parsed.runId;\n if (typeof ev === \"string\" && KNOWN_EVENTS.has(ev) && typeof runId === \"string\") {\n return true;\n }\n\n // If we found valid JSON objects but none look like AgentInspect, keep scanning a bit.\n if (checked >= 20) break;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n","import { parseDuration } from \"../utils/duration.js\";\nimport type { SessionIndex, SessionRunRecord } from \"../sessions/types.js\";\nimport type { BundleResolveOptions, BundleResolveResult } from \"./types.js\";\n\nfunction parseSinceCutoff(since: string): number {\n const trimmed = since.trim();\n if (trimmed === \"\") {\n throw new Error(\"--since requires a non-empty duration (e.g. 24h, 7d).\");\n }\n return Date.now() - parseDuration(trimmed);\n}\n\nfunction runActivityMs(run: SessionRunRecord): number | undefined {\n if (run.startedAt !== undefined && Number.isFinite(run.startedAt)) return run.startedAt;\n if (run.endedAt !== undefined && Number.isFinite(run.endedAt)) return run.endedAt;\n return undefined;\n}\n\nfunction runsInSinceWindow(\n runs: readonly SessionRunRecord[],\n since: string,\n): string[] {\n const cutoff = parseSinceCutoff(since);\n const ids: string[] = [];\n for (const run of runs) {\n const activity = runActivityMs(run);\n if (activity !== undefined && activity >= cutoff) {\n ids.push(run.runId);\n }\n }\n return ids.sort((a, b) => a.localeCompare(b));\n}\n\nfunction findSession(index: SessionIndex, sessionId: string) {\n return index.sessions.find((session) => session.sessionId === sessionId);\n}\n\n/**\n * Resolves which run ids belong in a bundle.\n *\n * @throws when target mode is missing, ambiguous, or yields zero runs.\n */\nexport function resolveBundleRunIds(\n index: SessionIndex,\n runs: readonly SessionRunRecord[],\n options: BundleResolveOptions,\n): BundleResolveResult {\n const runId = options.runId?.trim();\n const sessionId = options.sessionId?.trim();\n const since = options.since?.trim();\n\n const modes = [runId ? 1 : 0, sessionId ? 1 : 0, since ? 1 : 0].reduce((a, b) => a + b, 0);\n if (modes === 0) {\n throw new Error(\n \"bundle requires a run id, --session <sessionId>, or --since <duration>.\",\n );\n }\n if (modes > 1) {\n throw new Error(\n \"bundle accepts only one target: a run id, --session, or --since (not combined).\",\n );\n }\n\n if (runId) {\n const known = runs.some((run) => run.runId === runId);\n if (!known) {\n throw new Error(`Run \"${runId}\" was not found in the trace directory.`);\n }\n return { runIds: [runId] };\n }\n\n if (sessionId) {\n const session = findSession(index, sessionId);\n if (!session) {\n throw new Error(`Session \"${sessionId}\" was not found.`);\n }\n if (session.runIds.length === 0) {\n throw new Error(`Session \"${sessionId}\" has no runs to bundle.`);\n }\n return {\n runIds: [...session.runIds].sort((a, b) => a.localeCompare(b)),\n sessionId,\n };\n }\n\n const runIds = runsInSinceWindow(runs, since!);\n if (runIds.length === 0) {\n throw new Error(`No runs matched --since ${since}.`);\n }\n return { runIds, since };\n}\n","import type { BundleSafeStatus, BundleSafeStatusMetadata } from \"./types.js\";\n\nexport function aggregateBundleSafeStatus(statuses: readonly BundleSafeStatus[]): BundleSafeStatus {\n if (statuses.length === 0) return \"UNKNOWN\";\n if (statuses.some((status) => status === \"UNSAFE\")) return \"UNSAFE\";\n if (statuses.some((status) => status === \"UNKNOWN\")) return \"UNKNOWN\";\n if (statuses.some((status) => status === \"SAFE WITH WARNINGS\")) return \"SAFE WITH WARNINGS\";\n return \"SAFE\";\n}\n\nexport function toMetadataSafeStatus(status: BundleSafeStatus): BundleSafeStatusMetadata {\n if (status === \"SAFE WITH WARNINGS\") return \"SAFE_WITH_WARNINGS\";\n return status;\n}\n\nexport function bundleFailsOnSafety(\n status: BundleSafeStatus,\n allowUnsafe: boolean,\n): boolean {\n if (allowUnsafe) return false;\n return status === \"UNSAFE\" || status === \"UNKNOWN\";\n}\n","import { aggregateBundleSafeStatus, toMetadataSafeStatus } from \"./safety-status.js\";\nimport type {\n BundleCheckResults,\n BundleMetadata,\n BundlePlaceholderArtifact,\n BundleRedactionProfile,\n BundleResolveResult,\n} from \"./types.js\";\n\nconst BUNDLE_NOTE =\n \"Generated locally by AgentInspect. Bundles are derived copies for review — not compliance or security certification. Review before sharing.\";\n\nconst PLACEHOLDER_NOTE =\n \"No eval or performance artifacts were requested for this bundle.\";\n\nexport function buildBundleMetadata(parts: {\n agentInspectVersion: string;\n profile: BundleRedactionProfile;\n resolve: BundleResolveResult;\n checks: BundleCheckResults;\n files: string[];\n createdAt?: string;\n}): BundleMetadata {\n const aggregate = aggregateBundleSafeStatus(\n parts.checks.runs.map((run) => run.status),\n );\n return {\n createdAt: parts.createdAt ?? new Date().toISOString(),\n agentInspectVersion: parts.agentInspectVersion,\n redactionProfile: parts.profile,\n sourceTraceCount: parts.resolve.runIds.length,\n runIds: [...parts.resolve.runIds],\n safeStatus: toMetadataSafeStatus(aggregate),\n files: [...parts.files].sort((a, b) => a.localeCompare(b)),\n note: BUNDLE_NOTE,\n ...(parts.resolve.sessionId !== undefined ? { sessionId: parts.resolve.sessionId } : {}),\n ...(parts.resolve.since !== undefined ? { since: parts.resolve.since } : {}),\n };\n}\n\nexport function buildPlaceholderArtifact(): BundlePlaceholderArtifact {\n return {\n status: \"not_requested\",\n note: PLACEHOLDER_NOTE,\n };\n}\n","import type { BundleCheckResults, BundleMetadata, BundleRedactionReport } from \"./types.js\";\n\nfunction markdownTable(rows: readonly [string, string | number | undefined][]): string {\n const lines = [\"| Field | Value |\", \"| --- | --- |\"];\n for (const [key, value] of rows) {\n lines.push(`| ${key} | ${value ?? \"unknown\"} |`);\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Builds a human-readable bundle summary for `summary.md`.\n */\nexport function buildBundleSummaryMarkdown(parts: {\n metadata: BundleMetadata;\n checks: BundleCheckResults;\n redaction: BundleRedactionReport;\n}): string {\n const { metadata, checks, redaction } = parts;\n const lines: string[] = [\n \"# AgentInspect trace bundle\",\n \"\",\n metadata.note,\n \"\",\n \"## Overview\",\n \"\",\n markdownTable([\n [\"Created\", metadata.createdAt],\n [\"AgentInspect\", metadata.agentInspectVersion],\n [\"Redaction profile\", metadata.redactionProfile],\n [\"Safe status\", metadata.safeStatus],\n [\"Source traces\", metadata.sourceTraceCount],\n [\"Runs\", metadata.runIds.join(\", \")],\n ...(metadata.sessionId ? [[\"Session\", metadata.sessionId] as [string, string]] : []),\n ...(metadata.since ? [[\"Since\", metadata.since] as [string, string]] : []),\n ]),\n \"\",\n \"## Safety checks\",\n \"\",\n `Aggregate: **${checks.aggregateStatus}**`,\n \"\",\n ];\n\n for (const run of checks.runs) {\n lines.push(\n `- \\`${run.runId}\\`: ${run.status} (${run.findings} finding(s), ${run.errors} error(s), ${run.warnings} warning(s))`,\n );\n }\n\n lines.push(\"\", \"## Redaction\", \"\", `Total findings: ${redaction.totalFindings}`, \"\");\n for (const run of redaction.runs) {\n const detectors = run.detectors.length > 0 ? run.detectors.join(\", \") : \"none\";\n lines.push(`- \\`${run.runId}\\`: ${run.findings} finding(s); detectors: ${detectors}`);\n }\n\n lines.push(\n \"\",\n \"## Files\",\n \"\",\n ...metadata.files.map((file) => `- \\`${file}\\``),\n \"\",\n \"_Review every generated artifact before sharing outside your team._\",\n \"\",\n );\n\n return lines.join(\"\\n\");\n}\n","import path from \"node:path\";\n\n/**\n * Normalizes bundle output path. Strips a `.zip` suffix (folder-first MVP).\n */\nexport function normalizeBundleOutputPath(out: string): string {\n const trimmed = out.trim();\n if (trimmed === \"\") {\n throw new Error(\"--out requires a non-empty path.\");\n }\n const resolved = path.resolve(trimmed);\n if (resolved.toLowerCase().endsWith(\".zip\")) {\n return resolved.slice(0, -4);\n }\n return resolved;\n}\n\n/**\n * Default bundle directory when --out is omitted.\n */\nexport function defaultBundleOutputPath(runIds: readonly string[]): string {\n const label = runIds.length === 1 ? runIds[0]! : `multi-${runIds.length}`;\n const stamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n return path.resolve(`agent-inspect-bundle-${label}-${stamp}`);\n}\n","import type { RedactionProfile } from \"../types.js\";\n\nexport type SuiteCaseStatus = \"pass\" | \"fail\" | \"error\" | \"skipped\";\n\nexport type SuiteDiagnosticCode =\n | \"AI_SUITE_CONFIG_INVALID\"\n | \"AI_SUITE_CONFIG_LOAD_FAILED\"\n | \"AI_SUITE_CASE_TRACE_MISSING\"\n | \"AI_SUITE_CASE_CHECK_FAILED\"\n | \"AI_SUITE_CASE_EVAL_FAILED\"\n | \"AI_SUITE_CASE_OBSERVATION_FAILED\"\n | \"AI_SUITE_TRACE_UNREADABLE\";\n\nexport interface SuiteDiagnostic {\n code: SuiteDiagnosticCode;\n severity: \"error\" | \"warning\" | \"info\";\n message: string;\n caseId?: string;\n}\n\nexport interface SuiteCaseConfig {\n id: string;\n trace?: string;\n runId?: string;\n input?: string;\n requireTools?: string[];\n forbidTools?: string[];\n maxDurationMs?: number;\n expectedObservations?: string[];\n}\n\nexport interface SuiteChecksConfig {\n select?: string[];\n run?: {\n maxDurationMs?: number;\n maxDepth?: number;\n };\n tool?: {\n required?: string[];\n forbidden?: string[];\n };\n llm?: {\n allowedModels?: string[];\n maxTotalTokens?: number;\n };\n}\n\nexport interface SuiteEvalConfig {\n requireSuccess?: boolean;\n requiredTools?: string[];\n forbiddenTools?: string[];\n maxDurationMs?: number;\n maxDepth?: number;\n maxRetries?: number;\n maxTotalTokens?: number;\n}\n\nexport interface SuiteArtifactsConfig {\n outputDir?: string;\n}\n\nexport interface SuiteConfig {\n name: string;\n traces: string;\n cases: SuiteCaseConfig[];\n checks?: SuiteChecksConfig;\n eval?: SuiteEvalConfig;\n redactionProfile?: RedactionProfile;\n artifacts?: SuiteArtifactsConfig;\n baseline?: string;\n candidate?: string;\n}\n\nexport interface SuiteCaseResult {\n id: string;\n status: SuiteCaseStatus;\n tracePath?: string;\n runId?: string;\n checkOk?: boolean;\n evalOk?: boolean;\n observationsOk?: boolean;\n message?: string;\n diagnostics: SuiteDiagnostic[];\n}\n\nexport interface SuiteRunSummary {\n passed: number;\n failed: number;\n errors: number;\n skipped: number;\n}\n\nexport interface SuiteRunResult {\n ok: boolean;\n status: \"pass\" | \"fail\" | \"error\";\n suiteName: string;\n configPath: string;\n tracesDir: string;\n startedAt: string;\n finishedAt: string;\n summary: SuiteRunSummary;\n cases: SuiteCaseResult[];\n diagnostics: SuiteDiagnostic[];\n}\n\nexport interface LoadSuiteConfigOptions {\n configPath?: string;\n cwd?: string;\n}\n\nexport interface ValidateSuiteConfigResult {\n ok: boolean;\n diagnostics: SuiteDiagnostic[];\n}\n\nexport interface RunSuiteOptions {\n configPath?: string;\n cwd?: string;\n nowMs?: number;\n}\n\nexport interface RenderSuiteReportOptions {\n format?: \"markdown\" | \"json\";\n}\n\nexport const DEFAULT_SUITE_CONFIG_NAMES = [\n \"agent-inspect.suite.json\",\n \"agent-inspect.suite.js\",\n \"agent-inspect.suite.mjs\",\n \"agent-inspect.suite.cjs\",\n] as const;\n\nexport const DEFAULT_SUITE_ARTIFACTS_DIR = \".agent-inspect/suite-runs\";\n","import { access } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type {\n SuiteCaseConfig,\n SuiteConfig,\n SuiteDiagnostic,\n ValidateSuiteConfigResult,\n} from \"./types.js\";\n\nfunction diagnostic(\n code: SuiteDiagnostic[\"code\"],\n message: string,\n severity: SuiteDiagnostic[\"severity\"] = \"error\",\n caseId?: string,\n): SuiteDiagnostic {\n return { code, message, severity, ...(caseId !== undefined ? { caseId } : {}) };\n}\n\nfunction asString(value: unknown, label: string): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"string\" || value.trim() === \"\") {\n throw new Error(`${label} must be a non-empty string.`);\n }\n return value.trim();\n}\n\nfunction asStringArray(value: unknown, label: string): string[] | undefined {\n if (value === undefined) return undefined;\n if (!Array.isArray(value) || value.some((item) => typeof item !== \"string\")) {\n throw new Error(`${label} must be an array of strings.`);\n }\n return value;\n}\n\nfunction asPositiveNumber(value: unknown, label: string): number | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n throw new Error(`${label} must be a non-negative number.`);\n }\n return value;\n}\n\nfunction validateCaseConfig(\n value: unknown,\n index: number,\n): { caseConfig?: SuiteCaseConfig; diagnostics: SuiteDiagnostic[] } {\n const diagnostics: SuiteDiagnostic[] = [];\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n diagnostics.push(\n diagnostic(\"AI_SUITE_CONFIG_INVALID\", `cases[${index}] must be an object.`),\n );\n return { diagnostics };\n }\n\n const raw = value as Record<string, unknown>;\n try {\n const id = asString(raw.id, `cases[${index}].id`);\n if (id === undefined) {\n diagnostics.push(\n diagnostic(\"AI_SUITE_CONFIG_INVALID\", `cases[${index}].id is required.`),\n );\n return { diagnostics };\n }\n\n const trace = asString(raw.trace, `cases[${index}].trace`);\n const runId = asString(raw.runId, `cases[${index}].runId`);\n const input = asString(raw.input, `cases[${index}].input`);\n\n return {\n caseConfig: {\n id,\n ...(trace !== undefined ? { trace } : {}),\n ...(runId !== undefined ? { runId } : {}),\n ...(input !== undefined ? { input } : {}),\n ...(asStringArray(raw.requireTools, `cases[${index}].requireTools`) !== undefined\n ? { requireTools: asStringArray(raw.requireTools, `cases[${index}].requireTools`) }\n : {}),\n ...(asStringArray(raw.forbidTools, `cases[${index}].forbidTools`) !== undefined\n ? { forbidTools: asStringArray(raw.forbidTools, `cases[${index}].forbidTools`) }\n : {}),\n ...(asPositiveNumber(raw.maxDurationMs, `cases[${index}].maxDurationMs`) !== undefined\n ? {\n maxDurationMs: asPositiveNumber(\n raw.maxDurationMs,\n `cases[${index}].maxDurationMs`,\n ),\n }\n : {}),\n ...(asStringArray(\n raw.expectedObservations,\n `cases[${index}].expectedObservations`,\n ) !== undefined\n ? {\n expectedObservations: asStringArray(\n raw.expectedObservations,\n `cases[${index}].expectedObservations`,\n ),\n }\n : {}),\n },\n diagnostics,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n diagnostics.push(diagnostic(\"AI_SUITE_CONFIG_INVALID\", message));\n return { diagnostics };\n }\n}\n\nexport function normalizeSuiteConfig(value: unknown): SuiteConfig {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new Error(\"Suite config must export an object.\");\n }\n const raw = value as Record<string, unknown>;\n const name = asString(raw.name, \"name\");\n const traces = asString(raw.traces, \"traces\");\n if (name === undefined) throw new Error(\"name is required.\");\n if (traces === undefined) throw new Error(\"traces is required.\");\n\n if (!Array.isArray(raw.cases) || raw.cases.length === 0) {\n throw new Error(\"cases must be a non-empty array.\");\n }\n\n const cases: SuiteCaseConfig[] = [];\n for (let index = 0; index < raw.cases.length; index += 1) {\n const { caseConfig, diagnostics } = validateCaseConfig(raw.cases[index], index);\n if (diagnostics.length > 0) {\n throw new Error(diagnostics.map((item) => item.message).join(\"; \"));\n }\n if (caseConfig !== undefined) cases.push(caseConfig);\n }\n\n const ids = new Set<string>();\n for (const suiteCase of cases) {\n if (ids.has(suiteCase.id)) {\n throw new Error(`Duplicate case id \"${suiteCase.id}\".`);\n }\n ids.add(suiteCase.id);\n }\n\n const redactionProfile =\n raw.redactionProfile === \"local\" ||\n raw.redactionProfile === \"share\" ||\n raw.redactionProfile === \"strict\"\n ? raw.redactionProfile\n : undefined;\n if (\n raw.redactionProfile !== undefined &&\n redactionProfile === undefined\n ) {\n throw new Error('redactionProfile must be \"local\", \"share\", or \"strict\".');\n }\n\n const config: SuiteConfig = { name, traces, cases };\n if (raw.checks !== undefined) {\n if (typeof raw.checks !== \"object\" || Array.isArray(raw.checks)) {\n throw new Error(\"checks must be an object.\");\n }\n config.checks = raw.checks as SuiteConfig[\"checks\"];\n }\n if (raw.eval !== undefined) {\n if (typeof raw.eval !== \"object\" || Array.isArray(raw.eval)) {\n throw new Error(\"eval must be an object.\");\n }\n config.eval = raw.eval as SuiteConfig[\"eval\"];\n }\n if (raw.artifacts !== undefined) {\n if (typeof raw.artifacts !== \"object\" || Array.isArray(raw.artifacts)) {\n throw new Error(\"artifacts must be an object.\");\n }\n const outputDir = asString(\n (raw.artifacts as Record<string, unknown>).outputDir,\n \"artifacts.outputDir\",\n );\n config.artifacts = outputDir !== undefined ? { outputDir } : {};\n }\n if (raw.baseline !== undefined) {\n const baseline = asString(raw.baseline, \"baseline\");\n if (baseline !== undefined) config.baseline = baseline;\n }\n if (raw.candidate !== undefined) {\n const candidate = asString(raw.candidate, \"candidate\");\n if (candidate !== undefined) config.candidate = candidate;\n }\n if (redactionProfile !== undefined) config.redactionProfile = redactionProfile;\n return config;\n}\n\nexport async function validateSuiteConfig(\n config: SuiteConfig,\n options: { configDir: string },\n): Promise<ValidateSuiteConfigResult> {\n const diagnostics: SuiteDiagnostic[] = [];\n const tracesDir = path.resolve(options.configDir, config.traces);\n try {\n await access(tracesDir);\n } catch {\n diagnostics.push(\n diagnostic(\"AI_SUITE_CONFIG_INVALID\", `traces directory not found: ${tracesDir}`),\n );\n }\n\n for (const suiteCase of config.cases) {\n if (suiteCase.input !== undefined) {\n const inputPath = path.resolve(options.configDir, suiteCase.input);\n try {\n await access(inputPath);\n } catch {\n diagnostics.push(\n diagnostic(\n \"AI_SUITE_CONFIG_INVALID\",\n `input fixture not found: ${suiteCase.input}`,\n \"warning\",\n suiteCase.id,\n ),\n );\n }\n }\n }\n\n return { ok: diagnostics.every((item) => item.severity !== \"error\"), diagnostics };\n}\n","import { access, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport {\n DEFAULT_SUITE_CONFIG_NAMES,\n type LoadSuiteConfigOptions,\n type SuiteConfig,\n type SuiteDiagnostic,\n} from \"./types.js\";\nimport { normalizeSuiteConfig } from \"./validate.js\";\n\nconst CONFIG_EXTENSIONS = new Set([\".json\", \".js\", \".mjs\", \".cjs\"]);\nconst TS_CONFIG_EXTENSIONS = new Set([\".ts\", \".mts\", \".cts\"]);\n\nfunction diagnostic(\n code: SuiteDiagnostic[\"code\"],\n message: string,\n): SuiteDiagnostic {\n return { code, message, severity: \"error\" };\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n await access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function resolveSuiteConfigPath(\n options: LoadSuiteConfigOptions = {},\n): Promise<string> {\n const cwd = path.resolve(options.cwd ?? process.cwd());\n if (options.configPath !== undefined && options.configPath.trim() !== \"\") {\n return path.resolve(cwd, options.configPath.trim());\n }\n\n for (const name of DEFAULT_SUITE_CONFIG_NAMES) {\n const candidate = path.join(cwd, name);\n if (await fileExists(candidate)) return candidate;\n }\n\n throw new Error(\n `No suite config found. Create one with \\`agent-inspect suite init\\` or pass --config.`,\n );\n}\n\nexport async function loadSuiteConfig(\n options: LoadSuiteConfigOptions = {},\n): Promise<{ config: SuiteConfig; configPath: string; configDir: string }> {\n let configPath: string;\n try {\n configPath = await resolveSuiteConfigPath(options);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw Object.assign(new Error(message), {\n diagnostics: [diagnostic(\"AI_SUITE_CONFIG_LOAD_FAILED\", message)],\n });\n }\n\n const extension = path.extname(configPath);\n if (TS_CONFIG_EXTENSIONS.has(extension)) {\n const message =\n \"TypeScript suite configs require an explicit precompiled JavaScript config or future --config-loader support.\";\n throw Object.assign(new Error(message), {\n diagnostics: [diagnostic(\"AI_SUITE_CONFIG_LOAD_FAILED\", message)],\n });\n }\n if (!CONFIG_EXTENSIONS.has(extension)) {\n const message = \"Unsupported suite config extension. Use .json, .js, .mjs, or .cjs.\";\n throw Object.assign(new Error(message), {\n diagnostics: [diagnostic(\"AI_SUITE_CONFIG_LOAD_FAILED\", message)],\n });\n }\n\n try {\n let raw: unknown;\n if (extension === \".json\") {\n raw = JSON.parse(await readFile(configPath, \"utf-8\"));\n } else {\n const mod = await import(pathToFileURL(configPath).href);\n raw = \"default\" in mod ? mod.default : mod;\n }\n const config = normalizeSuiteConfig(raw);\n return {\n config,\n configPath,\n configDir: path.dirname(configPath),\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw Object.assign(new Error(message), {\n diagnostics: [diagnostic(\"AI_SUITE_CONFIG_LOAD_FAILED\", message)],\n });\n }\n}\n\nexport function defaultSuiteConfigTemplate(): SuiteConfig {\n return {\n name: \"my-agent-suite\",\n traces: \"./.agent-inspect\",\n cases: [\n {\n id: \"example-case\",\n runId: \"example-run\",\n requireTools: [\"searchDocs\"],\n maxDurationMs: 30_000,\n expectedObservations: [\"answerReady\"],\n },\n ],\n checks: {\n select: [\"run.status\"],\n },\n redactionProfile: \"local\",\n artifacts: {\n outputDir: \".agent-inspect/suite-runs\",\n },\n };\n}\n","import type { TraceReadResult, TraceReadWarning } from \"../readers/index.js\";\nimport type {\n AttributionConfidence,\n InspectNode,\n InspectRunTree,\n} from \"../types/inspect-event.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport {\n extractOutcomesFromPersistedEvents,\n outcomesMatchingStatus,\n type ObservedOutcomeStatus,\n} from \"../outcomes/index.js\";\n\n/**\n * Experimental trace-check finding severity.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport type TraceCheckSeverity = \"error\" | \"warning\" | \"info\";\n\n/**\n * Experimental trace-check rule category.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport type TraceCheckRuleCategory =\n | \"run\"\n | \"tool\"\n | \"llm\"\n | \"structure\"\n | \"baseline\"\n | \"safety\"\n | \"reader\";\n\n/**\n * Experimental trace-check finding status.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport type TraceCheckFindingStatus = \"pass\" | \"fail\" | \"warning\";\n\n/**\n * Experimental trace-check aggregate status.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport type TraceCheckStatus = \"pass\" | \"fail\" | \"error\";\n\n/**\n * Experimental stable diagnostic code for check execution and input errors.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport type TraceCheckDiagnosticCode =\n | \"AI_CHECK_INVALID_ARGUMENTS\"\n | \"AI_CHECK_INVALID_CONFIG\"\n | \"AI_CHECK_CONFIG_LOAD_FAILED\"\n | \"AI_CHECK_TRACE_UNREADABLE\"\n | \"AI_CHECK_UNSUPPORTED_FORMAT\"\n | \"AI_CHECK_AMBIGUOUS_FORMAT\"\n | \"AI_CHECK_RUN_SELECTION_REQUIRED\"\n | \"AI_CHECK_BASELINE_UNREADABLE\"\n | \"AI_CHECK_BASELINE_INCOMPATIBLE\"\n | \"AI_CHECK_RULE_FAILED\"\n | \"AI_CHECK_INTERNAL_ERROR\";\n\n/**\n * Experimental evidence pointing at trace data relevant to a finding.\n *\n * Evidence intentionally identifies runs/events/spans and bounded paths rather\n * than embedding raw prompts, outputs, request bodies, headers, or tool payloads.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckEvidence {\n runId?: string;\n eventId?: string;\n parentId?: string;\n traceId?: string;\n spanId?: string;\n kind?: string;\n name?: string;\n status?: string;\n path?: string;\n}\n\n/**\n * Experimental finding emitted by a trace-check rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckFinding {\n ruleId: string;\n severity: TraceCheckSeverity;\n status: TraceCheckFindingStatus;\n message: string;\n expected?: unknown;\n actual?: unknown;\n evidence: TraceCheckEvidence[];\n}\n\n/**\n * Experimental diagnostic emitted when check execution cannot complete normally.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckDiagnostic {\n code: TraceCheckDiagnosticCode;\n message: string;\n severity: TraceCheckSeverity;\n ruleId?: string;\n}\n\n/**\n * Experimental input projection for trace checks.\n *\n * The `read` value must come from `agent-inspect/readers` or an equivalent\n * already-normalized `TraceReadResult`. The checks engine does not read files\n * or reparse source payloads.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckInput {\n read: TraceReadResult;\n selectedRun?: InspectRunTree;\n sourceLabel?: string;\n}\n\n/**\n * Experimental normalized facts available to trace-check rules.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckFacts {\n format: string;\n runs: readonly InspectRunTree[];\n events: readonly PersistedInspectEvent[];\n readerWarnings: readonly TraceReadWarning[];\n unsupportedFields: readonly string[];\n sourceFiles: readonly string[];\n nodesByEventId: ReadonlyMap<string, InspectNode>;\n childrenByParentId: ReadonlyMap<string, readonly InspectNode[]>;\n rootNodes: readonly InspectNode[];\n}\n\n/**\n * Experimental rule evaluation context.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckContext extends TraceCheckFacts {\n selectedRun?: InspectRunTree;\n sourceLabel?: string;\n}\n\n/**\n * Experimental trace-check rule definition.\n *\n * Rules are synchronous and pure: they receive normalized facts and return\n * findings without reading files, mutating input, or performing network I/O.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckRule {\n id: string;\n category: TraceCheckRuleCategory;\n defaultSeverity: TraceCheckSeverity;\n evaluate(context: TraceCheckContext): readonly TraceCheckFinding[];\n}\n\n/**\n * Experimental options for `runTraceChecks`.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RunTraceChecksOptions {\n rules?: readonly TraceCheckRule[];\n select?: readonly string[];\n runId?: string;\n}\n\n/**\n * Experimental options for the built-in run status rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RunStatusRuleOptions {\n expected?: \"ok\" | \"error\" | \"running\";\n allowIncomplete?: boolean;\n}\n\n/**\n * Experimental options for the built-in run duration rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RunDurationRuleOptions {\n maxDurationMs: number;\n}\n\n/**\n * Experimental options for the built-in max step duration rule.\n */\nexport interface MaxStepDurationRuleOptions {\n maxDurationMs: number;\n}\n\n/**\n * Experimental options for stall detection (running / incomplete events).\n */\nexport interface StallDetectionRuleOptions {\n /** When true, events with startedAt but no endedAt also fail. */\n requireEndedAt?: boolean;\n}\n\n/**\n * Experimental options for the built-in event count rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RunEventCountRuleOptions {\n kind?: PersistedInspectEvent[\"kind\"];\n min?: number;\n max?: number;\n}\n\n/**\n * Experimental options for the built-in run depth rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RunDepthRuleOptions {\n maxDepth: number;\n}\n\n/**\n * Experimental options for the built-in tool usage rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface ToolUsageRuleOptions {\n required?: readonly string[];\n forbidden?: readonly string[];\n allowed?: readonly string[];\n minCount?: number;\n maxCount?: number;\n}\n\n/**\n * Experimental options for the built-in tool ordering rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface ToolOrderingRuleOptions {\n before: string;\n after: string;\n}\n\n/**\n * Experimental options for the built-in tool failure rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface ToolFailureRuleOptions {\n maxFailures?: number;\n maxRetries?: number;\n}\n\n/**\n * Experimental options for the built-in LLM usage rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface LlmUsageRuleOptions {\n allowedModels?: readonly string[];\n allowedProviders?: readonly string[];\n maxCalls?: number;\n maxInputTokens?: number;\n maxOutputTokens?: number;\n maxTotalTokens?: number;\n maxCachedTokens?: number;\n finishReasons?: readonly string[];\n}\n\n/**\n * Experimental options for the built-in structure incomplete rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface StructureIncompleteRuleOptions {\n allowRunning?: boolean;\n requireEndedAtForStarted?: boolean;\n}\n\n/**\n * Experimental options for the built-in structure orphan rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface StructureOrphanRuleOptions {\n allowMarkedUnresolved?: boolean;\n}\n\n/**\n * Experimental options for the built-in structure relationship rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface StructureRelationshipRuleOptions {\n minConfidence?: AttributionConfidence;\n requireParentBeforeChild?: boolean;\n requireTraceParentSpan?: boolean;\n}\n\n/**\n * Experimental options for the built-in structure parallel-width rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface StructureParallelWidthRuleOptions {\n maxChildren?: number;\n maxConcurrent?: number;\n}\n\n/**\n * Experimental options shared by built-in signal rules.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceSignalRuleOptions {\n required?: readonly string[];\n forbidden?: readonly string[];\n allowed?: readonly string[];\n minCount?: number;\n maxCount?: number;\n}\n\n/**\n * Experimental options for the built-in retrieval signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface RetrievalRuleOptions extends TraceSignalRuleOptions {}\n\n/**\n * Experimental options for the built-in guardrail signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface GuardrailRuleOptions extends TraceSignalRuleOptions {}\n\n/**\n * Experimental options for the built-in decision signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface DecisionRuleOptions extends TraceSignalRuleOptions {}\n\n/**\n * Experimental options for the built-in safety redaction rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface SafetyRedactionRuleOptions {\n sensitiveKeys?: readonly string[];\n redactedMarkers?: readonly string[];\n maxFindings?: number;\n}\n\n/**\n * Experimental options for the built-in raw content path rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface SafetyRawContentRuleOptions {\n forbiddenKeys?: readonly string[];\n includeSummaries?: boolean;\n maxFindings?: number;\n}\n\n/**\n * Experimental secret pattern used by the built-in secret safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface SafetySecretPattern {\n id: string;\n pattern: RegExp;\n}\n\n/**\n * Experimental options for the built-in secret pattern safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface SafetySecretPatternRuleOptions {\n patterns?: readonly SafetySecretPattern[];\n maxStringLength?: number;\n maxFindings?: number;\n}\n\n/**\n * Experimental options for the built-in oversized attribute safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface SafetyOversizedAttributeRuleOptions {\n maxStringLength?: number;\n maxArrayLength?: number;\n maxObjectKeys?: number;\n maxSerializedBytes?: number;\n maxFindings?: number;\n}\n\n/**\n * Experimental options for the built-in baseline regression rule.\n *\n * The baseline must already be normalized through `agent-inspect/readers` or an\n * equivalent `TraceReadResult`; this rule does not read files or parse traces.\n * `durationToleranceMs` defaults to `0`, meaning exact duration comparison.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface BaselineRegressionRuleOptions {\n baseline: TraceCheckInput;\n baselineRunId?: string;\n durationToleranceMs?: number;\n compareFormat?: boolean;\n}\n\n/**\n * Experimental aggregate counts for trace-check results.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckSummary {\n passed: number;\n failed: number;\n warnings: number;\n errors: number;\n}\n\n/**\n * Experimental trace-check result.\n *\n * `status: \"fail\"` means rules ran and at least one error-severity finding\n * failed. `status: \"error\"` means execution could not complete because of\n * invalid input, invalid rule selection, or a thrown rule error.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport interface TraceCheckResult {\n ok: boolean;\n status: TraceCheckStatus;\n format: string;\n runId?: string;\n summary: TraceCheckSummary;\n findings: TraceCheckFinding[];\n diagnostics: TraceCheckDiagnostic[];\n}\n\nconst SEVERITY_RANK: Record<TraceCheckSeverity, number> = {\n error: 0,\n warning: 1,\n info: 2,\n};\n\nconst STATUS_RANK: Record<TraceCheckFindingStatus, number> = {\n fail: 0,\n warning: 1,\n pass: 2,\n};\n\nconst CONFIDENCE_RANK: Record<AttributionConfidence, number> = {\n unknown: 0,\n heuristic: 1,\n correlated: 2,\n explicit: 3,\n};\n\nconst DEFAULT_SENSITIVE_KEYS = [\n \"authorization\",\n \"cookie\",\n \"token\",\n \"apikey\",\n \"api_key\",\n \"password\",\n \"secret\",\n \"email\",\n];\n\nconst DEFAULT_RAW_CONTENT_KEYS = [\n \"body\",\n \"headers\",\n \"input\",\n \"messages\",\n \"output\",\n \"payload\",\n \"prompt\",\n \"requestbody\",\n \"request_body\",\n \"responsebody\",\n \"response_body\",\n \"rawprompt\",\n \"raw_prompt\",\n \"rawoutput\",\n \"raw_output\",\n \"toolinput\",\n \"tool_input\",\n \"tooloutput\",\n \"tool_output\",\n];\n\nconst DEFAULT_SECRET_PATTERNS: readonly SafetySecretPattern[] = [\n { id: \"bearer-token\", pattern: /Bearer\\s+[A-Za-z0-9._~+/-]{12,}=*/ },\n { id: \"openai-key\", pattern: /sk-[A-Za-z0-9_-]{16,}/ },\n { id: \"aws-access-key\", pattern: /AKIA[0-9A-Z]{16}/ },\n { id: \"github-token\", pattern: /gh[opsu]_[A-Za-z0-9_]{20,}/ },\n { id: \"key-value-secret\", pattern: /(api[_-]?key|token|password|secret)=\\S{8,}/i },\n];\n\ntype EventValueEntry = {\n event: PersistedInspectEvent;\n path: string;\n key?: string;\n value: unknown;\n};\n\nfunction compareStrings(a: string | undefined, b: string | undefined): number {\n return (a ?? \"\").localeCompare(b ?? \"\");\n}\n\nfunction diagnostic(\n code: TraceCheckDiagnosticCode,\n message: string,\n ruleId?: string,\n): TraceCheckDiagnostic {\n return {\n code,\n message,\n severity: \"error\",\n ...(ruleId ? { ruleId } : {}),\n };\n}\n\nfunction emptySummary(): TraceCheckSummary {\n return {\n passed: 0,\n failed: 0,\n warnings: 0,\n errors: 0,\n };\n}\n\nfunction errorResult(\n input: TraceCheckInput,\n diagnostics: readonly TraceCheckDiagnostic[],\n selectedRun?: InspectRunTree,\n): TraceCheckResult {\n return {\n ok: false,\n status: \"error\",\n format: input.read.format,\n ...(selectedRun ? { runId: selectedRun.runId } : {}),\n summary: {\n ...emptySummary(),\n errors: diagnostics.filter((item) => item.severity === \"error\").length,\n },\n findings: [],\n diagnostics: [...diagnostics],\n };\n}\n\nfunction flattenNodes(nodes: readonly InspectNode[]): InspectNode[] {\n return nodes.flatMap((node) => [node, ...flattenNodes(node.children)]);\n}\n\nfunction buildFacts(input: TraceCheckInput, selectedRun?: InspectRunTree): TraceCheckFacts {\n const scopedRuns = selectedRun ? [selectedRun] : input.read.runs;\n const scopedRunIds = new Set(scopedRuns.map((run) => run.runId));\n const scopedEvents =\n selectedRun === undefined\n ? input.read.events\n : input.read.events.filter((event) => scopedRunIds.has(event.runId));\n const nodes = flattenNodes(scopedRuns.flatMap((run) => run.children));\n const nodesByEventId = new Map<string, InspectNode>();\n const childrenByParentId = new Map<string, InspectNode[]>();\n\n for (const node of nodes) {\n nodesByEventId.set(node.event.eventId, node);\n const parentId = node.event.parentId;\n if (parentId) {\n const children = childrenByParentId.get(parentId) ?? [];\n children.push(node);\n childrenByParentId.set(parentId, children);\n }\n }\n\n return {\n format: input.read.format,\n runs: Object.freeze([...input.read.runs]),\n events: Object.freeze([...scopedEvents]),\n readerWarnings: Object.freeze([...input.read.warnings]),\n unsupportedFields: Object.freeze([...input.read.unsupportedFields]),\n sourceFiles: Object.freeze([...input.read.sourceFiles]),\n nodesByEventId,\n childrenByParentId,\n rootNodes: Object.freeze(scopedRuns.flatMap((run) => run.children)),\n };\n}\n\nfunction resolveSelectedRun(\n input: TraceCheckInput,\n runId?: string,\n): { run?: InspectRunTree; diagnostics: TraceCheckDiagnostic[] } {\n if (input.selectedRun) {\n if (runId && input.selectedRun.runId !== runId) {\n return {\n diagnostics: [\n diagnostic(\n \"AI_CHECK_INVALID_ARGUMENTS\",\n `Selected run ${input.selectedRun.runId} does not match requested run ${runId}.`,\n ),\n ],\n };\n }\n return { run: input.selectedRun, diagnostics: [] };\n }\n\n if (runId) {\n const run = input.read.runs.find((candidate) => candidate.runId === runId);\n if (!run) {\n return {\n diagnostics: [\n diagnostic(\"AI_CHECK_RUN_SELECTION_REQUIRED\", `Run not found: ${runId}.`),\n ],\n };\n }\n return { run, diagnostics: [] };\n }\n\n if (input.read.runs.length === 1) {\n return { run: input.read.runs[0], diagnostics: [] };\n }\n\n if (input.read.runs.length === 0) {\n return {\n diagnostics: [\n diagnostic(\"AI_CHECK_RUN_SELECTION_REQUIRED\", \"No runs are available for checks.\"),\n ],\n };\n }\n\n return {\n diagnostics: [\n diagnostic(\n \"AI_CHECK_RUN_SELECTION_REQUIRED\",\n \"Multiple runs are available; select a run before executing checks.\",\n ),\n ],\n };\n}\n\nfunction selectRules(\n rules: readonly TraceCheckRule[],\n selectedIds: readonly string[] | undefined,\n): { rules: TraceCheckRule[]; diagnostics: TraceCheckDiagnostic[] } {\n const diagnostics: TraceCheckDiagnostic[] = [];\n const byId = new Map<string, TraceCheckRule>();\n\n for (const rule of rules) {\n if (byId.has(rule.id)) {\n diagnostics.push(\n diagnostic(\"AI_CHECK_INVALID_CONFIG\", `Duplicate trace check rule id: ${rule.id}.`, rule.id),\n );\n continue;\n }\n byId.set(rule.id, rule);\n }\n\n if (selectedIds && selectedIds.length > 0) {\n const selected = new Set(selectedIds);\n for (const id of selected) {\n if (!byId.has(id)) {\n diagnostics.push(\n diagnostic(\"AI_CHECK_INVALID_CONFIG\", `Unknown trace check rule id: ${id}.`, id),\n );\n }\n }\n return {\n rules: [...byId.values()].filter((rule) => selected.has(rule.id)).sort(compareRules),\n diagnostics,\n };\n }\n\n return { rules: [...byId.values()].sort(compareRules), diagnostics };\n}\n\nfunction compareRules(a: TraceCheckRule, b: TraceCheckRule): number {\n return a.id.localeCompare(b.id);\n}\n\nfunction eventTimestamp(\n finding: TraceCheckFinding,\n eventById: ReadonlyMap<string, PersistedInspectEvent>,\n): string {\n const eventId = finding.evidence[0]?.eventId;\n return eventId ? eventById.get(eventId)?.timestamp ?? \"\" : \"\";\n}\n\nfunction compareFindings(\n eventById: ReadonlyMap<string, PersistedInspectEvent>,\n): (a: TraceCheckFinding, b: TraceCheckFinding) => number {\n return (a, b) => {\n if (SEVERITY_RANK[a.severity] !== SEVERITY_RANK[b.severity]) {\n return SEVERITY_RANK[a.severity] - SEVERITY_RANK[b.severity];\n }\n const byRule = a.ruleId.localeCompare(b.ruleId);\n if (byRule !== 0) return byRule;\n if (STATUS_RANK[a.status] !== STATUS_RANK[b.status]) {\n return STATUS_RANK[a.status] - STATUS_RANK[b.status];\n }\n const byRun = compareStrings(a.evidence[0]?.runId, b.evidence[0]?.runId);\n if (byRun !== 0) return byRun;\n const byTime = eventTimestamp(a, eventById).localeCompare(eventTimestamp(b, eventById));\n if (byTime !== 0) return byTime;\n const byEvent = compareStrings(a.evidence[0]?.eventId, b.evidence[0]?.eventId);\n if (byEvent !== 0) return byEvent;\n return compareStrings(a.evidence[0]?.path, b.evidence[0]?.path);\n };\n}\n\nfunction normalizeFinding(rule: TraceCheckRule, finding: TraceCheckFinding): TraceCheckFinding {\n return {\n ruleId: finding.ruleId || rule.id,\n severity: finding.severity ?? rule.defaultSeverity,\n status: finding.status,\n message: finding.message,\n ...(finding.expected !== undefined ? { expected: finding.expected } : {}),\n ...(finding.actual !== undefined ? { actual: finding.actual } : {}),\n evidence: [...(finding.evidence ?? [])],\n };\n}\n\nfunction summarize(\n findings: readonly TraceCheckFinding[],\n diagnostics: readonly TraceCheckDiagnostic[],\n): TraceCheckSummary {\n return {\n passed: findings.filter((finding) => finding.status === \"pass\").length,\n failed: findings.filter(\n (finding) => finding.status === \"fail\" && finding.severity === \"error\",\n ).length,\n warnings: findings.filter(\n (finding) => finding.status === \"warning\" || finding.severity === \"warning\",\n ).length,\n errors: diagnostics.filter((item) => item.severity === \"error\").length,\n };\n}\n\nfunction stringAttr(event: PersistedInspectEvent, keys: readonly string[]): string | undefined {\n for (const key of keys) {\n const value = event.attributes?.[key];\n if (typeof value === \"string\" && value.trim() !== \"\") return value;\n }\n return undefined;\n}\n\nfunction numericAttr(event: PersistedInspectEvent, keys: readonly string[]): number | undefined {\n for (const key of keys) {\n const value = event.attributes?.[key];\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n }\n return undefined;\n}\n\nfunction booleanAttr(event: PersistedInspectEvent, keys: readonly string[]): boolean | undefined {\n for (const key of keys) {\n const value = event.attributes?.[key];\n if (typeof value === \"boolean\") return value;\n }\n return undefined;\n}\n\nfunction stripPrefix(name: string, prefixes: readonly string[]): string {\n for (const prefix of prefixes) {\n if (name.startsWith(prefix)) return name.slice(prefix.length);\n }\n return name;\n}\n\nfunction eventEvidence(event: PersistedInspectEvent, path?: string): TraceCheckEvidence {\n return {\n runId: event.runId,\n eventId: event.eventId,\n parentId: event.parentId,\n traceId: event.trace?.traceId,\n spanId: event.trace?.spanId,\n kind: event.kind,\n name: event.name,\n status: event.status,\n ...(path ? { path } : {}),\n };\n}\n\nfunction runEvidence(run: InspectRunTree | undefined): TraceCheckEvidence[] {\n return run ? [{ runId: run.runId, name: run.name, status: run.status }] : [];\n}\n\nfunction failFinding(\n ruleId: string,\n message: string,\n evidence: readonly TraceCheckEvidence[],\n expected?: unknown,\n actual?: unknown,\n): TraceCheckFinding {\n return {\n ruleId,\n severity: \"error\",\n status: \"fail\",\n message,\n ...(expected !== undefined ? { expected } : {}),\n ...(actual !== undefined ? { actual } : {}),\n evidence: [...evidence],\n };\n}\n\nfunction toolName(event: PersistedInspectEvent): string {\n return (\n stringAttr(event, [\"toolName\", \"tool\"]) ??\n stripPrefix(event.name, [\"tool:\", \"function:\", \"mcp-tools:\"])\n );\n}\n\nfunction llmModel(event: PersistedInspectEvent): string | undefined {\n return (\n stringAttr(event, [\"model\", \"modelId\", \"responseModelId\", \"modelName\", \"model_name\"]) ??\n stripPrefix(event.name, [\"llm:\", \"generation:\", \"transcription:\", \"speech:\"])\n );\n}\n\nfunction llmProvider(event: PersistedInspectEvent): string | undefined {\n return stringAttr(event, [\"provider\", \"providerName\", \"provider_name\"]);\n}\n\nfunction llmFinishReason(event: PersistedInspectEvent): string | undefined {\n return stringAttr(event, [\"finishReason\", \"rawFinishReason\", \"finish_reason\"]);\n}\n\nfunction retryCount(event: PersistedInspectEvent): number | undefined {\n return numericAttr(event, [\"retryCount\", \"retryAttempt\", \"retry_attempt\", \"attempt\"]);\n}\n\nfunction finishedEvents(context: TraceCheckContext, kind?: PersistedInspectEvent[\"kind\"]): PersistedInspectEvent[] {\n return context.events.filter(\n (event) =>\n (kind === undefined || event.kind === kind) &&\n event.status !== \"running\",\n );\n}\n\nfunction firstIndexByName(events: readonly PersistedInspectEvent[]): Map<string, number> {\n const index = new Map<string, number>();\n for (const [position, event] of events.entries()) {\n const name = toolName(event);\n if (!index.has(name)) index.set(name, position);\n }\n return index;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction eventMap(events: readonly PersistedInspectEvent[]): Map<string, PersistedInspectEvent> {\n return new Map(events.map((event) => [event.eventId, event]));\n}\n\nfunction parseEventTime(value: string | undefined): number | undefined {\n if (!value) return undefined;\n const parsed = Date.parse(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction eventStartMs(event: PersistedInspectEvent): number | undefined {\n return parseEventTime(event.startedAt) ?? parseEventTime(event.timestamp);\n}\n\nfunction eventEndMs(event: PersistedInspectEvent): number | undefined {\n const endedAt = parseEventTime(event.endedAt);\n if (endedAt !== undefined) return endedAt;\n const startedAt = eventStartMs(event);\n if (\n startedAt !== undefined &&\n event.durationMs !== undefined &&\n Number.isFinite(event.durationMs)\n ) {\n return startedAt + event.durationMs;\n }\n return undefined;\n}\n\nfunction sortedStrings(values: readonly string[] | undefined): string[] {\n return [...(values ?? [])].sort((a, b) => a.localeCompare(b));\n}\n\nfunction normalizedKey(value: string): string {\n return value.toLowerCase().replace(/[^a-z0-9_]/g, \"\");\n}\n\nfunction lastPathSegment(path: string): string {\n const parts = path.split(\".\");\n return parts[parts.length - 1] ?? path;\n}\n\nfunction valueType(value: unknown): string {\n if (Array.isArray(value)) return \"array\";\n if (value === null) return \"null\";\n return typeof value;\n}\n\nfunction serializedByteLength(value: unknown): number | undefined {\n try {\n return Buffer.byteLength(JSON.stringify(value), \"utf-8\");\n } catch {\n return undefined;\n }\n}\n\nfunction pushValueEntries(\n entries: EventValueEntry[],\n event: PersistedInspectEvent,\n value: unknown,\n path: string,\n key?: string,\n depth = 0,\n): void {\n entries.push({ event, path, key, value });\n if (depth >= 8) return;\n\n if (Array.isArray(value)) {\n for (const [index, item] of value.entries()) {\n pushValueEntries(entries, event, item, `${path}.${index}`, String(index), depth + 1);\n }\n return;\n }\n\n if (!isRecord(value)) return;\n for (const nestedKey of Object.keys(value).sort((a, b) => a.localeCompare(b))) {\n pushValueEntries(\n entries,\n event,\n value[nestedKey],\n `${path}.${nestedKey}`,\n nestedKey,\n depth + 1,\n );\n }\n}\n\nfunction eventValueEntries(\n event: PersistedInspectEvent,\n options: { includeSummaries?: boolean; includeError?: boolean } = {},\n): EventValueEntry[] {\n const entries: EventValueEntry[] = [];\n if (event.attributes !== undefined) {\n pushValueEntries(entries, event, event.attributes, \"attributes\", \"attributes\");\n }\n if (options.includeSummaries) {\n if (event.inputSummary !== undefined) {\n pushValueEntries(entries, event, event.inputSummary, \"inputSummary\", \"inputSummary\");\n }\n if (event.outputSummary !== undefined) {\n pushValueEntries(entries, event, event.outputSummary, \"outputSummary\", \"outputSummary\");\n }\n }\n if (options.includeError && event.error !== undefined) {\n pushValueEntries(entries, event, event.error, \"error\", \"error\");\n }\n return entries;\n}\n\nfunction limitFindings(\n findings: TraceCheckFinding[],\n maxFindings: number | undefined,\n): TraceCheckFinding[] {\n if (maxFindings === undefined || findings.length <= maxFindings) return findings;\n return findings.slice(0, Math.max(0, maxFindings));\n}\n\nfunction hasRedactionMarker(value: string, markers: readonly string[]): boolean {\n return markers.some((marker) => value.includes(marker)) || /^\\[HASH:[A-Za-z0-9_-]+\\]$/.test(value);\n}\n\nfunction isSensitiveKey(key: string | undefined, sensitiveKeys: readonly string[]): boolean {\n if (!key) return false;\n const normalized = normalizedKey(key);\n return sensitiveKeys.some((sensitive) => normalized.includes(normalizedKey(sensitive)));\n}\n\nfunction isRawContentKey(key: string | undefined, forbiddenKeys: readonly string[]): boolean {\n if (!key) return false;\n const normalized = normalizedKey(key);\n return forbiddenKeys.some((forbidden) => normalized === normalizedKey(forbidden));\n}\n\nfunction parentMarkedUnresolved(event: PersistedInspectEvent): boolean {\n if (\n booleanAttr(event, [\n \"parentUnresolved\",\n \"unresolvedParent\",\n \"relationshipUnresolved\",\n \"unresolvedRelationship\",\n ]) === true\n ) {\n return true;\n }\n const resolution = stringAttr(event, [\n \"parentResolution\",\n \"relationshipResolution\",\n \"relationshipStatus\",\n ]);\n return resolution === \"unresolved\" || resolution === \"missing-parent\";\n}\n\nfunction signalName(\n event: PersistedInspectEvent,\n attributeKeys: readonly string[],\n prefixes: readonly string[],\n): string {\n return stringAttr(event, attributeKeys) ?? stripPrefix(event.name, prefixes);\n}\n\nfunction guardrailEvents(context: TraceCheckContext): PersistedInspectEvent[] {\n return finishedEvents().filter((event) => {\n const name = event.name.toLowerCase();\n if (name.startsWith(\"guardrail:\") || name.includes(\".guardrail.\")) return true;\n return stringAttr(event, [\"guardrailName\", \"guardrail\", \"guardrailId\"]) !== undefined;\n });\n\n function finishedEvents(): PersistedInspectEvent[] {\n return context.events.filter((event) => event.status !== \"running\");\n }\n}\n\nfunction retryValue(event: PersistedInspectEvent): number {\n return retryCount(event) ?? 0;\n}\n\nfunction eventDurationMs(event: PersistedInspectEvent): number | undefined {\n if (event.durationMs !== undefined) return event.durationMs;\n const start = eventStartMs(event);\n const end = eventEndMs(event);\n return start !== undefined && end !== undefined && end >= start ? end - start : undefined;\n}\n\nfunction treeShape(nodes: readonly InspectNode[]): string[] {\n const lines: string[] = [];\n const visit = (node: InspectNode, path: string) => {\n lines.push(`${path}:${node.event.kind}:${node.event.name}:${node.event.status ?? \"unknown\"}`);\n node.children.forEach((child, index) => visit(child, `${path}.${index}`));\n };\n nodes.forEach((node, index) => visit(node, String(index)));\n return lines;\n}\n\nfunction statusShape(context: TraceCheckContext): string[] {\n return context.events\n .map((event) => `${event.kind}:${event.name}:${event.status ?? \"unknown\"}`)\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction toolShape(context: TraceCheckContext): string[] {\n return finishedEvents(context, \"TOOL\").map((event) =>\n [\n toolName(event),\n event.status ?? \"unknown\",\n retryValue(event),\n eventDurationMs(event) ?? \"unknown\",\n ].join(\":\"),\n );\n}\n\nfunction llmShape(context: TraceCheckContext): string[] {\n return finishedEvents(context, \"LLM\").map((event) =>\n [\n llmProvider(event) ?? \"unknown\",\n llmModel(event) ?? \"unknown\",\n llmFinishReason(event) ?? \"unknown\",\n event.tokenUsage?.input ?? 0,\n event.tokenUsage?.output ?? 0,\n event.tokenUsage?.total ?? 0,\n event.tokenUsage?.cached ?? 0,\n ].join(\":\"),\n );\n}\n\nfunction errorShape(context: TraceCheckContext): string[] {\n return context.events\n .filter((event) => event.status === \"error\" || event.error !== undefined)\n .map((event) =>\n [\n event.kind,\n event.name,\n event.error?.name ?? \"Error\",\n event.error?.code ?? \"unknown\",\n ].join(\":\"),\n )\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction retrievalShape(context: TraceCheckContext): string[] {\n return finishedEvents(context, \"RETRIEVER\")\n .map((event) =>\n signalName(event, [\"retrievalName\", \"retrieverName\", \"retriever\"], [\"retriever:\", \"retrieval:\"]),\n )\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction guardrailShape(context: TraceCheckContext): string[] {\n return guardrailEvents(context)\n .map((event) => signalName(event, [\"guardrailName\", \"guardrail\", \"guardrailId\"], [\"guardrail:\"]))\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction firstEvidenceForKind(\n context: TraceCheckContext,\n kind: PersistedInspectEvent[\"kind\"],\n path: string,\n): TraceCheckEvidence[] {\n const event = context.events.find((candidate) => candidate.kind === kind);\n return event ? [eventEvidence(event, path)] : runEvidence(context.selectedRun);\n}\n\nfunction baselineDiffFinding(\n message: string,\n evidence: readonly TraceCheckEvidence[],\n expected: unknown,\n actual: unknown,\n): TraceCheckFinding {\n return failFinding(\"baseline.regression\", message, evidence, expected, actual);\n}\n\n/**\n * Create the experimental built-in run status rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createRunStatusRule(options: RunStatusRuleOptions = {}): TraceCheckRule {\n const expected = options.expected ?? \"ok\";\n const allowIncomplete = options.allowIncomplete === true;\n return {\n id: \"run.status\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n const actual = context.selectedRun?.status ?? \"unknown\";\n if (actual !== expected) {\n findings.push(\n failFinding(\n \"run.status\",\n `Run status ${actual} did not match expected ${expected}.`,\n runEvidence(context.selectedRun),\n expected,\n actual,\n ),\n );\n }\n if (!allowIncomplete) {\n const running = context.events.filter((event) => event.status === \"running\");\n if (running.length > 0) {\n findings.push(\n failFinding(\n \"run.status\",\n \"Run contains incomplete running events.\",\n running.map((event) => eventEvidence(event)),\n \"no running events\",\n running.length,\n ),\n );\n }\n }\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in run duration rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createRunDurationRule(options: RunDurationRuleOptions): TraceCheckRule {\n return {\n id: \"run.duration\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const actual = context.selectedRun?.durationMs;\n if (actual === undefined || actual <= options.maxDurationMs) return [];\n return [\n failFinding(\n \"run.duration\",\n `Run duration ${actual}ms exceeded ${options.maxDurationMs}ms.`,\n runEvidence(context.selectedRun),\n { maxDurationMs: options.maxDurationMs },\n actual,\n ),\n ];\n },\n };\n}\n\n/**\n * Fail when any step duration exceeds the configured maximum.\n */\nexport function createMaxStepDurationRule(options: MaxStepDurationRuleOptions): TraceCheckRule {\n return {\n id: \"run.maxStepDuration\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const over = context.events.filter((event) => {\n const duration = eventDurationMs(event);\n return duration !== undefined && duration > options.maxDurationMs;\n });\n if (over.length === 0) return [];\n return [\n failFinding(\n \"run.maxStepDuration\",\n `${over.length} step(s) exceeded max duration ${options.maxDurationMs}ms.`,\n over.map((event) => eventEvidence(event, \"durationMs\")),\n { maxDurationMs: options.maxDurationMs },\n over.map((event) => ({\n eventId: event.eventId,\n name: event.name,\n durationMs: eventDurationMs(event),\n })),\n ),\n ];\n },\n };\n}\n\n/**\n * Detect stalled runs: running events and optionally started-but-unended events.\n */\nexport function createStallDetectionRule(\n options: StallDetectionRuleOptions = {},\n): TraceCheckRule {\n const requireEndedAt = options.requireEndedAt === true;\n return {\n id: \"run.stall\",\n category: \"run\",\n defaultSeverity: \"warning\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n const running = context.events.filter((event) => event.status === \"running\");\n if (running.length > 0) {\n findings.push(\n failFinding(\n \"run.stall\",\n `Found ${running.length} event(s) still running (possible stall).`,\n running.map((event) => eventEvidence(event, \"status\")),\n \"no running events\",\n running.length,\n ),\n );\n }\n if (requireEndedAt) {\n const incomplete = context.events.filter(\n (event) =>\n event.startedAt !== undefined &&\n event.endedAt === undefined &&\n event.status !== \"running\",\n );\n if (incomplete.length > 0) {\n findings.push(\n failFinding(\n \"run.stall\",\n `Found ${incomplete.length} started event(s) without endedAt.`,\n incomplete.map((event) => eventEvidence(event, \"endedAt\")),\n \"endedAt for started events\",\n incomplete.length,\n ),\n );\n }\n }\n return findings;\n },\n };\n}\n\n/**\n * Require a completed run with no running events.\n */\nexport function createRequireCompletedRule(): TraceCheckRule {\n return {\n id: \"run.requireCompleted\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n const runStatus = context.selectedRun?.status;\n if (runStatus === \"running\") {\n findings.push(\n failFinding(\n \"run.requireCompleted\",\n \"Run is still running.\",\n runEvidence(context.selectedRun),\n \"completed run\",\n runStatus,\n ),\n );\n }\n const running = context.events.filter((event) => event.status === \"running\");\n if (running.length > 0) {\n findings.push(\n failFinding(\n \"run.requireCompleted\",\n `Run has ${running.length} incomplete running event(s).`,\n running.map((event) => eventEvidence(event, \"status\")),\n \"no running events\",\n running.length,\n ),\n );\n }\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in event count rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createRunEventCountRule(options: RunEventCountRuleOptions): TraceCheckRule {\n return {\n id: \"run.eventCount\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const count = context.events.filter(\n (event) => options.kind === undefined || event.kind === options.kind,\n ).length;\n const findings: TraceCheckFinding[] = [];\n if (options.min !== undefined && count < options.min) {\n findings.push(\n failFinding(\n \"run.eventCount\",\n `Event count ${count} was below minimum ${options.min}.`,\n runEvidence(context.selectedRun),\n { kind: options.kind, min: options.min },\n count,\n ),\n );\n }\n if (options.max !== undefined && count > options.max) {\n findings.push(\n failFinding(\n \"run.eventCount\",\n `Event count ${count} exceeded maximum ${options.max}.`,\n runEvidence(context.selectedRun),\n { kind: options.kind, max: options.max },\n count,\n ),\n );\n }\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in run depth rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createRunDepthRule(options: RunDepthRuleOptions): TraceCheckRule {\n return {\n id: \"run.depth\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const nodes = [...context.nodesByEventId.values()];\n const maxDepth = nodes.reduce((max, node) => Math.max(max, node.depth), 0);\n if (maxDepth <= options.maxDepth) return [];\n const deepest = nodes.filter((node) => node.depth === maxDepth);\n return [\n failFinding(\n \"run.depth\",\n `Run depth ${maxDepth} exceeded ${options.maxDepth}.`,\n deepest.map((node) => ({\n runId: node.event.runId,\n eventId: node.event.eventId,\n parentId: node.event.parentId,\n kind: node.event.kind,\n name: node.event.name,\n status: node.event.status,\n })),\n { maxDepth: options.maxDepth },\n maxDepth,\n ),\n ];\n },\n };\n}\n\n/**\n * Create the experimental built-in tool usage rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createToolUsageRule(options: ToolUsageRuleOptions): TraceCheckRule {\n return {\n id: \"tool.usage\",\n category: \"tool\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const tools = finishedEvents(context, \"TOOL\");\n const names = tools.map(toolName);\n const nameSet = new Set(names);\n const findings: TraceCheckFinding[] = [];\n\n for (const required of options.required ?? []) {\n if (!nameSet.has(required)) {\n findings.push(\n failFinding(\"tool.usage\", `Required tool ${required} did not appear.`, runEvidence(context.selectedRun), required, names),\n );\n }\n }\n\n const forbidden = new Set(options.forbidden ?? []);\n const allowed = options.allowed ? new Set(options.allowed) : undefined;\n for (const event of tools) {\n const name = toolName(event);\n if (forbidden.has(name)) {\n findings.push(\n failFinding(\"tool.usage\", `Forbidden tool ${name} appeared.`, [eventEvidence(event)], \"tool absent\", name),\n );\n }\n if (allowed && !allowed.has(name)) {\n findings.push(\n failFinding(\"tool.usage\", `Tool ${name} is not in the allowed tool set.`, [eventEvidence(event)], [...allowed].sort(), name),\n );\n }\n }\n\n if (options.minCount !== undefined && tools.length < options.minCount) {\n findings.push(\n failFinding(\"tool.usage\", `Tool count ${tools.length} was below minimum ${options.minCount}.`, runEvidence(context.selectedRun), { minCount: options.minCount }, tools.length),\n );\n }\n if (options.maxCount !== undefined && tools.length > options.maxCount) {\n findings.push(\n failFinding(\"tool.usage\", `Tool count ${tools.length} exceeded maximum ${options.maxCount}.`, tools.map((event) => eventEvidence(event)), { maxCount: options.maxCount }, tools.length),\n );\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in tool ordering rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createToolOrderingRule(options: ToolOrderingRuleOptions): TraceCheckRule {\n return {\n id: \"tool.order\",\n category: \"tool\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const tools = finishedEvents(context, \"TOOL\");\n const index = firstIndexByName(tools);\n const beforeIndex = index.get(options.before);\n const afterIndex = index.get(options.after);\n if (beforeIndex === undefined || afterIndex === undefined || beforeIndex < afterIndex) {\n return [];\n }\n return [\n failFinding(\n \"tool.order\",\n `Tool ${options.before} must appear before ${options.after}.`,\n [eventEvidence(tools[beforeIndex]!), eventEvidence(tools[afterIndex]!)],\n { before: options.before, after: options.after },\n tools.map(toolName),\n ),\n ];\n },\n };\n}\n\n/**\n * Create the experimental built-in tool failure/retry rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createToolFailureRule(options: ToolFailureRuleOptions): TraceCheckRule {\n return {\n id: \"tool.failures\",\n category: \"tool\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const tools = finishedEvents(context, \"TOOL\");\n const failures = tools.filter((event) => event.status === \"error\");\n const retries = tools\n .map((event) => ({ event, count: retryCount(event) }))\n .filter((item): item is { event: PersistedInspectEvent; count: number } => item.count !== undefined);\n const findings: TraceCheckFinding[] = [];\n\n if (options.maxFailures !== undefined && failures.length > options.maxFailures) {\n findings.push(\n failFinding(\n \"tool.failures\",\n `Tool failure count ${failures.length} exceeded ${options.maxFailures}.`,\n failures.map((event) => eventEvidence(event)),\n { maxFailures: options.maxFailures },\n failures.length,\n ),\n );\n }\n\n if (options.maxRetries !== undefined) {\n const excessiveRetries = retries.filter((item) => item.count > options.maxRetries!);\n if (excessiveRetries.length > 0) {\n findings.push(\n failFinding(\n \"tool.failures\",\n `Tool retry count exceeded ${options.maxRetries}.`,\n excessiveRetries.map((item) => eventEvidence(item.event, \"attributes.retryCount\")),\n { maxRetries: options.maxRetries },\n excessiveRetries.map((item) => ({ tool: toolName(item.event), retries: item.count })),\n ),\n );\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in LLM usage rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createLlmUsageRule(options: LlmUsageRuleOptions): TraceCheckRule {\n return {\n id: \"llm.usage\",\n category: \"llm\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const llms = finishedEvents(context, \"LLM\");\n const findings: TraceCheckFinding[] = [];\n const allowedModels = options.allowedModels ? new Set(options.allowedModels) : undefined;\n const allowedProviders = options.allowedProviders ? new Set(options.allowedProviders) : undefined;\n const finishReasons = options.finishReasons ? new Set(options.finishReasons) : undefined;\n\n if (options.maxCalls !== undefined && llms.length > options.maxCalls) {\n findings.push(\n failFinding(\n \"llm.usage\",\n `LLM call count ${llms.length} exceeded ${options.maxCalls}.`,\n llms.map((event) => eventEvidence(event)),\n { maxCalls: options.maxCalls },\n llms.length,\n ),\n );\n }\n\n for (const event of llms) {\n const model = llmModel(event);\n const provider = llmProvider(event);\n const finishReason = llmFinishReason(event);\n if (allowedModels && (!model || !allowedModels.has(model))) {\n findings.push(\n failFinding(\"llm.usage\", `LLM model ${model ?? \"unknown\"} is not allowed.`, [eventEvidence(event, \"attributes.model\")], [...allowedModels].sort(), model ?? \"unknown\"),\n );\n }\n if (allowedProviders && (!provider || !allowedProviders.has(provider))) {\n findings.push(\n failFinding(\"llm.usage\", `LLM provider ${provider ?? \"unknown\"} is not allowed.`, [eventEvidence(event, \"attributes.provider\")], [...allowedProviders].sort(), provider ?? \"unknown\"),\n );\n }\n if (finishReasons && (!finishReason || !finishReasons.has(finishReason))) {\n findings.push(\n failFinding(\"llm.usage\", `LLM finish reason ${finishReason ?? \"unknown\"} is not allowed.`, [eventEvidence(event, \"attributes.finishReason\")], [...finishReasons].sort(), finishReason ?? \"unknown\"),\n );\n }\n }\n\n const tokenTotals = llms.reduce(\n (totals, event) => ({\n input: totals.input + (event.tokenUsage?.input ?? 0),\n output: totals.output + (event.tokenUsage?.output ?? 0),\n total: totals.total + (event.tokenUsage?.total ?? 0),\n cached: totals.cached + (event.tokenUsage?.cached ?? 0),\n }),\n { input: 0, output: 0, total: 0, cached: 0 },\n );\n const tokenLimits = [\n [\"input\", options.maxInputTokens],\n [\"output\", options.maxOutputTokens],\n [\"total\", options.maxTotalTokens],\n [\"cached\", options.maxCachedTokens],\n ] as const;\n for (const [key, limit] of tokenLimits) {\n if (limit !== undefined && tokenTotals[key] > limit) {\n findings.push(\n failFinding(\n \"llm.usage\",\n `LLM ${key} token count ${tokenTotals[key]} exceeded ${limit}.`,\n llms.map((event) => eventEvidence(event, `tokenUsage.${key}`)),\n { [`max${key[0]!.toUpperCase()}${key.slice(1)}Tokens`]: limit },\n tokenTotals[key],\n ),\n );\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in structure incomplete rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createStructureIncompleteRule(\n options: StructureIncompleteRuleOptions = {},\n): TraceCheckRule {\n return {\n id: \"structure.incomplete\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n if (!options.allowRunning) {\n const running = context.events.filter((event) => event.status === \"running\");\n if (running.length > 0) {\n findings.push(\n failFinding(\n \"structure.incomplete\",\n \"Trace contains incomplete running events.\",\n running.map((event) => eventEvidence(event, \"status\")),\n \"no running events\",\n running.length,\n ),\n );\n }\n }\n\n if (options.requireEndedAtForStarted) {\n const missingEndedAt = context.events.filter(\n (event) =>\n event.startedAt !== undefined &&\n event.endedAt === undefined &&\n event.status !== \"running\",\n );\n if (missingEndedAt.length > 0) {\n findings.push(\n failFinding(\n \"structure.incomplete\",\n \"Trace contains events with startedAt but no endedAt.\",\n missingEndedAt.map((event) => eventEvidence(event, \"endedAt\")),\n \"endedAt for started events\",\n missingEndedAt.length,\n ),\n );\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in structure orphan rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createStructureOrphanRule(\n options: StructureOrphanRuleOptions = {},\n): TraceCheckRule {\n const allowMarkedUnresolved = options.allowMarkedUnresolved ?? true;\n return {\n id: \"structure.orphan\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const byId = eventMap(context.events);\n const orphans = context.events.filter((event) => {\n if (!event.parentId || byId.has(event.parentId)) return false;\n return !(allowMarkedUnresolved && parentMarkedUnresolved(event));\n });\n if (orphans.length === 0) return [];\n return [\n failFinding(\n \"structure.orphan\",\n \"Trace contains events whose parentId is not present in the selected run.\",\n orphans.map((event) => eventEvidence(event, \"parentId\")),\n \"parentId resolves to an event in the selected run\",\n orphans.length,\n ),\n ];\n },\n };\n}\n\n/**\n * Create the experimental built-in structure cycle rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createStructureCycleRule(): TraceCheckRule {\n return {\n id: \"structure.cycle\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const byId = eventMap(context.events);\n const seenCycles = new Set<string>();\n const findings: TraceCheckFinding[] = [];\n\n for (const event of [...context.events].sort((a, b) => a.eventId.localeCompare(b.eventId))) {\n const path: PersistedInspectEvent[] = [];\n const seenAt = new Map<string, number>();\n let current: PersistedInspectEvent | undefined = event;\n\n while (current) {\n const existing = seenAt.get(current.eventId);\n if (existing !== undefined) {\n const cycle = path.slice(existing);\n const key = cycle.map((item) => item.eventId).sort().join(\"\\0\");\n if (!seenCycles.has(key)) {\n seenCycles.add(key);\n findings.push(\n failFinding(\n \"structure.cycle\",\n \"Trace contains a parentId cycle.\",\n cycle.map((item) => eventEvidence(item, \"parentId\")),\n \"acyclic parentId graph\",\n cycle.map((item) => item.eventId).sort(),\n ),\n );\n }\n break;\n }\n seenAt.set(current.eventId, path.length);\n path.push(current);\n current = current.parentId ? byId.get(current.parentId) : undefined;\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in structure relationship rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createStructureRelationshipRule(\n options: StructureRelationshipRuleOptions = {},\n): TraceCheckRule {\n return {\n id: \"structure.relationship\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const byId = eventMap(context.events);\n const findings: TraceCheckFinding[] = [];\n const minConfidence = options.minConfidence;\n\n for (const event of context.events) {\n if (\n minConfidence &&\n CONFIDENCE_RANK[event.confidence] < CONFIDENCE_RANK[minConfidence]\n ) {\n findings.push(\n failFinding(\n \"structure.relationship\",\n `Event confidence ${event.confidence} is below ${minConfidence}.`,\n [eventEvidence(event, \"confidence\")],\n { minConfidence },\n event.confidence,\n ),\n );\n }\n\n if (!event.parentId) continue;\n if (event.parentId === event.eventId) {\n findings.push(\n failFinding(\n \"structure.relationship\",\n \"Event parentId points to itself.\",\n [eventEvidence(event, \"parentId\")],\n \"parentId references a distinct event\",\n \"self\",\n ),\n );\n continue;\n }\n\n const parent = byId.get(event.parentId);\n if (!parent) continue;\n\n if (options.requireParentBeforeChild) {\n const parentTime = eventStartMs(parent);\n const childTime = eventStartMs(event);\n if (\n parentTime !== undefined &&\n childTime !== undefined &&\n parentTime > childTime\n ) {\n findings.push(\n failFinding(\n \"structure.relationship\",\n \"Parent event starts after child event.\",\n [eventEvidence(parent), eventEvidence(event, \"parentId\")],\n \"parent start <= child start\",\n { parentEventId: parent.eventId, childEventId: event.eventId },\n ),\n );\n }\n }\n\n if (options.requireTraceParentSpan && parent.trace?.spanId && event.trace) {\n const actual = event.trace.parentSpanId;\n if (actual !== parent.trace.spanId) {\n findings.push(\n failFinding(\n \"structure.relationship\",\n \"Trace parentSpanId does not match parent spanId.\",\n [eventEvidence(event, \"trace.parentSpanId\")],\n { parentSpanId: parent.trace.spanId },\n actual ?? \"missing\",\n ),\n );\n }\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in structure parallel-width rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createStructureParallelWidthRule(\n options: StructureParallelWidthRuleOptions,\n): TraceCheckRule {\n return {\n id: \"structure.parallelWidth\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n const byId = eventMap(context.events);\n\n if (options.maxChildren !== undefined) {\n for (const [parentId, children] of context.childrenByParentId.entries()) {\n if (children.length <= options.maxChildren) continue;\n const parent = byId.get(parentId);\n findings.push(\n failFinding(\n \"structure.parallelWidth\",\n `Parent ${parentId} has ${children.length} children, exceeding ${options.maxChildren}.`,\n [\n ...(parent ? [eventEvidence(parent)] : [{ runId: context.selectedRun?.runId, eventId: parentId }]),\n ...children.map((child) => ({\n runId: child.event.runId,\n eventId: child.event.eventId,\n parentId: child.event.parentId,\n kind: child.event.kind,\n name: child.event.name,\n status: child.event.status,\n })),\n ],\n { maxChildren: options.maxChildren },\n children.length,\n ),\n );\n }\n }\n\n if (options.maxConcurrent !== undefined) {\n const intervals = context.events\n .map((event) => ({ event, start: eventStartMs(event), end: eventEndMs(event) }))\n .filter(\n (item): item is { event: PersistedInspectEvent; start: number; end: number } =>\n item.start !== undefined && item.end !== undefined && item.end > item.start,\n );\n const points = intervals.flatMap((item) => [\n { time: item.start, delta: 1, event: item.event },\n { time: item.end, delta: -1, event: item.event },\n ]);\n points.sort((a, b) => {\n const byTime = a.time - b.time;\n if (byTime !== 0) return byTime;\n const byDelta = a.delta - b.delta;\n if (byDelta !== 0) return byDelta;\n return a.event.eventId.localeCompare(b.event.eventId);\n });\n\n const active = new Map<string, PersistedInspectEvent>();\n let maxActive: PersistedInspectEvent[] = [];\n for (const point of points) {\n if (point.delta > 0) {\n active.set(point.event.eventId, point.event);\n if (active.size > maxActive.length) {\n maxActive = [...active.values()].sort((a, b) => a.eventId.localeCompare(b.eventId));\n }\n } else {\n active.delete(point.event.eventId);\n }\n }\n\n if (maxActive.length > options.maxConcurrent) {\n findings.push(\n failFinding(\n \"structure.parallelWidth\",\n `Concurrent event width ${maxActive.length} exceeded ${options.maxConcurrent}.`,\n maxActive.map((event) => eventEvidence(event)),\n { maxConcurrent: options.maxConcurrent },\n maxActive.length,\n ),\n );\n }\n }\n\n return findings;\n },\n };\n}\n\nfunction createSignalRule(\n ruleId: \"structure.retrieval\" | \"structure.guardrail\" | \"structure.decision\",\n label: string,\n options: TraceSignalRuleOptions,\n selectEvents: (context: TraceCheckContext) => PersistedInspectEvent[],\n nameForEvent: (event: PersistedInspectEvent) => string,\n): TraceCheckRule {\n return {\n id: ruleId,\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const events = selectEvents(context);\n const names = events.map(nameForEvent);\n const nameSet = new Set(names);\n const findings: TraceCheckFinding[] = [];\n\n for (const required of sortedStrings(options.required)) {\n if (!nameSet.has(required)) {\n findings.push(\n failFinding(\n ruleId,\n `Required ${label} ${required} did not appear.`,\n runEvidence(context.selectedRun),\n required,\n names,\n ),\n );\n }\n }\n\n const forbidden = new Set(options.forbidden ?? []);\n const allowed = options.allowed ? new Set(options.allowed) : undefined;\n for (const event of events) {\n const name = nameForEvent(event);\n if (forbidden.has(name)) {\n findings.push(\n failFinding(\n ruleId,\n `Forbidden ${label} ${name} appeared.`,\n [eventEvidence(event)],\n `${label} absent`,\n name,\n ),\n );\n }\n if (allowed && !allowed.has(name)) {\n findings.push(\n failFinding(\n ruleId,\n `${label[0]!.toUpperCase()}${label.slice(1)} ${name} is not in the allowed set.`,\n [eventEvidence(event)],\n [...allowed].sort(),\n name,\n ),\n );\n }\n }\n\n if (options.minCount !== undefined && events.length < options.minCount) {\n findings.push(\n failFinding(\n ruleId,\n `${label[0]!.toUpperCase()}${label.slice(1)} count ${events.length} was below minimum ${options.minCount}.`,\n runEvidence(context.selectedRun),\n { minCount: options.minCount },\n events.length,\n ),\n );\n }\n if (options.maxCount !== undefined && events.length > options.maxCount) {\n findings.push(\n failFinding(\n ruleId,\n `${label[0]!.toUpperCase()}${label.slice(1)} count ${events.length} exceeded maximum ${options.maxCount}.`,\n events.map((event) => eventEvidence(event)),\n { maxCount: options.maxCount },\n events.length,\n ),\n );\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in retrieval signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createRetrievalRule(options: RetrievalRuleOptions): TraceCheckRule {\n return createSignalRule(\n \"structure.retrieval\",\n \"retrieval\",\n options,\n (context) => finishedEvents(context, \"RETRIEVER\"),\n (event) => signalName(event, [\"retrievalName\", \"retrieverName\", \"retriever\"], [\"retriever:\", \"retrieval:\"]),\n );\n}\n\n/**\n * Create the experimental built-in guardrail signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createGuardrailRule(options: GuardrailRuleOptions): TraceCheckRule {\n return createSignalRule(\n \"structure.guardrail\",\n \"guardrail\",\n options,\n guardrailEvents,\n (event) => signalName(event, [\"guardrailName\", \"guardrail\", \"guardrailId\"], [\"guardrail:\"]),\n );\n}\n\n/**\n * Create the experimental built-in decision signal rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createDecisionRule(options: DecisionRuleOptions): TraceCheckRule {\n return createSignalRule(\n \"structure.decision\",\n \"decision\",\n options,\n (context) => finishedEvents(context, \"DECISION\"),\n (event) => signalName(event, [\"decisionName\", \"decision\", \"decisionId\"], [\"decision:\"]),\n );\n}\n\n/**\n * Create the experimental built-in safety redaction rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createSafetyRedactionRule(\n options: SafetyRedactionRuleOptions = {},\n): TraceCheckRule {\n const sensitiveKeys = options.sensitiveKeys ?? DEFAULT_SENSITIVE_KEYS;\n const markers = options.redactedMarkers ?? [\"[REDACTED]\", \"[REDACTED:\"];\n return {\n id: \"safety.redaction\",\n category: \"safety\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n for (const event of context.events) {\n for (const entry of eventValueEntries(event, { includeSummaries: true, includeError: true })) {\n if (!isSensitiveKey(entry.key ?? lastPathSegment(entry.path), sensitiveKeys)) continue;\n if (typeof entry.value === \"string\" && hasRedactionMarker(entry.value, markers)) continue;\n findings.push(\n failFinding(\n \"safety.redaction\",\n `Sensitive-looking field at ${entry.path} is not redacted.`,\n [eventEvidence(event, entry.path)],\n \"redaction marker\",\n { path: entry.path, valueType: valueType(entry.value) },\n ),\n );\n }\n }\n return limitFindings(findings, options.maxFindings);\n },\n };\n}\n\n/**\n * Create the experimental built-in raw content path safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createSafetyRawContentRule(\n options: SafetyRawContentRuleOptions = {},\n): TraceCheckRule {\n const forbiddenKeys = options.forbiddenKeys ?? DEFAULT_RAW_CONTENT_KEYS;\n return {\n id: \"safety.rawPrompt\",\n category: \"safety\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n for (const event of context.events) {\n for (const entry of eventValueEntries(event, { includeSummaries: options.includeSummaries })) {\n const key = entry.key ?? lastPathSegment(entry.path);\n if (!isRawContentKey(key, forbiddenKeys)) continue;\n findings.push(\n failFinding(\n \"safety.rawPrompt\",\n `Raw content-like field ${entry.path} is present.`,\n [eventEvidence(event, entry.path)],\n \"metadata-only trace fields\",\n { path: entry.path, valueType: valueType(entry.value) },\n ),\n );\n }\n }\n return limitFindings(findings, options.maxFindings);\n },\n };\n}\n\n/**\n * Create the experimental built-in secret pattern safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createSafetySecretPatternRule(\n options: SafetySecretPatternRuleOptions = {},\n): TraceCheckRule {\n const patterns = options.patterns ?? DEFAULT_SECRET_PATTERNS;\n const maxStringLength = options.maxStringLength ?? 4_096;\n return {\n id: \"safety.secretPattern\",\n category: \"safety\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n for (const event of context.events) {\n for (const entry of eventValueEntries(event, { includeSummaries: true, includeError: true })) {\n if (typeof entry.value !== \"string\") continue;\n const sample = entry.value.slice(0, maxStringLength);\n for (const pattern of patterns) {\n pattern.pattern.lastIndex = 0;\n if (!pattern.pattern.test(sample)) continue;\n pattern.pattern.lastIndex = 0;\n findings.push(\n failFinding(\n \"safety.secretPattern\",\n `Secret-like pattern ${pattern.id} matched at ${entry.path}.`,\n [eventEvidence(event, entry.path)],\n \"no secret-like strings\",\n { pattern: pattern.id, path: entry.path },\n ),\n );\n break;\n }\n }\n }\n return limitFindings(findings, options.maxFindings);\n },\n };\n}\n\n/**\n * Create the experimental built-in oversized attribute safety rule.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createSafetyOversizedAttributeRule(\n options: SafetyOversizedAttributeRuleOptions,\n): TraceCheckRule {\n return {\n id: \"safety.oversizedAttribute\",\n category: \"safety\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n for (const event of context.events) {\n for (const entry of eventValueEntries(event, { includeSummaries: true, includeError: true })) {\n if (\n typeof entry.value === \"string\" &&\n options.maxStringLength !== undefined &&\n entry.value.length > options.maxStringLength\n ) {\n findings.push(\n failFinding(\n \"safety.oversizedAttribute\",\n `String at ${entry.path} exceeds ${options.maxStringLength} characters.`,\n [eventEvidence(event, entry.path)],\n { maxStringLength: options.maxStringLength },\n { path: entry.path, length: entry.value.length },\n ),\n );\n }\n\n if (\n Array.isArray(entry.value) &&\n options.maxArrayLength !== undefined &&\n entry.value.length > options.maxArrayLength\n ) {\n findings.push(\n failFinding(\n \"safety.oversizedAttribute\",\n `Array at ${entry.path} exceeds ${options.maxArrayLength} items.`,\n [eventEvidence(event, entry.path)],\n { maxArrayLength: options.maxArrayLength },\n { path: entry.path, length: entry.value.length },\n ),\n );\n }\n\n if (\n isRecord(entry.value) &&\n options.maxObjectKeys !== undefined &&\n Object.keys(entry.value).length > options.maxObjectKeys\n ) {\n findings.push(\n failFinding(\n \"safety.oversizedAttribute\",\n `Object at ${entry.path} exceeds ${options.maxObjectKeys} keys.`,\n [eventEvidence(event, entry.path)],\n { maxObjectKeys: options.maxObjectKeys },\n { path: entry.path, keys: Object.keys(entry.value).length },\n ),\n );\n }\n\n if (options.maxSerializedBytes !== undefined) {\n const bytes = serializedByteLength(entry.value);\n if (bytes !== undefined && bytes > options.maxSerializedBytes) {\n findings.push(\n failFinding(\n \"safety.oversizedAttribute\",\n `Value at ${entry.path} exceeds ${options.maxSerializedBytes} serialized bytes.`,\n [eventEvidence(event, entry.path)],\n { maxSerializedBytes: options.maxSerializedBytes },\n { path: entry.path, bytes },\n ),\n );\n }\n }\n }\n }\n return limitFindings(findings, options.maxFindings);\n },\n };\n}\n\n/**\n * Create the experimental built-in baseline regression rule.\n *\n * The rule compares safe structural summaries from a normalized baseline\n * against the candidate context. It intentionally ignores raw prompt/output,\n * request/response body, header, and tool payload text.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function createBaselineRegressionRule(\n options: BaselineRegressionRuleOptions,\n): TraceCheckRule {\n return {\n id: \"baseline.regression\",\n category: \"baseline\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const baselineSelection = resolveSelectedRun(options.baseline, options.baselineRunId);\n if (baselineSelection.diagnostics.length > 0 || !baselineSelection.run) {\n return [\n failFinding(\n \"baseline.regression\",\n \"Baseline run could not be selected.\",\n runEvidence(context.selectedRun),\n \"selectable baseline run\",\n baselineSelection.diagnostics.map((item) => item.code),\n ),\n ];\n }\n\n const baselineFacts = buildFacts(options.baseline, baselineSelection.run);\n const baselineContext: TraceCheckContext = {\n ...baselineFacts,\n selectedRun: baselineSelection.run,\n sourceLabel: options.baseline.sourceLabel,\n };\n const findings: TraceCheckFinding[] = [];\n const durationToleranceMs = options.durationToleranceMs ?? 0;\n\n if (options.compareFormat && baselineContext.format !== context.format) {\n findings.push(\n baselineDiffFinding(\n \"Trace format differs from baseline.\",\n runEvidence(context.selectedRun),\n baselineContext.format,\n context.format,\n ),\n );\n }\n\n const baselineRunStatus = baselineContext.selectedRun?.status ?? \"unknown\";\n const candidateRunStatus = context.selectedRun?.status ?? \"unknown\";\n if (baselineRunStatus !== candidateRunStatus) {\n findings.push(\n baselineDiffFinding(\n \"Run status differs from baseline.\",\n runEvidence(context.selectedRun),\n baselineRunStatus,\n candidateRunStatus,\n ),\n );\n }\n\n const baselineDuration = baselineContext.selectedRun?.durationMs;\n const candidateDuration = context.selectedRun?.durationMs;\n if (\n baselineDuration !== undefined &&\n candidateDuration !== undefined &&\n Math.abs(candidateDuration - baselineDuration) > durationToleranceMs\n ) {\n findings.push(\n baselineDiffFinding(\n \"Run duration differs from baseline beyond tolerance.\",\n runEvidence(context.selectedRun),\n { durationMs: baselineDuration, toleranceMs: durationToleranceMs },\n candidateDuration,\n ),\n );\n }\n\n const comparisons = [\n {\n label: \"Tree shape\",\n path: \"tree\",\n expected: treeShape(baselineContext.rootNodes),\n actual: treeShape(context.rootNodes),\n evidence: runEvidence(context.selectedRun),\n },\n {\n label: \"Event statuses\",\n path: \"status\",\n expected: statusShape(baselineContext),\n actual: statusShape(context),\n evidence: runEvidence(context.selectedRun),\n },\n {\n label: \"Tool usage\",\n path: \"tool\",\n expected: toolShape(baselineContext),\n actual: toolShape(context),\n evidence: firstEvidenceForKind(context, \"TOOL\", \"tool\"),\n },\n {\n label: \"LLM usage\",\n path: \"llm\",\n expected: llmShape(baselineContext),\n actual: llmShape(context),\n evidence: firstEvidenceForKind(context, \"LLM\", \"llm\"),\n },\n {\n label: \"Error profile\",\n path: \"error\",\n expected: errorShape(baselineContext),\n actual: errorShape(context),\n evidence: firstEvidenceForKind(context, \"ERROR\", \"error\"),\n },\n {\n label: \"Retrieval signals\",\n path: \"retrieval\",\n expected: retrievalShape(baselineContext),\n actual: retrievalShape(context),\n evidence: firstEvidenceForKind(context, \"RETRIEVER\", \"retrieval\"),\n },\n {\n label: \"Guardrail signals\",\n path: \"guardrail\",\n expected: guardrailShape(baselineContext),\n actual: guardrailShape(context),\n evidence: guardrailEvents(context)[0]\n ? [eventEvidence(guardrailEvents(context)[0]!, \"guardrail\")]\n : runEvidence(context.selectedRun),\n },\n ];\n\n for (const comparison of comparisons) {\n if (JSON.stringify(comparison.expected) === JSON.stringify(comparison.actual)) {\n continue;\n }\n findings.push(\n baselineDiffFinding(\n `${comparison.label} differs from baseline.`,\n comparison.evidence.length > 0\n ? comparison.evidence\n : [{ runId: context.selectedRun?.runId, path: comparison.path }],\n comparison.expected,\n comparison.actual,\n ),\n );\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Experimental rule for observed real-world outcomes (v4.4+).\n */\nexport interface ObservedOutcomeRuleOptions {\n failOn?: readonly ObservedOutcomeStatus[];\n}\n\nexport function createObservedOutcomeRule(\n options: ObservedOutcomeRuleOptions = {},\n): TraceCheckRule {\n const failOn = options.failOn ?? ([\"failed\"] as const);\n return {\n id: \"outcome.status\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const outcomes = extractOutcomesFromPersistedEvents(context.events);\n const matching = outcomesMatchingStatus(outcomes, failOn);\n if (matching.length === 0) return [];\n return [\n failFinding(\n \"outcome.status\",\n `Observed outcome count ${matching.length} matched [${failOn.join(\", \")}].`,\n matching.map((outcome) => ({\n runId: outcome.runId,\n eventId: outcome.outcomeId,\n ...(outcome.parentId !== undefined ? { parentId: outcome.parentId } : {}),\n kind: \"OUTCOME\",\n name: outcome.name,\n status: outcome.status,\n path: `outcome.${outcome.name}`,\n })),\n { failOn },\n matching.map((outcome) => ({\n name: outcome.name,\n status: outcome.status,\n expectation: outcome.expectation,\n })),\n ),\n ];\n },\n };\n}\n\n/**\n * Run experimental deterministic trace checks against normalized reader output.\n *\n * The engine is local-only and pure: it does not discover config files, read\n * trace files, call providers, perform network I/O, or mutate input objects.\n *\n * @experimental Available through `agent-inspect/checks`; the checks API may\n * evolve during the v1.x experimental period.\n */\nexport function runTraceChecks(\n input: TraceCheckInput,\n options: RunTraceChecksOptions = {},\n): TraceCheckResult {\n const selected = resolveSelectedRun(input, options.runId);\n if (selected.diagnostics.length > 0) {\n return errorResult(input, selected.diagnostics, selected.run);\n }\n\n const rules = selectRules(options.rules ?? [], options.select);\n if (rules.diagnostics.length > 0) {\n return errorResult(input, rules.diagnostics, selected.run);\n }\n\n const facts = buildFacts(input, selected.run);\n const context: TraceCheckContext = {\n ...facts,\n ...(selected.run ? { selectedRun: selected.run } : {}),\n ...(input.sourceLabel ? { sourceLabel: input.sourceLabel } : {}),\n };\n const diagnostics: TraceCheckDiagnostic[] = [];\n const findings: TraceCheckFinding[] = [];\n\n for (const rule of rules.rules) {\n try {\n findings.push(...rule.evaluate(context).map((finding) => normalizeFinding(rule, finding)));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n diagnostics.push(\n diagnostic(\"AI_CHECK_INTERNAL_ERROR\", `Rule ${rule.id} failed: ${message}`, rule.id),\n );\n }\n }\n\n if (diagnostics.length > 0) {\n return errorResult(input, diagnostics, selected.run);\n }\n\n const eventById = new Map(input.read.events.map((event) => [event.eventId, event] as const));\n const sortedFindings = findings.sort(compareFindings(eventById));\n const summary = summarize(sortedFindings, diagnostics);\n const status: TraceCheckStatus = summary.failed > 0 ? \"fail\" : \"pass\";\n\n return {\n ok: status === \"pass\",\n status,\n format: input.read.format,\n ...(selected.run ? { runId: selected.run.runId } : {}),\n summary,\n findings: sortedFindings,\n diagnostics,\n };\n}\n","import type { PersistedTokenUsage } from \"../types/persisted-inspect-event.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction nonNegativeFinite(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? value\n : undefined;\n}\n\n/**\n * Keeps the approved token vocabulary and derives total only when it is absent.\n * Cached tokens are informational and are never added to total.\n */\nexport function normalizeTokenUsage(\n value: unknown,\n): PersistedTokenUsage | undefined {\n if (!isRecord(value)) return undefined;\n\n const input = nonNegativeFinite(value.input);\n const output = nonNegativeFinite(value.output);\n const suppliedTotal = nonNegativeFinite(value.total);\n const cached = nonNegativeFinite(value.cached);\n const derivedTotal =\n input !== undefined && output !== undefined && Number.isFinite(input + output)\n ? input + output\n : undefined;\n const total =\n suppliedTotal ?? derivedTotal;\n\n if (\n input === undefined &&\n output === undefined &&\n total === undefined &&\n cached === undefined\n ) {\n return undefined;\n }\n\n return {\n ...(input !== undefined ? { input } : {}),\n ...(output !== undefined ? { output } : {}),\n ...(total !== undefined ? { total } : {}),\n ...(cached !== undefined ? { cached } : {}),\n };\n}\n","import { extractCorrelationMetadata } from \"../correlation-metadata.js\";\nimport type { InspectKind } from \"../types/inspect-event.js\";\nimport type {\n ErrorInfo,\n StepMetadata,\n StepType,\n TraceEvent,\n} from \"../types.js\";\nimport type {\n PersistedEventSource,\n PersistedEventStatus,\n PersistedInspectError,\n PersistedInspectEvent,\n PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\nimport { normalizeTokenUsage } from \"./token-usage.js\";\n\nexport interface TraceEventToPersistedOptions {\n /**\n * Stable index within the source event list.\n * Used only to make synthetic eventId deterministic when v0.1 has no eventId.\n */\n eventIndex?: number;\n\n /**\n * Optional source name override.\n * Default: \"trace-event\"\n */\n sourceName?: string;\n\n /**\n * Optional source version override.\n * Default: \"0.1\"\n */\n sourceVersion?: string;\n}\n\nfunction sanitizeIdPart(value: string): string {\n return value.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n}\n\nfunction nodeIdForEvent(event: TraceEvent): string {\n switch (event.event) {\n case \"run_started\":\n case \"run_completed\":\n return event.runId;\n case \"step_started\":\n case \"step_completed\":\n return event.stepId;\n case \"outcome_observed\":\n return event.outcomeId;\n default:\n return \"unknown\";\n }\n}\n\nfunction createPersistedEventId(event: TraceEvent, eventIndex: number): string {\n const runId = sanitizeIdPart(event.runId);\n const ev = sanitizeIdPart(event.event);\n const node = sanitizeIdPart(nodeIdForEvent(event));\n return `manual:${runId}:${ev}:${node}:${eventIndex}`;\n}\n\nfunction toIsoTimestamp(\n ms: number,\n): { iso: string; invalidTimestamp: boolean } {\n if (typeof ms !== \"number\" || !Number.isFinite(ms)) {\n return { iso: new Date(0).toISOString(), invalidTimestamp: true };\n }\n return { iso: new Date(ms).toISOString(), invalidTimestamp: false };\n}\n\nfunction buildSource(options?: TraceEventToPersistedOptions): PersistedEventSource {\n return {\n type: \"manual\",\n name: options?.sourceName ?? \"trace-event\",\n version: options?.sourceVersion ?? \"0.1\",\n };\n}\n\nfunction mapStepTypeToInspectKind(type: StepType): InspectKind {\n switch (type) {\n case \"run\":\n return \"RUN\";\n case \"llm\":\n return \"LLM\";\n case \"tool\":\n return \"TOOL\";\n case \"decision\":\n return \"DECISION\";\n case \"logic\":\n case \"state\":\n case \"custom\":\n return \"LOGIC\";\n default:\n return \"LOGIC\";\n }\n}\n\nfunction mapRunOrStepStatus(\n status: \"success\" | \"error\",\n): PersistedEventStatus {\n return status === \"success\" ? \"ok\" : \"error\";\n}\n\nfunction mapErrorInfo(\n error: ErrorInfo | undefined,\n): {\n persisted?: PersistedInspectError;\n errorStack?: string;\n} {\n if (!error?.message) {\n return {};\n }\n const out: {\n persisted: PersistedInspectError;\n errorStack?: string;\n } = {\n persisted: {\n message: error.message,\n name: \"Error\",\n },\n };\n if (typeof error.stack === \"string\" && error.stack.length > 0) {\n out.errorStack = error.stack;\n }\n return out;\n}\n\nfunction mapTokenUsageFromMetadata(\n metadata: StepMetadata | undefined,\n): PersistedTokenUsage | undefined {\n return normalizeTokenUsage(metadata?.tokens);\n}\n\nfunction compactAttributes(\n entries: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(entries)) {\n if (value !== undefined) {\n out[key] = value;\n }\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\n/**\n * Maps one v0.1 {@link TraceEvent} to a v0.2 {@link PersistedInspectEvent}.\n * Does not mutate `event`.\n */\nexport function traceEventToPersistedInspectEvent(\n event: TraceEvent,\n options?: TraceEventToPersistedOptions,\n): PersistedInspectEvent {\n const eventIndex = options?.eventIndex ?? 0;\n const eventId = createPersistedEventId(event, eventIndex);\n const source = buildSource(options);\n const tsMain = toIsoTimestamp(event.timestamp);\n\n switch (event.event) {\n case \"run_started\": {\n const tsStart = toIsoTimestamp(event.startTime);\n const correlation = extractCorrelationMetadata(event.metadata);\n const attributes = compactAttributes({\n legacyEvent: \"run_started\",\n metadata:\n event.metadata !== undefined ? { ...event.metadata } : undefined,\n correlationId: correlation?.correlationId,\n requestId: correlation?.requestId,\n decisionId: correlation?.decisionId,\n groupId: correlation?.groupId,\n invalidTimestamp:\n tsMain.invalidTimestamp || tsStart.invalidTimestamp ? true : undefined,\n });\n\n return {\n schemaVersion: \"0.2\",\n eventId,\n runId: event.runId,\n kind: \"RUN\",\n name: event.name,\n status: \"running\",\n timestamp: tsMain.iso,\n startedAt: tsStart.iso,\n confidence: \"explicit\",\n source,\n attributes,\n };\n }\n\n case \"run_completed\": {\n const tsEnd = toIsoTimestamp(event.endTime);\n const { persisted: error, errorStack } = mapErrorInfo(event.error);\n const attributes = compactAttributes({\n legacyEvent: \"run_completed\",\n errorStack,\n invalidTimestamp:\n tsMain.invalidTimestamp || tsEnd.invalidTimestamp ? true : undefined,\n });\n\n return {\n schemaVersion: \"0.2\",\n eventId,\n runId: event.runId,\n kind: \"RUN\",\n name: \"run\",\n status: mapRunOrStepStatus(event.status),\n timestamp: tsMain.iso,\n endedAt: tsEnd.iso,\n durationMs: event.durationMs,\n confidence: \"explicit\",\n source,\n attributes,\n error,\n };\n }\n\n case \"step_started\": {\n const tsStart = toIsoTimestamp(event.startTime);\n const tokenUsage = mapTokenUsageFromMetadata(event.metadata);\n const attributes = compactAttributes({\n legacyEvent: \"step_started\",\n stepId: event.stepId,\n stepType: event.type,\n metadata:\n event.metadata !== undefined ? { ...event.metadata } : undefined,\n invalidTimestamp:\n tsMain.invalidTimestamp || tsStart.invalidTimestamp ? true : undefined,\n });\n\n const out: PersistedInspectEvent = {\n schemaVersion: \"0.2\",\n eventId,\n runId: event.runId,\n kind: mapStepTypeToInspectKind(event.type),\n name: event.name,\n status: \"running\",\n timestamp: tsMain.iso,\n startedAt: tsStart.iso,\n confidence: \"explicit\",\n source,\n attributes,\n };\n if (event.parentId !== undefined) {\n out.parentId = event.parentId;\n }\n if (tokenUsage !== undefined) {\n out.tokenUsage = tokenUsage;\n }\n return out;\n }\n\n case \"step_completed\": {\n const tsEnd = toIsoTimestamp(event.endTime);\n const { persisted: error, errorStack } = mapErrorInfo(event.error);\n const attributes = compactAttributes({\n legacyEvent: \"step_completed\",\n stepId: event.stepId,\n errorStack,\n invalidTimestamp:\n tsMain.invalidTimestamp || tsEnd.invalidTimestamp ? true : undefined,\n });\n\n return {\n schemaVersion: \"0.2\",\n eventId,\n runId: event.runId,\n kind: \"LOGIC\",\n name: event.stepId,\n status: mapRunOrStepStatus(event.status),\n timestamp: tsMain.iso,\n endedAt: tsEnd.iso,\n durationMs: event.durationMs,\n confidence: \"explicit\",\n source,\n attributes,\n error,\n };\n }\n\n case \"outcome_observed\": {\n const tsObserved = toIsoTimestamp(event.observedAt);\n const attributes = compactAttributes({\n legacyEvent: \"outcome_observed\",\n outcomeId: event.outcomeId,\n outcomeStatus: event.status,\n expectation: event.expectation,\n method: event.method,\n actual: event.actual,\n evidence: event.evidence,\n observedAt: tsObserved.iso,\n invalidTimestamp:\n tsMain.invalidTimestamp || tsObserved.invalidTimestamp ? true : undefined,\n });\n\n const out: PersistedInspectEvent = {\n schemaVersion: \"0.2\",\n eventId,\n runId: event.runId,\n kind: \"OUTCOME\",\n name: event.name,\n status: event.status === \"failed\" ? \"error\" : \"ok\",\n timestamp: tsMain.iso,\n confidence: \"explicit\",\n source,\n attributes,\n };\n if (event.parentId !== undefined) {\n out.parentId = event.parentId;\n }\n if (event.actual !== undefined) {\n out.outputSummary = event.actual;\n }\n return out;\n }\n\n default: {\n const _exhaustive: never = event;\n throw new Error(`Unsupported trace event: ${(_exhaustive as TraceEvent).event}`);\n }\n }\n}\n\n/**\n * Maps a v0.1 trace event list to persisted v0.2 events (one output per input).\n */\nexport function traceEventsToPersistedInspectEvents(\n events: readonly TraceEvent[],\n options?: Omit<TraceEventToPersistedOptions, \"eventIndex\">,\n): PersistedInspectEvent[] {\n return events.map((event, index) =>\n traceEventToPersistedInspectEvent(event, { ...options, eventIndex: index }),\n );\n}\n","import type { InspectEvent, InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport type { LogIngestConfig } from \"../types/log-config.js\";\n\nexport interface TreeBuilderOptions {\n config?: LogIngestConfig;\n}\n\nfunction inc<T extends string>(map: Record<T, number>, key: T): void {\n map[key] = (map[key] ?? 0) + 1;\n}\n\nfunction computeRunStatus(events: InspectEvent[]): InspectRunTree[\"status\"] {\n let hasRunning = false;\n for (const e of events) {\n if (e.status === \"error\") return \"error\";\n if (e.status === \"running\") hasRunning = true;\n }\n if (hasRunning) return \"running\";\n return \"ok\";\n}\n\nexport class TreeBuilder {\n constructor(options?: TreeBuilderOptions) {\n void options?.config;\n }\n\n build(events: InspectEvent[]): InspectRunTree[] {\n const byRun = new Map<string, InspectEvent[]>();\n for (const e of events) {\n if (!byRun.has(e.runId)) byRun.set(e.runId, []);\n byRun.get(e.runId)!.push(e);\n }\n\n const out: InspectRunTree[] = [];\n for (const [runId, runEvents] of byRun.entries()) {\n const sorted = [...runEvents].sort((a, b) => a.timestamp - b.timestamp);\n\n const nodes = new Map<string, InspectNode>();\n for (const e of sorted) {\n nodes.set(e.eventId, { event: e, children: [], depth: 0 });\n }\n\n const roots: InspectNode[] = [];\n for (const node of nodes.values()) {\n const parentId = node.event.parentId;\n if (parentId && nodes.has(parentId)) {\n nodes.get(parentId)!.children.push(node);\n } else {\n roots.push(node);\n }\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 // metadata\n const confidenceBreakdown = {\n explicit: 0,\n correlated: 0,\n heuristic: 0,\n unknown: 0,\n } as Record<InspectEvent[\"confidence\"], number>;\n const kinds = {} as Record<InspectEvent[\"kind\"], number>;\n for (const e of sorted) {\n inc(confidenceBreakdown, e.confidence);\n (kinds as any)[e.kind] = ((kinds as any)[e.kind] ?? 0) + 1;\n }\n\n const startedAt = sorted.length > 0 ? sorted[0]!.timestamp : undefined;\n const endedAt = sorted.length > 0 ? sorted[sorted.length - 1]!.timestamp : undefined;\n const status = computeRunStatus(sorted);\n const durationMs =\n startedAt !== undefined &&\n endedAt !== undefined &&\n Number.isFinite(startedAt) &&\n Number.isFinite(endedAt) &&\n endedAt >= startedAt &&\n status !== \"running\"\n ? endedAt - startedAt\n : undefined;\n\n const name = sorted.find((e) => e.kind === \"RUN\")?.name;\n\n out.push({\n runId,\n name,\n status,\n startedAt,\n endedAt: status === \"running\" ? undefined : endedAt,\n durationMs,\n children: roots,\n metadata: {\n totalEvents: sorted.length,\n confidenceBreakdown,\n kinds,\n },\n });\n }\n\n // newest first for stable display\n out.sort((a, b) => (b.startedAt ?? 0) - (a.startedAt ?? 0));\n return out;\n }\n}\n\n","import type { EventSource, InspectEvent } from \"../types/inspect-event.js\";\nimport {\n isPersistedInspectEvent,\n type PersistedEventSourceType,\n type PersistedInspectEvent,\n} from \"../types/persisted-inspect-event.js\";\n\nexport interface PersistedToInspectEventOptions {\n /**\n * If true, invalid persisted events are skipped by batch conversion.\n * If false or omitted, invalid events throw.\n */\n skipInvalid?: boolean;\n}\n\nfunction compactAttributes(\n entries: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(entries)) {\n if (value !== undefined) {\n out[key] = value;\n }\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction parseIsoToMs(iso: string): { ms: number; invalidTimestamp: boolean } {\n const parsed = Date.parse(iso);\n if (!Number.isFinite(parsed)) {\n return { ms: 0, invalidTimestamp: true };\n }\n return { ms: parsed, invalidTimestamp: false };\n}\n\nfunction mapPersistedSourceToInspect(\n event: PersistedInspectEvent,\n): EventSource {\n const attrs = event.attributes ?? {};\n const sourceName = event.source.name;\n\n if (sourceName === \"pino\") {\n return {\n type: \"pino\",\n file: typeof attrs.sourceFile === \"string\" ? attrs.sourceFile : undefined,\n line: typeof attrs.sourceLine === \"number\" ? attrs.sourceLine : undefined,\n };\n }\n if (sourceName === \"winston\") {\n return {\n type: \"winston\",\n file: typeof attrs.sourceFile === \"string\" ? attrs.sourceFile : undefined,\n line: typeof attrs.sourceLine === \"number\" ? attrs.sourceLine : undefined,\n };\n }\n\n const mapType = (t: PersistedEventSourceType): EventSource[\"type\"] => {\n switch (t) {\n case \"manual\":\n return \"manual\";\n case \"json-log\":\n return \"json-log\";\n case \"log4js\":\n return \"log4js\";\n case \"adapter\":\n case \"ai-sdk\":\n case \"otel\":\n return \"adapter\";\n default:\n return \"json-log\";\n }\n };\n\n return {\n type: mapType(event.source.type),\n file: typeof attrs.sourceFile === \"string\" ? attrs.sourceFile : undefined,\n line: typeof attrs.sourceLine === \"number\" ? attrs.sourceLine : undefined,\n };\n}\n\nfunction buildInspectAttributes(event: PersistedInspectEvent): Record<string, unknown> {\n const attrs =\n event.attributes !== undefined ? { ...event.attributes } : {};\n\n if (event.inputSummary !== undefined) {\n attrs.inputSummary = event.inputSummary;\n }\n if (event.outputSummary !== undefined) {\n attrs.outputSummary = event.outputSummary;\n }\n\n if (event.error) {\n if (event.error.name !== undefined) {\n attrs.errorName = event.error.name;\n }\n attrs.errorMessage = event.error.message;\n if (event.error.code !== undefined) {\n attrs.errorCode = event.error.code;\n }\n }\n\n if (event.tokenUsage) {\n attrs.tokens = { ...event.tokenUsage };\n }\n\n if (event.source.type === \"ai-sdk\" || event.source.type === \"otel\") {\n attrs.originalSourceType = event.source.type;\n }\n\n if (event.source.name !== undefined) {\n attrs.sourceName = event.source.name;\n }\n if (event.source.version !== undefined) {\n attrs.sourceVersion = event.source.version;\n }\n\n return attrs;\n}\n\n/**\n * Maps one v0.2 {@link PersistedInspectEvent} to in-memory {@link InspectEvent}.\n * Throws if `event` fails {@link isPersistedInspectEvent}.\n */\nexport function persistedInspectEventToInspectEvent(\n event: PersistedInspectEvent,\n): InspectEvent {\n if (!isPersistedInspectEvent(event)) {\n throw new Error(\"Invalid PersistedInspectEvent: failed isPersistedInspectEvent\");\n }\n\n const ts = parseIsoToMs(event.timestamp);\n const attrs = buildInspectAttributes(event);\n if (ts.invalidTimestamp) {\n attrs.invalidTimestamp = true;\n }\n\n let status: InspectEvent[\"status\"] | undefined;\n if (\n event.status === \"running\" ||\n event.status === \"ok\" ||\n event.status === \"error\"\n ) {\n status = event.status;\n } else if (event.status === \"unknown\") {\n attrs.persistedStatus = \"unknown\";\n }\n\n const out: InspectEvent = {\n eventId: event.eventId,\n runId: event.runId,\n name: event.name,\n kind: event.kind,\n timestamp: ts.ms,\n confidence: event.confidence,\n source: mapPersistedSourceToInspect(event),\n attributes: compactAttributes(attrs),\n };\n\n if (event.parentId !== undefined) {\n out.parentId = event.parentId;\n }\n if (status !== undefined) {\n out.status = status;\n }\n if (\n event.durationMs !== undefined &&\n Number.isFinite(event.durationMs) &&\n event.durationMs >= 0\n ) {\n out.durationMs = event.durationMs;\n }\n\n return out;\n}\n\n/**\n * Maps persisted v0.2 events to in-memory {@link InspectEvent} rows.\n */\nexport function persistedInspectEventsToInspectEvents(\n events: readonly PersistedInspectEvent[],\n options?: PersistedToInspectEventOptions,\n): InspectEvent[] {\n const skipInvalid = options?.skipInvalid === true;\n const out: InspectEvent[] = [];\n\n for (const event of events) {\n if (!isPersistedInspectEvent(event)) {\n if (skipInvalid) {\n continue;\n }\n throw new Error(\"Invalid PersistedInspectEvent: failed isPersistedInspectEvent\");\n }\n out.push(persistedInspectEventToInspectEvent(event));\n }\n\n return out;\n}\n","import { TreeBuilder } from \"../logs/tree-builder.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport type { TraceEvent } from \"../types.js\";\n\nimport { traceEventsToPersistedInspectEvents } from \"./from-trace-event.js\";\nimport { persistedInspectEventsToInspectEvents } from \"./to-inspect-event.js\";\n\nexport interface PersistedTreeBridgeOptions {\n /**\n * If true, invalid persisted events are skipped.\n * If false or omitted, invalid persisted events throw.\n */\n skipInvalid?: boolean;\n}\n\n/**\n * Builds {@link InspectRunTree} rows from v0.2 {@link PersistedInspectEvent} input.\n * Uses {@link TreeBuilder} as the canonical tree builder. Does not mutate `events`.\n */\nexport function persistedInspectEventsToRunTrees(\n events: readonly PersistedInspectEvent[],\n options?: PersistedTreeBridgeOptions,\n): InspectRunTree[] {\n const inspectEvents = persistedInspectEventsToInspectEvents(events, {\n skipInvalid: options?.skipInvalid,\n });\n return new TreeBuilder().build(inspectEvents);\n}\n\n/**\n * Builds {@link InspectRunTree} rows from legacy v0.1 {@link TraceEvent} input\n * via the persisted-event model. Does not mutate `events`.\n */\nexport function traceEventsToPersistedRunTrees(\n events: readonly TraceEvent[],\n): InspectRunTree[] {\n const persisted = traceEventsToPersistedInspectEvents(events);\n return persistedInspectEventsToRunTrees(persisted);\n}\n","import { readdir, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { parseTraceJsonl, type TraceJsonlFormat } from \"../read-trace.js\";\nimport {\n traceEventToPersistedInspectEvent,\n traceEventsToPersistedInspectEvents,\n} from \"../persisted/from-trace-event.js\";\nimport { persistedInspectEventsToRunTrees } from \"../persisted/tree-bridge.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\nimport type {\n PersistedEventStatus,\n PersistedInspectEvent,\n PersistedTokenUsage,\n} from \"../types/persisted-inspect-event.js\";\n\nexport type TraceInput =\n | { type: \"file\"; path: string }\n | { type: \"directory\"; path: string }\n | { type: \"string\"; content: string }\n | { type: \"buffer\"; content: Buffer }\n | { type: \"stdin\" };\n\nexport type TraceReadWarningSeverity = \"info\" | \"warning\" | \"error\";\n\nexport interface TraceReadWarning {\n code: string;\n message: string;\n severity?: TraceReadWarningSeverity;\n sourceFile?: string;\n line?: number;\n field?: string;\n}\n\nexport interface TraceReadResult {\n format: string;\n events: PersistedInspectEvent[];\n runs: InspectRunTree[];\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n sourceFiles: string[];\n}\n\nexport interface TraceFormatCandidate {\n format: string;\n confidence: number;\n readerName?: string;\n description?: string;\n warnings?: TraceReadWarning[];\n}\n\nexport type TraceFormatDetectionStatus =\n | \"detected\"\n | \"ambiguous\"\n | \"unsupported\";\n\nexport interface TraceFormatDetectionResult {\n status: TraceFormatDetectionStatus;\n format?: string;\n candidates: TraceFormatCandidate[];\n warnings: TraceReadWarning[];\n}\n\nexport interface TraceReaderDetectOptions {\n format?: string;\n}\n\nexport interface TraceReaderReadOptions {\n format?: string;\n}\n\nexport interface TraceReader {\n readonly format: string;\n readonly name?: string;\n detect(\n input: TraceInput,\n options?: TraceReaderDetectOptions,\n ): TraceFormatCandidate | undefined | Promise<TraceFormatCandidate | undefined>;\n read(\n input: TraceInput,\n options?: TraceReaderReadOptions,\n ): TraceReadResult | Promise<TraceReadResult>;\n}\n\nexport interface TraceReadOptions {\n format?: string;\n readers?: readonly TraceReader[];\n}\n\ninterface ResolvedTraceInput {\n content: string;\n sourceFiles: string[];\n}\n\ninterface OpenInferenceDocument {\n spans: JsonRecord[];\n confidence: number;\n description: string;\n version?: string;\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n}\n\ninterface OpenInferenceMappedSpan {\n event: PersistedInspectEvent;\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n spanId: string;\n parentSpanId?: string;\n}\n\ninterface OtlpDocument {\n spans: OtlpSpanContext[];\n confidence: number;\n description: string;\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n}\n\ninterface OtlpSpanContext {\n span: JsonRecord;\n resourceAttributes: Record<string, unknown>;\n scopeAttributes: Record<string, unknown>;\n scopeName?: string;\n scopeVersion?: string;\n pathPrefix: string;\n}\n\ntype JsonRecord = Record<string, unknown>;\n\nconst DEFAULT_MAX_TRACE_INPUT_BYTES = 10 * 1024 * 1024;\nconst MIN_DETECTION_CONFIDENCE = 0.5;\nconst AMBIGUOUS_CONFIDENCE_DELTA = 0.05;\nconst resolvedInputCache = new WeakMap<TraceInput, Promise<ResolvedTraceInput | undefined>>();\nconst OPENINFERENCE_READER_FORMAT = \"openinference-json\";\nconst OTLP_READER_FORMAT = \"otlp-json\";\n\nconst OPENINFERENCE_SPAN_KEYS = new Set([\n \"trace_id\",\n \"traceId\",\n \"span_id\",\n \"spanId\",\n \"parent_span_id\",\n \"parentSpanId\",\n \"name\",\n \"start_time_unix_nano\",\n \"startTimeUnixNano\",\n \"end_time_unix_nano\",\n \"endTimeUnixNano\",\n \"start_time\",\n \"startTime\",\n \"end_time\",\n \"endTime\",\n \"attributes\",\n \"status\",\n \"kind\",\n \"span_kind\",\n \"spanKind\",\n]);\n\nconst OPENINFERENCE_SENSITIVE_ATTRIBUTE_KEYS = [\n \"input.value\",\n \"output.value\",\n \"input.mime_type\",\n \"output.mime_type\",\n \"llm.input_messages\",\n \"llm.output_messages\",\n \"llm.prompts\",\n \"llm.completions\",\n \"retrieval.documents\",\n \"reranker.input_documents\",\n \"reranker.output_documents\",\n \"document.content\",\n \"gen_ai.prompt\",\n \"gen_ai.completion\",\n \"gen_ai.input.messages\",\n \"gen_ai.output.messages\",\n];\n\nconst OTLP_SPAN_KEYS = new Set([\n \"traceId\",\n \"spanId\",\n \"parentSpanId\",\n \"name\",\n \"kind\",\n \"startTimeUnixNano\",\n \"endTimeUnixNano\",\n \"attributes\",\n \"events\",\n \"status\",\n \"droppedAttributesCount\",\n \"droppedEventsCount\",\n \"droppedLinksCount\",\n \"links\",\n \"flags\",\n]);\n\nexport type TraceReadErrorCode =\n | \"unsupported_format\"\n | \"ambiguous_format\"\n | \"reader_failed\";\n\nexport class TraceReadError extends Error {\n readonly code: TraceReadErrorCode;\n readonly warnings: TraceReadWarning[];\n\n constructor(\n code: TraceReadErrorCode,\n message: string,\n warnings: TraceReadWarning[] = [],\n ) {\n super(message);\n this.name = \"TraceReadError\";\n this.code = code;\n this.warnings = warnings;\n }\n}\n\nfunction normalizeCandidate(\n reader: TraceReader,\n candidate: TraceFormatCandidate,\n): TraceFormatCandidate {\n const confidence = Number.isFinite(candidate.confidence)\n ? Math.max(0, Math.min(1, candidate.confidence))\n : 0;\n\n return {\n ...candidate,\n format: candidate.format || reader.format,\n confidence,\n readerName: candidate.readerName ?? reader.name,\n };\n}\n\nfunction sortCandidates(\n candidates: readonly TraceFormatCandidate[],\n): TraceFormatCandidate[] {\n return [...candidates].sort((a, b) => {\n if (b.confidence !== a.confidence) return b.confidence - a.confidence;\n return a.format.localeCompare(b.format);\n });\n}\n\nfunction collectWarnings(\n candidates: readonly TraceFormatCandidate[],\n): TraceReadWarning[] {\n return candidates.flatMap((candidate) => candidate.warnings ?? []);\n}\n\nfunction dedupeWarnings(\n warnings: readonly TraceReadWarning[],\n): TraceReadWarning[] {\n const seen = new Set<string>();\n const out: TraceReadWarning[] = [];\n for (const warning of warnings) {\n const key = [\n warning.code,\n warning.message,\n warning.severity ?? \"\",\n warning.sourceFile ?? \"\",\n warning.line ?? \"\",\n warning.field ?? \"\",\n ].join(\"\\u0000\");\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(warning);\n }\n return out;\n}\n\nfunction attachSingleSourceFile(\n warnings: readonly TraceReadWarning[],\n resolved: ResolvedTraceInput,\n): TraceReadWarning[] {\n if (resolved.sourceFiles.length !== 1) return [...warnings];\n const [sourceFile] = resolved.sourceFiles;\n return warnings.map((warning) => ({\n ...warning,\n sourceFile: warning.sourceFile ?? sourceFile,\n }));\n}\n\nfunction findReaderByFormat(\n format: string,\n readers: readonly TraceReader[],\n): TraceReader | undefined {\n return readers.find((reader) => reader.format === format);\n}\n\nasync function jsonlFilesInDirectory(dirPath: string): Promise<string[]> {\n const entries = await readdir(dirPath, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isFile() && entry.name.endsWith(\".jsonl\"))\n .map((entry) => path.join(dirPath, entry.name))\n .sort((a, b) => a.localeCompare(b));\n}\n\nasync function resolveInput(input: TraceInput): Promise<ResolvedTraceInput | undefined> {\n const cached = resolvedInputCache.get(input);\n if (cached) return cached;\n\n const promise = resolveInputUncached(input);\n resolvedInputCache.set(input, promise);\n return promise;\n}\n\nfunction assertInputWithinBounds(content: string, sourceFile?: string): void {\n const bytes = Buffer.byteLength(content, \"utf8\");\n if (bytes <= DEFAULT_MAX_TRACE_INPUT_BYTES) return;\n throw new TraceReadError(\"unsupported_format\", \"Trace input exceeds the local reader size limit.\", [\n {\n code: \"input_too_large\",\n message: `Trace input is ${bytes} bytes; max is ${DEFAULT_MAX_TRACE_INPUT_BYTES} bytes.`,\n severity: \"error\",\n ...(sourceFile !== undefined ? { sourceFile } : {}),\n },\n ]);\n}\n\nasync function resolveInputUncached(\n input: TraceInput,\n): Promise<ResolvedTraceInput | undefined> {\n if (input.type === \"string\") {\n assertInputWithinBounds(input.content);\n return { content: input.content, sourceFiles: [] };\n }\n if (input.type === \"buffer\") {\n const content = input.content.toString(\"utf-8\");\n assertInputWithinBounds(content);\n return { content, sourceFiles: [] };\n }\n if (input.type === \"file\") {\n const content = await readFile(input.path, \"utf-8\");\n assertInputWithinBounds(content, input.path);\n return { content, sourceFiles: [input.path] };\n }\n if (input.type === \"directory\") {\n const files = await jsonlFilesInDirectory(input.path);\n const parts = await Promise.all(\n files.map(async (file) => (await readFile(file, \"utf-8\")).trimEnd()),\n );\n const content = parts.filter((part) => part.trim() !== \"\").join(\"\\n\");\n assertInputWithinBounds(content, input.path);\n return {\n content,\n sourceFiles: files,\n };\n }\n return undefined;\n}\n\nfunction detectJsonlFormat(content: string): {\n format: TraceJsonlFormat;\n validRows: number;\n warnings: TraceReadWarning[];\n} {\n let saw01 = false;\n let saw02 = false;\n let saw10 = false;\n let validRows = 0;\n let invalidJsonRows = 0;\n let unknownSchemaRows = 0;\n let firstInvalidJsonLine: number | undefined;\n let firstUnknownSchemaLine: number | undefined;\n\n let lineNumber = 0;\n for (const line of content.split(/\\r?\\n/)) {\n lineNumber += 1;\n const trimmed = line.trim();\n if (trimmed === \"\") continue;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed) as unknown;\n } catch {\n invalidJsonRows += 1;\n firstInvalidJsonLine ??= lineNumber;\n continue;\n }\n\n if (\n typeof parsed === \"object\" &&\n parsed !== null &&\n !Array.isArray(parsed) &&\n \"schemaVersion\" in parsed\n ) {\n const version = (parsed as { schemaVersion?: unknown }).schemaVersion;\n if (version === \"0.1\") {\n saw01 = true;\n validRows += 1;\n continue;\n }\n if (version === \"0.2\") {\n saw02 = true;\n validRows += 1;\n continue;\n }\n if (version === \"1.0\") {\n saw10 = true;\n validRows += 1;\n continue;\n }\n }\n\n unknownSchemaRows += 1;\n firstUnknownSchemaLine ??= lineNumber;\n }\n\n const warnings: TraceReadWarning[] = [];\n if (invalidJsonRows > 0) {\n warnings.push({\n code: \"invalid_jsonl_rows\",\n message: `Skipped ${invalidJsonRows} invalid JSONL row(s) during format detection.`,\n severity: \"warning\",\n ...(firstInvalidJsonLine !== undefined ? { line: firstInvalidJsonLine } : {}),\n });\n }\n if (unknownSchemaRows > 0) {\n warnings.push({\n code: \"unknown_schema_rows\",\n message: `Skipped ${unknownSchemaRows} row(s) with unknown schemaVersion during format detection.`,\n severity: \"warning\",\n ...(firstUnknownSchemaLine !== undefined ? { line: firstUnknownSchemaLine } : {}),\n });\n }\n\n let format: TraceJsonlFormat = \"empty\";\n const seenFormats = [saw01, saw02, saw10].filter(Boolean).length;\n if (seenFormats > 1) format = \"mixed\";\n else if (saw01) format = \"0.1\";\n else if (saw02) format = \"0.2\";\n else if (saw10) format = \"1.0\";\n\n return { format, validRows, warnings };\n}\n\nfunction agentInspectFormatLabel(format: TraceJsonlFormat): string {\n switch (format) {\n case \"0.1\":\n return \"agent-inspect-v0.1-jsonl\";\n case \"0.2\":\n return \"agent-inspect-v0.2-jsonl\";\n case \"1.0\":\n return \"agent-inspect-v1.0-jsonl\";\n case \"mixed\":\n return \"agent-inspect-mixed-jsonl\";\n default:\n return \"agent-inspect-jsonl\";\n }\n}\n\nfunction persistedEventsForParsedTrace(\n parsed: ReturnType<typeof parseTraceJsonl>,\n): PersistedInspectEvent[] {\n if (\n (parsed.format === \"0.2\" || parsed.format === \"1.0\") &&\n parsed.persisted.length > 0\n ) {\n return [...parsed.persisted];\n }\n if (parsed.format === \"mixed\" && parsed.rows.length > 0) {\n return parsed.rows.map((row, index) => {\n if (row.format === \"0.2\" || row.format === \"1.0\") return row.event;\n return traceEventToPersistedInspectEvent(row.event, {\n eventIndex: index,\n sourceName: \"agent-inspect-jsonl-reader\",\n });\n });\n }\n return traceEventsToPersistedInspectEvents(parsed.events, {\n sourceName: \"agent-inspect-jsonl-reader\",\n });\n}\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim() !== \"\";\n}\n\nfunction readStringField(\n record: JsonRecord,\n keys: readonly string[],\n): string | undefined {\n for (const key of keys) {\n const value = record[key];\n if (isNonEmptyString(value)) return value;\n }\n return undefined;\n}\n\nfunction readRecordField(\n record: JsonRecord,\n key: string,\n): JsonRecord | undefined {\n const value = record[key];\n return isRecord(value) ? value : undefined;\n}\n\nfunction parseJsonDocument(content: string): unknown {\n return JSON.parse(content) as unknown;\n}\n\nfunction looksLikeOpenInferenceSpan(value: unknown): value is JsonRecord {\n if (!isRecord(value)) return false;\n const attributes = readRecordField(value, \"attributes\");\n return (\n readStringField(value, [\"trace_id\", \"traceId\"]) !== undefined &&\n readStringField(value, [\"span_id\", \"spanId\"]) !== undefined &&\n (readStringField(value, [\"name\"]) !== undefined ||\n attributes?.[\"openinference.span.kind\"] !== undefined)\n );\n}\n\nfunction extractOpenInferenceDocument(root: unknown): OpenInferenceDocument | undefined {\n const warnings: TraceReadWarning[] = [];\n const unsupportedFields: string[] = [];\n\n if (Array.isArray(root)) {\n const spans = root.filter(looksLikeOpenInferenceSpan);\n if (spans.length === 0) return undefined;\n if (spans.length !== root.length) {\n warnings.push({\n code: \"openinference_skipped_items\",\n message: \"Skipped non-span item(s) in OpenInference span array.\",\n severity: \"warning\",\n });\n }\n return {\n spans,\n confidence: 0.82,\n description: \"OpenInference span array\",\n warnings,\n unsupportedFields,\n };\n }\n\n if (!isRecord(root)) return undefined;\n\n const rootFormat = root.format;\n const rootCompatibility = root.compatibility;\n const version =\n typeof root.version === \"string\" && root.version.trim() !== \"\"\n ? root.version\n : undefined;\n\n if (Array.isArray(root.spans)) {\n const spans = root.spans.filter(looksLikeOpenInferenceSpan);\n if (spans.length === 0 && (rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\")) {\n warnings.push({\n code: \"openinference_no_valid_spans\",\n message: \"OpenInference document did not contain any valid spans.\",\n severity: \"error\",\n });\n return {\n spans,\n confidence: 0.7,\n description: \"Malformed OpenInference document\",\n version,\n warnings,\n unsupportedFields,\n };\n }\n if (spans.length === 0) return undefined;\n if (spans.length !== root.spans.length) {\n warnings.push({\n code: \"openinference_skipped_spans\",\n message: \"Skipped invalid OpenInference span item(s).\",\n severity: \"warning\",\n });\n }\n return {\n spans,\n confidence:\n rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\"\n ? 0.9\n : 0.84,\n description:\n rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\"\n ? \"OpenInference document\"\n : \"OpenInference spans document\",\n version,\n warnings,\n unsupportedFields,\n };\n }\n\n if (Array.isArray(root.data)) {\n const spans = root.data.filter(looksLikeOpenInferenceSpan);\n if (spans.length === 0) return undefined;\n if (spans.length !== root.data.length) {\n warnings.push({\n code: \"openinference_skipped_data_items\",\n message: \"Skipped non-span item(s) in OpenInference data array.\",\n severity: \"warning\",\n });\n }\n return {\n spans,\n confidence: 0.8,\n description: \"OpenInference data document\",\n version,\n warnings,\n unsupportedFields,\n };\n }\n\n if (looksLikeOpenInferenceSpan(root)) {\n return {\n spans: [root],\n confidence: 0.76,\n description: \"OpenInference single span\",\n version,\n warnings,\n unsupportedFields,\n };\n }\n\n if (rootFormat === \"openinference\" || rootCompatibility === \"openinference-compatible\") {\n warnings.push({\n code: \"openinference_missing_spans\",\n message: \"OpenInference document is missing a spans array.\",\n severity: \"error\",\n });\n return {\n spans: [],\n confidence: 0.7,\n description: \"Malformed OpenInference document\",\n version,\n warnings,\n unsupportedFields,\n };\n }\n\n return undefined;\n}\n\nfunction parseUnixNanoToIso(value: unknown): string | undefined {\n if (typeof value === \"bigint\" && value >= 0n) {\n return new Date(Number(value / 1_000_000n)).toISOString();\n }\n if (typeof value === \"number\" && Number.isFinite(value) && value >= 0) {\n return new Date(Math.floor(value / 1_000_000)).toISOString();\n }\n if (typeof value === \"string\" && /^\\d+$/.test(value)) {\n return new Date(Number(BigInt(value) / 1_000_000n)).toISOString();\n }\n return undefined;\n}\n\nfunction parseIsoTime(value: unknown): string | undefined {\n if (!isNonEmptyString(value)) return undefined;\n const ms = Date.parse(value);\n if (!Number.isFinite(ms)) return undefined;\n return new Date(ms).toISOString();\n}\n\nfunction readOpenInferenceTimestamp(\n span: JsonRecord,\n nanoKeys: readonly string[],\n isoKeys: readonly string[],\n): string | undefined {\n for (const key of nanoKeys) {\n const iso = parseUnixNanoToIso(span[key]);\n if (iso !== undefined) return iso;\n }\n for (const key of isoKeys) {\n const iso = parseIsoTime(span[key]);\n if (iso !== undefined) return iso;\n }\n return undefined;\n}\n\nfunction durationBetweenIso(startedAt?: string, endedAt?: string): number | undefined {\n if (startedAt === undefined || endedAt === undefined) return undefined;\n const startMs = Date.parse(startedAt);\n const endMs = Date.parse(endedAt);\n if (!Number.isFinite(startMs) || !Number.isFinite(endMs) || endMs < startMs) {\n return undefined;\n }\n return endMs - startMs;\n}\n\nfunction isSensitiveOpenInferenceAttribute(key: string): boolean {\n return OPENINFERENCE_SENSITIVE_ATTRIBUTE_KEYS.some(\n (sensitiveKey) =>\n key === sensitiveKey ||\n key.startsWith(`${sensitiveKey}.`) ||\n key.endsWith(\".message.content\") ||\n key.endsWith(\".document.content\"),\n );\n}\n\nfunction summarizeAttributeValue(value: unknown): Record<string, unknown> {\n if (typeof value === \"string\") {\n return { type: \"string\", length: value.length };\n }\n if (typeof value === \"number\") {\n return { type: \"number\", finite: Number.isFinite(value) };\n }\n if (typeof value === \"boolean\") {\n return { type: \"boolean\" };\n }\n if (Array.isArray(value)) {\n return { type: \"array\", length: value.length };\n }\n if (isRecord(value)) {\n return { type: \"object\", keyCount: Object.keys(value).length };\n }\n if (value === null) {\n return { type: \"null\" };\n }\n return { type: typeof value };\n}\n\nfunction sanitizeOpenInferenceAttributes(\n attributes: JsonRecord,\n pathPrefix: string,\n): {\n attributes: Record<string, unknown>;\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n} {\n const out: Record<string, unknown> = {};\n const warnings: TraceReadWarning[] = [];\n const unsupportedFields: string[] = [];\n const summarizedKeys: string[] = [];\n\n for (const [key, value] of Object.entries(attributes)) {\n if (isSensitiveOpenInferenceAttribute(key)) {\n summarizedKeys.push(key);\n out[`${key}.summary`] = summarizeAttributeValue(value);\n unsupportedFields.push(`${pathPrefix}.attributes.${key}`);\n continue;\n }\n out[key] = value;\n }\n\n if (summarizedKeys.length > 0) {\n out[\"openinference.summarized_attributes\"] = summarizedKeys;\n warnings.push({\n code: \"openinference_sensitive_attribute_summarized\",\n message:\n \"OpenInference prompt/output/document attribute(s) were summarized instead of copied verbatim.\",\n severity: \"warning\",\n });\n }\n\n return { attributes: out, warnings, unsupportedFields };\n}\n\nfunction mapOpenInferenceKind(\n span: JsonRecord,\n attributes: JsonRecord,\n pathPrefix: string,\n): { kind: PersistedInspectEvent[\"kind\"]; warnings: TraceReadWarning[] } {\n const warnings: TraceReadWarning[] = [];\n const agentInspectKind = attributes[\"agent_inspect.kind\"];\n if (\n agentInspectKind === \"RUN\" ||\n agentInspectKind === \"AGENT\" ||\n agentInspectKind === \"LLM\" ||\n agentInspectKind === \"TOOL\" ||\n agentInspectKind === \"CHAIN\" ||\n agentInspectKind === \"RETRIEVER\" ||\n agentInspectKind === \"DECISION\" ||\n agentInspectKind === \"RESULT\" ||\n agentInspectKind === \"ERROR\" ||\n agentInspectKind === \"LOGIC\" ||\n agentInspectKind === \"LOG\" ||\n agentInspectKind === \"OUTCOME\"\n ) {\n return { kind: agentInspectKind, warnings };\n }\n\n const rawKind =\n readStringField(span, [\"kind\", \"span_kind\", \"spanKind\"]) ??\n (typeof attributes[\"openinference.span.kind\"] === \"string\"\n ? attributes[\"openinference.span.kind\"]\n : undefined);\n const normalized = rawKind?.toUpperCase();\n\n switch (normalized) {\n case \"LLM\":\n return { kind: \"LLM\", warnings };\n case \"TOOL\":\n return { kind: \"TOOL\", warnings };\n case \"CHAIN\":\n return { kind: \"CHAIN\", warnings };\n case \"RETRIEVER\":\n return { kind: \"RETRIEVER\", warnings };\n case \"AGENT\":\n return { kind: \"AGENT\", warnings };\n case \"EMBEDDING\":\n warnings.push({\n code: \"openinference_kind_semantic_loss\",\n message: \"OpenInference EMBEDDING span kind mapped to AgentInspect LLM.\",\n severity: \"warning\",\n field: `${pathPrefix}.attributes.openinference.span.kind`,\n });\n return { kind: \"LLM\", warnings };\n case \"RERANKER\":\n warnings.push({\n code: \"openinference_kind_semantic_loss\",\n message: \"OpenInference RERANKER span kind mapped to AgentInspect RETRIEVER.\",\n severity: \"warning\",\n field: `${pathPrefix}.attributes.openinference.span.kind`,\n });\n return { kind: \"RETRIEVER\", warnings };\n case \"UNKNOWN\":\n case undefined:\n warnings.push({\n code: \"openinference_kind_unknown\",\n message: \"OpenInference span kind was missing or unknown; mapped to AgentInspect LOGIC.\",\n severity: \"warning\",\n field: `${pathPrefix}.attributes.openinference.span.kind`,\n });\n return { kind: \"LOGIC\", warnings };\n default:\n warnings.push({\n code: \"openinference_kind_unsupported\",\n message: `Unsupported OpenInference span kind \"${rawKind}\" mapped to AgentInspect LOGIC.`,\n severity: \"warning\",\n field: `${pathPrefix}.attributes.openinference.span.kind`,\n });\n return { kind: \"LOGIC\", warnings };\n }\n}\n\nfunction mapOpenInferenceStatus(status: unknown): PersistedEventStatus | undefined {\n if (!isRecord(status)) return undefined;\n const rawCode = status.code;\n if (typeof rawCode !== \"string\") return undefined;\n switch (rawCode.toUpperCase()) {\n case \"OK\":\n return \"ok\";\n case \"ERROR\":\n return \"error\";\n case \"UNSET\":\n return \"unknown\";\n default:\n return \"unknown\";\n }\n}\n\nfunction readOpenInferenceTokenUsage(\n attributes: JsonRecord,\n): PersistedTokenUsage | undefined {\n const prompt = attributes[\"llm.token_count.prompt\"];\n const completion = attributes[\"llm.token_count.completion\"];\n const total = attributes[\"llm.token_count.total\"];\n const cached = attributes[\"llm.token_count.prompt_details.cache_read\"];\n const usage: PersistedTokenUsage = {};\n\n if (typeof prompt === \"number\" && Number.isFinite(prompt) && prompt >= 0) {\n usage.input = prompt;\n }\n if (\n typeof completion === \"number\" &&\n Number.isFinite(completion) &&\n completion >= 0\n ) {\n usage.output = completion;\n }\n if (typeof total === \"number\" && Number.isFinite(total) && total >= 0) {\n usage.total = total;\n }\n if (typeof cached === \"number\" && Number.isFinite(cached) && cached >= 0) {\n usage.cached = cached;\n }\n if (usage.total === undefined && usage.input !== undefined && usage.output !== undefined) {\n usage.total = usage.input + usage.output;\n }\n\n return Object.keys(usage).length > 0 ? usage : undefined;\n}\n\nfunction readOpenInferenceConfidence(\n attributes: JsonRecord,\n): PersistedInspectEvent[\"confidence\"] {\n const confidence = attributes[\"agent_inspect.confidence\"];\n if (\n confidence === \"explicit\" ||\n confidence === \"correlated\" ||\n confidence === \"heuristic\" ||\n confidence === \"unknown\"\n ) {\n return confidence;\n }\n return \"correlated\";\n}\n\nfunction mapOpenInferenceSpan(\n span: JsonRecord,\n index: number,\n version?: string,\n): OpenInferenceMappedSpan {\n const pathPrefix = `spans[${index}]`;\n const warnings: TraceReadWarning[] = [];\n const unsupportedFields: string[] = [];\n const rawAttributes = readRecordField(span, \"attributes\") ?? {};\n const sanitized = sanitizeOpenInferenceAttributes(rawAttributes, pathPrefix);\n warnings.push(...sanitized.warnings);\n unsupportedFields.push(...sanitized.unsupportedFields);\n\n const attributes: Record<string, unknown> = { ...sanitized.attributes };\n for (const [key, value] of Object.entries(span)) {\n if (OPENINFERENCE_SPAN_KEYS.has(key)) continue;\n unsupportedFields.push(`${pathPrefix}.${key}`);\n if (value === null || typeof value !== \"object\") {\n attributes[`openinference.${key}`] = value;\n } else {\n attributes[`openinference.${key}.summary`] = summarizeAttributeValue(value);\n warnings.push({\n code: \"openinference_unsupported_field_summarized\",\n message: `Unsupported OpenInference span field \"${key}\" was summarized.`,\n severity: \"warning\",\n field: `${pathPrefix}.${key}`,\n });\n }\n }\n\n const traceId = readStringField(span, [\"trace_id\", \"traceId\"]) ?? `trace-${index}`;\n const spanId = readStringField(span, [\"span_id\", \"spanId\"]) ?? `span-${index}`;\n const parentSpanId = readStringField(span, [\"parent_span_id\", \"parentSpanId\"]);\n const name = readStringField(span, [\"name\"]) ?? spanId;\n const startedAt = readOpenInferenceTimestamp(\n span,\n [\"start_time_unix_nano\", \"startTimeUnixNano\"],\n [\"start_time\", \"startTime\"],\n );\n const endedAt = readOpenInferenceTimestamp(\n span,\n [\"end_time_unix_nano\", \"endTimeUnixNano\"],\n [\"end_time\", \"endTime\"],\n );\n const timestamp = startedAt ?? \"1970-01-01T00:00:00.000Z\";\n\n if (startedAt === undefined) {\n warnings.push({\n code: \"openinference_missing_start_time\",\n message: \"OpenInference span is missing a valid start time; using Unix epoch.\",\n severity: \"warning\",\n field: `${pathPrefix}.start_time_unix_nano`,\n });\n unsupportedFields.push(`${pathPrefix}.start_time_unix_nano`);\n }\n\n const { kind, warnings: kindWarnings } = mapOpenInferenceKind(\n span,\n rawAttributes,\n pathPrefix,\n );\n warnings.push(...kindWarnings);\n const status = mapOpenInferenceStatus(span.status);\n const tokenUsage = readOpenInferenceTokenUsage(rawAttributes);\n const errorMessage =\n isRecord(span.status) && typeof span.status.message === \"string\"\n ? span.status.message\n : undefined;\n\n const event: PersistedInspectEvent = {\n schemaVersion: \"0.2\",\n eventId:\n typeof rawAttributes[\"agent_inspect.event_id\"] === \"string\"\n ? rawAttributes[\"agent_inspect.event_id\"]\n : spanId,\n runId:\n typeof rawAttributes[\"agent_inspect.run_id\"] === \"string\"\n ? rawAttributes[\"agent_inspect.run_id\"]\n : traceId,\n kind,\n name,\n timestamp,\n confidence: readOpenInferenceConfidence(rawAttributes),\n source: {\n type: \"otel\",\n name: \"openinference\",\n ...(version !== undefined ? { version } : {}),\n },\n attributes,\n trace: {\n traceId,\n spanId,\n ...(parentSpanId !== undefined ? { parentSpanId } : {}),\n },\n };\n\n if (status !== undefined) {\n event.status = status;\n }\n if (startedAt !== undefined) {\n event.startedAt = startedAt;\n }\n if (endedAt !== undefined) {\n event.endedAt = endedAt;\n }\n const durationMs = durationBetweenIso(startedAt, endedAt);\n if (durationMs !== undefined) {\n event.durationMs = durationMs;\n }\n if (tokenUsage !== undefined) {\n event.tokenUsage = tokenUsage;\n }\n if (status === \"error\") {\n event.error = {\n message: errorMessage !== undefined && errorMessage.trim() !== \"\" ? errorMessage : \"OpenInference span error\",\n };\n }\n\n return {\n event,\n warnings,\n unsupportedFields,\n spanId,\n ...(parentSpanId !== undefined ? { parentSpanId } : {}),\n };\n}\n\nfunction mapOpenInferenceEvents(document: OpenInferenceDocument): {\n events: PersistedInspectEvent[];\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n} {\n const mapped = document.spans.map((span, index) =>\n mapOpenInferenceSpan(span, index, document.version),\n );\n const spanIdToEventId = new Map(\n mapped.map((span) => [span.spanId, span.event.eventId] as const),\n );\n for (const span of mapped) {\n if (span.parentSpanId === undefined) continue;\n span.event.parentId = spanIdToEventId.get(span.parentSpanId) ?? span.parentSpanId;\n }\n\n return {\n events: mapped.map((span) => span.event),\n warnings: mapped.flatMap((span) => span.warnings),\n unsupportedFields: mapped.flatMap((span) => span.unsupportedFields),\n };\n}\n\nexport const openInferenceJsonReader: TraceReader = {\n format: OPENINFERENCE_READER_FORMAT,\n name: \"OpenInference JSON\",\n async detect(input) {\n const resolved = await resolveInput(input);\n if (!resolved) return undefined;\n\n let parsed: unknown;\n try {\n parsed = parseJsonDocument(resolved.content);\n } catch {\n return undefined;\n }\n\n const document = extractOpenInferenceDocument(parsed);\n if (!document) return undefined;\n\n return {\n format: OPENINFERENCE_READER_FORMAT,\n confidence: document.confidence,\n readerName: \"OpenInference JSON\",\n description: document.description,\n warnings: attachSingleSourceFile(document.warnings, resolved),\n };\n },\n async read(input) {\n const resolved = await resolveInput(input);\n if (!resolved) {\n throw new TraceReadError(\n \"unsupported_format\",\n \"OpenInference JSON reader requires file, string, or buffer input.\",\n );\n }\n\n let parsed: unknown;\n try {\n parsed = parseJsonDocument(resolved.content);\n } catch {\n throw new TraceReadError(\"unsupported_format\", \"OpenInference JSON input is not valid JSON.\", [\n {\n code: \"openinference_invalid_json\",\n message: \"OpenInference JSON reader could not parse the input as JSON.\",\n severity: \"error\",\n },\n ]);\n }\n\n const document = extractOpenInferenceDocument(parsed);\n if (!document || document.spans.length === 0) {\n throw new TraceReadError(\n \"unsupported_format\",\n \"No valid OpenInference spans found.\",\n attachSingleSourceFile(\n document?.warnings ?? [\n {\n code: \"openinference_no_valid_spans\",\n message: \"OpenInference JSON input did not contain valid spans.\",\n severity: \"error\",\n },\n ],\n resolved,\n ),\n );\n }\n\n const mapped = mapOpenInferenceEvents(document);\n const warnings = attachSingleSourceFile(\n [...document.warnings, ...mapped.warnings],\n resolved,\n );\n const unsupportedFields = [\n ...document.unsupportedFields,\n ...mapped.unsupportedFields,\n ].sort((a, b) => a.localeCompare(b));\n\n return {\n format: OPENINFERENCE_READER_FORMAT,\n events: mapped.events,\n runs: persistedInspectEventsToRunTrees(mapped.events, { skipInvalid: true }),\n warnings,\n unsupportedFields,\n sourceFiles: resolved.sourceFiles,\n };\n },\n};\n\nfunction parseOtlpAnyValue(\n value: unknown,\n field: string,\n warnings: TraceReadWarning[],\n unsupportedFields: string[],\n): unknown {\n if (!isRecord(value)) {\n unsupportedFields.push(field);\n warnings.push({\n code: \"otlp_attribute_value_invalid\",\n message: \"OTLP attribute value was not an AnyValue object.\",\n severity: \"warning\",\n field,\n });\n return undefined;\n }\n if (typeof value.stringValue === \"string\") return value.stringValue;\n if (typeof value.boolValue === \"boolean\") return value.boolValue;\n if (typeof value.intValue === \"number\" && Number.isFinite(value.intValue)) {\n return value.intValue;\n }\n if (typeof value.intValue === \"string\" && value.intValue.trim() !== \"\") {\n const n = Number(value.intValue);\n if (Number.isFinite(n)) return n;\n }\n if (\n typeof value.doubleValue === \"number\" &&\n Number.isFinite(value.doubleValue)\n ) {\n return value.doubleValue;\n }\n if (isRecord(value.arrayValue) && Array.isArray(value.arrayValue.values)) {\n return value.arrayValue.values.map((item, index) =>\n parseOtlpAnyValue(item, `${field}.arrayValue.values[${index}]`, warnings, unsupportedFields),\n );\n }\n if (isRecord(value.kvlistValue) && Array.isArray(value.kvlistValue.values)) {\n const out: Record<string, unknown> = {};\n for (const [index, item] of value.kvlistValue.values.entries()) {\n if (!isRecord(item) || typeof item.key !== \"string\") {\n unsupportedFields.push(`${field}.kvlistValue.values[${index}]`);\n continue;\n }\n out[item.key] = parseOtlpAnyValue(\n item.value,\n `${field}.kvlistValue.values[${index}].value`,\n warnings,\n unsupportedFields,\n );\n }\n return out;\n }\n if (typeof value.bytesValue === \"string\") {\n unsupportedFields.push(field);\n warnings.push({\n code: \"otlp_bytes_value_summarized\",\n message: \"OTLP bytesValue attribute was summarized instead of decoded.\",\n severity: \"warning\",\n field,\n });\n return { type: \"bytes\", length: value.bytesValue.length };\n }\n\n unsupportedFields.push(field);\n warnings.push({\n code: \"otlp_attribute_value_unsupported\",\n message: \"OTLP attribute value used an unsupported AnyValue shape.\",\n severity: \"warning\",\n field,\n });\n return undefined;\n}\n\nfunction parseOtlpAttributes(\n value: unknown,\n pathPrefix: string,\n): {\n attributes: Record<string, unknown>;\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n} {\n const attributes: Record<string, unknown> = {};\n const warnings: TraceReadWarning[] = [];\n const unsupportedFields: string[] = [];\n\n if (value === undefined) {\n return { attributes, warnings, unsupportedFields };\n }\n if (!Array.isArray(value)) {\n unsupportedFields.push(pathPrefix);\n warnings.push({\n code: \"otlp_attributes_invalid\",\n message: \"OTLP attributes field was not an array.\",\n severity: \"warning\",\n field: pathPrefix,\n });\n return { attributes, warnings, unsupportedFields };\n }\n\n for (const [index, item] of value.entries()) {\n const field = `${pathPrefix}[${index}]`;\n if (!isRecord(item) || typeof item.key !== \"string\") {\n unsupportedFields.push(field);\n warnings.push({\n code: \"otlp_attribute_invalid\",\n message: \"Skipped OTLP attribute without a string key.\",\n severity: \"warning\",\n field,\n });\n continue;\n }\n const parsed = parseOtlpAnyValue(\n item.value,\n `${field}.value`,\n warnings,\n unsupportedFields,\n );\n if (parsed !== undefined) {\n attributes[item.key] = parsed;\n }\n }\n\n return { attributes, warnings, unsupportedFields };\n}\n\nfunction looksLikeOtlpSpan(value: unknown): value is JsonRecord {\n return (\n isRecord(value) &&\n readStringField(value, [\"traceId\"]) !== undefined &&\n readStringField(value, [\"spanId\"]) !== undefined &&\n readStringField(value, [\"name\"]) !== undefined\n );\n}\n\nfunction extractOtlpDocument(root: unknown): OtlpDocument | undefined {\n if (!isRecord(root) || !Array.isArray(root.resourceSpans)) return undefined;\n\n const spans: OtlpSpanContext[] = [];\n const warnings: TraceReadWarning[] = [];\n const unsupportedFields: string[] = [];\n\n for (const [resourceIndex, resourceSpan] of root.resourceSpans.entries()) {\n const resourcePath = `resourceSpans[${resourceIndex}]`;\n if (!isRecord(resourceSpan)) {\n unsupportedFields.push(resourcePath);\n continue;\n }\n\n const resource = readRecordField(resourceSpan, \"resource\");\n const resourceParsed = parseOtlpAttributes(\n resource?.attributes,\n `${resourcePath}.resource.attributes`,\n );\n warnings.push(...resourceParsed.warnings);\n unsupportedFields.push(...resourceParsed.unsupportedFields);\n\n if (!Array.isArray(resourceSpan.scopeSpans)) {\n unsupportedFields.push(`${resourcePath}.scopeSpans`);\n warnings.push({\n code: \"otlp_scope_spans_missing\",\n message: \"OTLP resourceSpans entry did not contain a scopeSpans array.\",\n severity: \"warning\",\n field: `${resourcePath}.scopeSpans`,\n });\n continue;\n }\n\n for (const [scopeIndex, scopeSpan] of resourceSpan.scopeSpans.entries()) {\n const scopePath = `${resourcePath}.scopeSpans[${scopeIndex}]`;\n if (!isRecord(scopeSpan)) {\n unsupportedFields.push(scopePath);\n continue;\n }\n const scope = readRecordField(scopeSpan, \"scope\");\n const scopeParsed = parseOtlpAttributes(\n scope?.attributes,\n `${scopePath}.scope.attributes`,\n );\n warnings.push(...scopeParsed.warnings);\n unsupportedFields.push(...scopeParsed.unsupportedFields);\n if (!Array.isArray(scopeSpan.spans)) {\n unsupportedFields.push(`${scopePath}.spans`);\n warnings.push({\n code: \"otlp_spans_missing\",\n message: \"OTLP scopeSpans entry did not contain a spans array.\",\n severity: \"warning\",\n field: `${scopePath}.spans`,\n });\n continue;\n }\n\n for (const [spanIndex, span] of scopeSpan.spans.entries()) {\n const spanPath = `${scopePath}.spans[${spanIndex}]`;\n if (!looksLikeOtlpSpan(span)) {\n unsupportedFields.push(spanPath);\n warnings.push({\n code: \"otlp_invalid_span\",\n message: \"Skipped OTLP span without required traceId, spanId, or name.\",\n severity: \"warning\",\n field: spanPath,\n });\n continue;\n }\n spans.push({\n span,\n resourceAttributes: resourceParsed.attributes,\n scopeAttributes: scopeParsed.attributes,\n scopeName: readStringField(scope ?? {}, [\"name\"]),\n scopeVersion: readStringField(scope ?? {}, [\"version\"]),\n pathPrefix: spanPath,\n });\n }\n }\n }\n\n if (spans.length === 0) {\n warnings.push({\n code: \"otlp_no_valid_spans\",\n message: \"OTLP JSON payload did not contain any valid spans.\",\n severity: \"error\",\n });\n return {\n spans,\n confidence: 0.7,\n description: \"Malformed OTLP JSON trace payload\",\n warnings,\n unsupportedFields,\n };\n }\n\n return {\n spans,\n confidence: 0.93,\n description: \"OTLP JSON trace payload\",\n warnings,\n unsupportedFields,\n };\n}\n\nfunction mapOtlpStatus(status: unknown): PersistedEventStatus | undefined {\n if (!isRecord(status)) return undefined;\n const rawCode = status.code;\n if (typeof rawCode !== \"string\") return undefined;\n switch (rawCode.toUpperCase()) {\n case \"STATUS_CODE_OK\":\n case \"OK\":\n return \"ok\";\n case \"STATUS_CODE_ERROR\":\n case \"ERROR\":\n return \"error\";\n case \"STATUS_CODE_UNSET\":\n case \"UNSET\":\n return \"unknown\";\n default:\n return \"unknown\";\n }\n}\n\nfunction readOtlpKind(\n attributes: JsonRecord,\n pathPrefix: string,\n): { kind: PersistedInspectEvent[\"kind\"]; warnings: TraceReadWarning[] } {\n const warnings: TraceReadWarning[] = [];\n const agentInspectKind = attributes[\"agent_inspect.kind\"];\n if (\n agentInspectKind === \"RUN\" ||\n agentInspectKind === \"AGENT\" ||\n agentInspectKind === \"LLM\" ||\n agentInspectKind === \"TOOL\" ||\n agentInspectKind === \"CHAIN\" ||\n agentInspectKind === \"RETRIEVER\" ||\n agentInspectKind === \"DECISION\" ||\n agentInspectKind === \"RESULT\" ||\n agentInspectKind === \"ERROR\" ||\n agentInspectKind === \"LOGIC\" ||\n agentInspectKind === \"LOG\" ||\n agentInspectKind === \"OUTCOME\"\n ) {\n return { kind: agentInspectKind, warnings };\n }\n\n const operation = attributes[\"gen_ai.operation.name\"];\n if (typeof operation === \"string\") {\n switch (operation) {\n case \"generate_content\":\n case \"chat\":\n return { kind: \"LLM\", warnings };\n case \"execute_tool\":\n return { kind: \"TOOL\", warnings };\n case \"invoke_agent\":\n return { kind: \"AGENT\", warnings };\n default:\n warnings.push({\n code: \"otlp_gen_ai_operation_semantic_loss\",\n message: `OTLP GenAI operation \"${operation}\" mapped to AgentInspect LOGIC.`,\n severity: \"warning\",\n field: `${pathPrefix}.attributes.gen_ai.operation.name`,\n });\n return { kind: \"LOGIC\", warnings };\n }\n }\n\n warnings.push({\n code: \"otlp_kind_unknown\",\n message: \"OTLP span had no AgentInspect kind or GenAI operation; mapped to LOGIC.\",\n severity: \"warning\",\n field: `${pathPrefix}.attributes`,\n });\n return { kind: \"LOGIC\", warnings };\n}\n\nfunction readOtlpTokenUsage(attributes: JsonRecord): PersistedTokenUsage | undefined {\n const input = attributes[\"gen_ai.usage.input_tokens\"];\n const output = attributes[\"gen_ai.usage.output_tokens\"];\n const usage: PersistedTokenUsage = {};\n if (typeof input === \"number\" && Number.isFinite(input) && input >= 0) {\n usage.input = input;\n }\n if (typeof output === \"number\" && Number.isFinite(output) && output >= 0) {\n usage.output = output;\n }\n if (usage.input !== undefined && usage.output !== undefined) {\n usage.total = usage.input + usage.output;\n }\n return Object.keys(usage).length > 0 ? usage : undefined;\n}\n\nfunction readOtlpConfidence(\n attributes: JsonRecord,\n): PersistedInspectEvent[\"confidence\"] {\n return readOpenInferenceConfidence(attributes);\n}\n\nfunction sanitizeOtlpAttributes(\n attributes: JsonRecord,\n pathPrefix: string,\n): {\n attributes: Record<string, unknown>;\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n} {\n const ownerPath = pathPrefix.endsWith(\".attributes\")\n ? pathPrefix.slice(0, -\".attributes\".length)\n : pathPrefix;\n const sanitized = sanitizeOpenInferenceAttributes(attributes, ownerPath);\n return {\n ...sanitized,\n warnings: sanitized.warnings.map((warning) =>\n warning.code === \"openinference_sensitive_attribute_summarized\"\n ? {\n ...warning,\n code: \"otlp_sensitive_attribute_summarized\",\n message:\n \"OTLP prompt/output/document attribute(s) were summarized instead of copied verbatim.\",\n }\n : warning,\n ),\n };\n}\n\nfunction mapOtlpEvents(\n value: unknown,\n pathPrefix: string,\n): {\n events?: Record<string, unknown>[];\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n} {\n const warnings: TraceReadWarning[] = [];\n const unsupportedFields: string[] = [];\n if (value === undefined) return { warnings, unsupportedFields };\n if (!Array.isArray(value)) {\n unsupportedFields.push(pathPrefix);\n warnings.push({\n code: \"otlp_events_invalid\",\n message: \"OTLP events field was not an array.\",\n severity: \"warning\",\n field: pathPrefix,\n });\n return { warnings, unsupportedFields };\n }\n\n const events: Record<string, unknown>[] = [];\n for (const [index, event] of value.entries()) {\n const eventPath = `${pathPrefix}[${index}]`;\n if (!isRecord(event)) {\n unsupportedFields.push(eventPath);\n continue;\n }\n const parsedAttributes = parseOtlpAttributes(\n event.attributes,\n `${eventPath}.attributes`,\n );\n warnings.push(...parsedAttributes.warnings);\n unsupportedFields.push(...parsedAttributes.unsupportedFields);\n const sanitized = sanitizeOtlpAttributes(\n parsedAttributes.attributes,\n `${eventPath}.attributes`,\n );\n warnings.push(...sanitized.warnings);\n unsupportedFields.push(...sanitized.unsupportedFields);\n\n const out: Record<string, unknown> = {};\n const name = readStringField(event, [\"name\"]);\n if (name !== undefined) {\n out.name = name;\n }\n const timestamp = parseUnixNanoToIso(event.timeUnixNano);\n if (timestamp !== undefined) {\n out.timestamp = timestamp;\n } else if (event.timeUnixNano !== undefined) {\n unsupportedFields.push(`${eventPath}.timeUnixNano`);\n warnings.push({\n code: \"otlp_event_timestamp_invalid\",\n message: \"OTLP event timeUnixNano could not be parsed.\",\n severity: \"warning\",\n field: `${eventPath}.timeUnixNano`,\n });\n }\n if (Object.keys(sanitized.attributes).length > 0) {\n out.attributes = sanitized.attributes;\n }\n events.push(out);\n }\n\n return {\n events: events.length > 0 ? events : undefined,\n warnings,\n unsupportedFields,\n };\n}\n\nfunction mapOtlpSpan(context: OtlpSpanContext): OpenInferenceMappedSpan {\n const { span, pathPrefix } = context;\n const warnings: TraceReadWarning[] = [];\n const unsupportedFields: string[] = [];\n const parsedSpanAttributes = parseOtlpAttributes(\n span.attributes,\n `${pathPrefix}.attributes`,\n );\n warnings.push(...parsedSpanAttributes.warnings);\n unsupportedFields.push(...parsedSpanAttributes.unsupportedFields);\n\n const sanitizedSpanAttributes = sanitizeOtlpAttributes(\n parsedSpanAttributes.attributes,\n `${pathPrefix}.attributes`,\n );\n warnings.push(...sanitizedSpanAttributes.warnings);\n unsupportedFields.push(...sanitizedSpanAttributes.unsupportedFields);\n\n const attributes: Record<string, unknown> = {\n ...sanitizedSpanAttributes.attributes,\n };\n for (const [key, value] of Object.entries(context.resourceAttributes)) {\n attributes[`resource.${key}`] = value;\n }\n for (const [key, value] of Object.entries(context.scopeAttributes)) {\n attributes[`scope.${key}`] = value;\n }\n if (context.scopeName !== undefined) {\n attributes[\"scope.name\"] = context.scopeName;\n }\n if (context.scopeVersion !== undefined) {\n attributes[\"scope.version\"] = context.scopeVersion;\n }\n\n for (const [key, value] of Object.entries(span)) {\n if (OTLP_SPAN_KEYS.has(key)) continue;\n unsupportedFields.push(`${pathPrefix}.${key}`);\n if (value === null || typeof value !== \"object\") {\n attributes[`otlp.${key}`] = value;\n } else {\n attributes[`otlp.${key}.summary`] = summarizeAttributeValue(value);\n warnings.push({\n code: \"otlp_unsupported_field_summarized\",\n message: `Unsupported OTLP span field \"${key}\" was summarized.`,\n severity: \"warning\",\n field: `${pathPrefix}.${key}`,\n });\n }\n }\n\n for (const key of [\n \"droppedAttributesCount\",\n \"droppedEventsCount\",\n \"droppedLinksCount\",\n \"links\",\n ]) {\n if (span[key] !== undefined) {\n unsupportedFields.push(`${pathPrefix}.${key}`);\n warnings.push({\n code: \"otlp_span_field_not_mapped\",\n message: `OTLP span field \"${key}\" is not represented in AgentInspect events.`,\n severity: \"warning\",\n field: `${pathPrefix}.${key}`,\n });\n }\n }\n\n const events = mapOtlpEvents(span.events, `${pathPrefix}.events`);\n warnings.push(...events.warnings);\n unsupportedFields.push(...events.unsupportedFields);\n if (events.events !== undefined) {\n attributes[\"otlp.events\"] = events.events;\n }\n\n const traceId = readStringField(span, [\"traceId\"]) ?? \"trace-unknown\";\n const spanId = readStringField(span, [\"spanId\"]) ?? \"span-unknown\";\n const parentSpanId = readStringField(span, [\"parentSpanId\"]);\n const startedAt = readOpenInferenceTimestamp(\n span,\n [\"startTimeUnixNano\"],\n [],\n );\n const endedAt = readOpenInferenceTimestamp(span, [\"endTimeUnixNano\"], []);\n const timestamp = startedAt ?? \"1970-01-01T00:00:00.000Z\";\n if (startedAt === undefined) {\n unsupportedFields.push(`${pathPrefix}.startTimeUnixNano`);\n warnings.push({\n code: \"otlp_missing_start_time\",\n message: \"OTLP span is missing a valid startTimeUnixNano; using Unix epoch.\",\n severity: \"warning\",\n field: `${pathPrefix}.startTimeUnixNano`,\n });\n }\n\n const { kind, warnings: kindWarnings } = readOtlpKind(\n parsedSpanAttributes.attributes,\n pathPrefix,\n );\n warnings.push(...kindWarnings);\n const status = mapOtlpStatus(span.status);\n const tokenUsage = readOtlpTokenUsage(parsedSpanAttributes.attributes);\n const errorMessage =\n isRecord(span.status) && typeof span.status.message === \"string\"\n ? span.status.message\n : undefined;\n\n const event: PersistedInspectEvent = {\n schemaVersion: \"0.2\",\n eventId:\n typeof parsedSpanAttributes.attributes[\"agent_inspect.event_id\"] === \"string\"\n ? parsedSpanAttributes.attributes[\"agent_inspect.event_id\"]\n : spanId,\n runId:\n typeof parsedSpanAttributes.attributes[\"agent_inspect.run_id\"] === \"string\"\n ? parsedSpanAttributes.attributes[\"agent_inspect.run_id\"]\n : traceId,\n kind,\n name: readStringField(span, [\"name\"]) ?? spanId,\n timestamp,\n confidence: readOtlpConfidence(parsedSpanAttributes.attributes),\n source: {\n type: \"otel\",\n name:\n context.scopeName ??\n (typeof context.resourceAttributes[\"service.name\"] === \"string\"\n ? context.resourceAttributes[\"service.name\"]\n : \"otlp-json\"),\n ...(context.scopeVersion !== undefined\n ? { version: context.scopeVersion }\n : {}),\n },\n attributes,\n trace: {\n traceId,\n spanId,\n ...(parentSpanId !== undefined ? { parentSpanId } : {}),\n },\n };\n\n if (status !== undefined) {\n event.status = status;\n }\n if (startedAt !== undefined) {\n event.startedAt = startedAt;\n }\n if (endedAt !== undefined) {\n event.endedAt = endedAt;\n }\n const durationMs = durationBetweenIso(startedAt, endedAt);\n if (durationMs !== undefined) {\n event.durationMs = durationMs;\n }\n if (tokenUsage !== undefined) {\n event.tokenUsage = tokenUsage;\n }\n if (status === \"error\") {\n event.error = {\n message: errorMessage !== undefined && errorMessage.trim() !== \"\" ? errorMessage : \"OTLP span error\",\n };\n }\n\n return {\n event,\n warnings,\n unsupportedFields,\n spanId,\n ...(parentSpanId !== undefined ? { parentSpanId } : {}),\n };\n}\n\nfunction mapOtlpEventsToPersisted(document: OtlpDocument): {\n events: PersistedInspectEvent[];\n warnings: TraceReadWarning[];\n unsupportedFields: string[];\n} {\n const mapped = document.spans.map((span) => mapOtlpSpan(span));\n const spanIdToEventId = new Map(\n mapped.map((span) => [span.spanId, span.event.eventId] as const),\n );\n for (const span of mapped) {\n if (span.parentSpanId === undefined) continue;\n span.event.parentId = spanIdToEventId.get(span.parentSpanId) ?? span.parentSpanId;\n }\n return {\n events: mapped.map((span) => span.event),\n warnings: mapped.flatMap((span) => span.warnings),\n unsupportedFields: mapped.flatMap((span) => span.unsupportedFields),\n };\n}\n\nexport const otlpJsonReader: TraceReader = {\n format: OTLP_READER_FORMAT,\n name: \"OTLP JSON\",\n async detect(input) {\n const resolved = await resolveInput(input);\n if (!resolved) return undefined;\n\n let parsed: unknown;\n try {\n parsed = parseJsonDocument(resolved.content);\n } catch {\n return undefined;\n }\n\n const document = extractOtlpDocument(parsed);\n if (!document) return undefined;\n\n return {\n format: OTLP_READER_FORMAT,\n confidence: document.confidence,\n readerName: \"OTLP JSON\",\n description: document.description,\n warnings: attachSingleSourceFile(document.warnings, resolved),\n };\n },\n async read(input) {\n const resolved = await resolveInput(input);\n if (!resolved) {\n throw new TraceReadError(\n \"unsupported_format\",\n \"OTLP JSON reader requires file, string, or buffer input.\",\n );\n }\n\n let parsed: unknown;\n try {\n parsed = parseJsonDocument(resolved.content);\n } catch {\n throw new TraceReadError(\"unsupported_format\", \"OTLP JSON input is not valid JSON.\", [\n {\n code: \"otlp_invalid_json\",\n message: \"OTLP JSON reader could not parse the input as JSON.\",\n severity: \"error\",\n },\n ]);\n }\n\n const document = extractOtlpDocument(parsed);\n if (!document || document.spans.length === 0) {\n throw new TraceReadError(\n \"unsupported_format\",\n \"No valid OTLP spans found.\",\n attachSingleSourceFile(\n document?.warnings ?? [\n {\n code: \"otlp_no_valid_spans\",\n message: \"OTLP JSON input did not contain valid spans.\",\n severity: \"error\",\n },\n ],\n resolved,\n ),\n );\n }\n\n const mapped = mapOtlpEventsToPersisted(document);\n const warnings = attachSingleSourceFile(\n [...document.warnings, ...mapped.warnings],\n resolved,\n );\n const unsupportedFields = [\n ...document.unsupportedFields,\n ...mapped.unsupportedFields,\n ].sort((a, b) => a.localeCompare(b));\n\n return {\n format: OTLP_READER_FORMAT,\n events: mapped.events,\n runs: persistedInspectEventsToRunTrees(mapped.events, { skipInvalid: true }),\n warnings,\n unsupportedFields,\n sourceFiles: resolved.sourceFiles,\n };\n },\n};\n\nexport const agentInspectJsonlReader: TraceReader = {\n format: \"agent-inspect-jsonl\",\n name: \"AgentInspect JSONL\",\n async detect(input) {\n const resolved = await resolveInput(input);\n if (!resolved) return undefined;\n const detected = detectJsonlFormat(resolved.content);\n if (detected.validRows === 0 || detected.format === \"empty\") {\n return undefined;\n }\n\n return {\n format: \"agent-inspect-jsonl\",\n confidence: 0.95,\n readerName: \"AgentInspect JSONL\",\n description: agentInspectFormatLabel(detected.format),\n warnings: attachSingleSourceFile(detected.warnings, resolved),\n };\n },\n async read(input) {\n const resolved = await resolveInput(input);\n if (!resolved) {\n throw new Error(\"AgentInspect JSONL reader requires file, directory, string, or buffer input.\");\n }\n\n const parsed = parseTraceJsonl(resolved.content, { warnings: false });\n if (parsed.sourceEventCount === 0) {\n throw new Error(\"No valid AgentInspect JSONL events found.\");\n }\n\n const events = persistedEventsForParsedTrace(parsed);\n return {\n format: agentInspectFormatLabel(parsed.format),\n events,\n runs: persistedInspectEventsToRunTrees(events, { skipInvalid: true }),\n warnings:\n parsed.format === \"mixed\"\n ? attachSingleSourceFile(\n [\n {\n code: \"mixed_agent_inspect_jsonl\",\n message:\n \"Trace input mixes schemaVersion 0.1 and 0.2 rows; events were normalized for reading.\",\n severity: \"warning\",\n },\n ],\n resolved,\n )\n : [],\n unsupportedFields: [],\n sourceFiles: resolved.sourceFiles,\n };\n },\n};\n\nexport const DEFAULT_TRACE_READERS: readonly TraceReader[] = [\n agentInspectJsonlReader,\n openInferenceJsonReader,\n otlpJsonReader,\n];\n\nexport async function detectTraceFormat(\n input: TraceInput,\n options: TraceReadOptions = {},\n): Promise<TraceFormatDetectionResult> {\n const readers = options.readers ?? DEFAULT_TRACE_READERS;\n\n if (options.format !== undefined) {\n const reader = findReaderByFormat(options.format, readers);\n if (!reader) {\n return {\n status: \"unsupported\",\n candidates: [],\n warnings: [\n {\n code: \"unsupported_format\",\n message: `No trace reader is registered for format \"${options.format}\".`,\n severity: \"error\",\n },\n ],\n };\n }\n\n return {\n status: \"detected\",\n format: reader.format,\n candidates: [\n {\n format: reader.format,\n confidence: 1,\n readerName: reader.name,\n description: \"Explicit format override\",\n },\n ],\n warnings: [],\n };\n }\n\n const candidates: TraceFormatCandidate[] = [];\n const warnings: TraceReadWarning[] = [];\n\n for (const reader of readers) {\n try {\n const candidate = await reader.detect(input);\n if (candidate !== undefined) {\n candidates.push(normalizeCandidate(reader, candidate));\n }\n } catch (error) {\n if (error instanceof TraceReadError) {\n warnings.push(...error.warnings);\n continue;\n }\n warnings.push({\n code: \"reader_detect_failed\",\n message:\n error instanceof Error && error.message.trim() !== \"\"\n ? error.message\n : `Trace reader \"${reader.format}\" failed during detection.`,\n severity: \"warning\",\n });\n }\n }\n\n const sorted = sortCandidates(\n candidates.filter((candidate) => candidate.confidence >= MIN_DETECTION_CONFIDENCE),\n );\n const candidateWarnings = collectWarnings(sorted);\n const lowConfidenceWarnings: TraceReadWarning[] =\n candidates.length > sorted.length\n ? [\n {\n code: \"low_confidence_candidates\",\n message: `Ignored ${candidates.length - sorted.length} low-confidence format candidate(s).`,\n severity: \"info\",\n },\n ]\n : [];\n const allWarnings = dedupeWarnings([\n ...warnings,\n ...candidateWarnings,\n ...lowConfidenceWarnings,\n ]);\n\n if (sorted.length === 0) {\n return {\n status: \"unsupported\",\n candidates: [],\n warnings: allWarnings,\n };\n }\n\n const [best, second] = sorted;\n if (\n second !== undefined &&\n best.confidence - second.confidence <= AMBIGUOUS_CONFIDENCE_DELTA\n ) {\n return {\n status: \"ambiguous\",\n candidates: sorted,\n warnings: [\n ...allWarnings,\n {\n code: \"ambiguous_format_candidates\",\n message: `Top trace format candidates are within ${AMBIGUOUS_CONFIDENCE_DELTA} confidence.`,\n severity: \"warning\",\n },\n ],\n };\n }\n\n return {\n status: \"detected\",\n format: best.format,\n candidates: sorted,\n warnings: allWarnings,\n };\n}\n\nexport async function readTrace(\n input: TraceInput,\n options: TraceReadOptions = {},\n): Promise<TraceReadResult> {\n const readers = options.readers ?? DEFAULT_TRACE_READERS;\n const detection = await detectTraceFormat(input, options);\n\n if (detection.status === \"unsupported\" || detection.format === undefined) {\n throw new TraceReadError(\n \"unsupported_format\",\n \"No trace reader could detect the input format.\",\n detection.warnings,\n );\n }\n if (detection.status === \"ambiguous\") {\n throw new TraceReadError(\n \"ambiguous_format\",\n \"Multiple trace readers matched the input with equal confidence.\",\n detection.warnings,\n );\n }\n\n const reader = findReaderByFormat(detection.format, readers);\n if (!reader) {\n throw new TraceReadError(\n \"unsupported_format\",\n `No trace reader is registered for format \"${detection.format}\".`,\n detection.warnings,\n );\n }\n\n try {\n const result = await reader.read(input, { format: detection.format });\n return {\n ...result,\n format: result.format || detection.format,\n warnings: [...detection.warnings, ...result.warnings],\n };\n } catch (error) {\n if (error instanceof TraceReadError) {\n throw new TraceReadError(\n error.code,\n error.message,\n dedupeWarnings([...detection.warnings, ...error.warnings]),\n );\n }\n throw new TraceReadError(\n \"reader_failed\",\n error instanceof Error && error.message.trim() !== \"\"\n ? error.message\n : `Trace reader \"${reader.format}\" failed.`,\n detection.warnings,\n );\n }\n}\n\nexport function openTrace(\n input: TraceInput,\n options: TraceReadOptions = {},\n): Promise<TraceReadResult> {\n return readTrace(input, options);\n}\n","import { access } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { getTraceFilePath } from \"../utils.js\";\nimport type { SuiteCaseConfig } from \"./types.js\";\n\nexport interface ResolvedSuiteCase {\n caseId: string;\n tracePath?: string;\n runId?: string;\n missing: boolean;\n reason?: string;\n}\n\nasync function exists(filePath: string): Promise<boolean> {\n try {\n await access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function resolveSuiteCaseTrace(\n suiteCase: SuiteCaseConfig,\n options: { configDir: string; tracesDir: string },\n): Promise<ResolvedSuiteCase> {\n if (suiteCase.trace !== undefined) {\n const tracePath = path.resolve(options.configDir, suiteCase.trace);\n if (await exists(tracePath)) {\n return { caseId: suiteCase.id, tracePath, missing: false };\n }\n return {\n caseId: suiteCase.id,\n tracePath,\n missing: true,\n reason: `trace file not found: ${suiteCase.trace}`,\n };\n }\n\n const runKey = suiteCase.runId ?? suiteCase.id;\n const directPath = getTraceFilePath(runKey, options.tracesDir);\n if (await exists(directPath)) {\n return { caseId: suiteCase.id, tracePath: directPath, runId: runKey, missing: false };\n }\n\n const nestedPath = path.join(options.tracesDir, `${path.basename(runKey)}.jsonl`);\n if (await exists(nestedPath)) {\n return { caseId: suiteCase.id, tracePath: nestedPath, runId: runKey, missing: false };\n }\n\n return {\n caseId: suiteCase.id,\n runId: runKey,\n missing: true,\n reason: `no trace found for run id \"${runKey}\" under ${options.tracesDir}`,\n };\n}\n","import path from \"node:path\";\n\nimport {\n createLlmUsageRule,\n createObservedOutcomeRule,\n createRunDurationRule,\n createRunStatusRule,\n createToolUsageRule,\n runTraceChecks,\n type TraceCheckRule,\n} from \"../checks/index.js\";\nimport { extractOutcomesFromPersistedEvents, extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { openTrace, type TraceReadResult } from \"../readers/index.js\";\nimport type { TraceEvent } from \"../types.js\";\nimport { loadSuiteConfig } from \"./load.js\";\nimport { resolveSuiteCaseTrace } from \"./resolve.js\";\nimport type {\n RunSuiteOptions,\n SuiteCaseConfig,\n SuiteCaseResult,\n SuiteConfig,\n SuiteDiagnostic,\n SuiteRunResult,\n} from \"./types.js\";\n\nfunction diagnostic(\n code: SuiteDiagnostic[\"code\"],\n message: string,\n severity: SuiteDiagnostic[\"severity\"] = \"error\",\n caseId?: string,\n): SuiteDiagnostic {\n return { code, message, severity, ...(caseId !== undefined ? { caseId } : {}) };\n}\n\nfunction buildCaseRules(\n suiteCase: SuiteCaseConfig,\n config: SuiteConfig,\n): { rules: TraceCheckRule[]; select: string[] } {\n const rules: TraceCheckRule[] = [];\n const select = new Set<string>(config.checks?.select ?? []);\n\n if (select.has(\"run.status\")) {\n rules.push(createRunStatusRule());\n }\n\n const requiredTools = [\n ...(config.checks?.tool?.required ?? []),\n ...(suiteCase.requireTools ?? []),\n ];\n const forbiddenTools = [\n ...(config.checks?.tool?.forbidden ?? []),\n ...(suiteCase.forbidTools ?? []),\n ];\n if (requiredTools.length > 0 || forbiddenTools.length > 0) {\n rules.push(\n createToolUsageRule({\n required: requiredTools.length > 0 ? requiredTools : undefined,\n forbidden: forbiddenTools.length > 0 ? forbiddenTools : undefined,\n }),\n );\n select.add(\"tool.usage\");\n }\n\n const maxDurationMs =\n suiteCase.maxDurationMs ??\n config.checks?.run?.maxDurationMs ??\n config.eval?.maxDurationMs;\n if (maxDurationMs !== undefined) {\n rules.push(createRunDurationRule({ maxDurationMs }));\n select.add(\"run.duration\");\n }\n\n const llm = config.checks?.llm;\n if (llm?.allowedModels !== undefined || llm?.maxTotalTokens !== undefined) {\n rules.push(createLlmUsageRule(llm));\n select.add(\"llm.usage\");\n }\n\n if (select.has(\"outcome.status\")) {\n rules.push(createObservedOutcomeRule({ failOn: [\"failed\"] }));\n }\n\n return { rules, select: [...select] };\n}\n\nfunction outcomesFromRead(read: TraceReadResult) {\n const persistedOutcomes = extractOutcomesFromPersistedEvents(\n read.events.filter((event) => event.kind === \"OUTCOME\"),\n );\n if (persistedOutcomes.length > 0) return persistedOutcomes;\n\n const traceEvents: TraceEvent[] = [];\n for (const event of read.events) {\n const legacy = event as unknown as TraceEvent;\n if (\n typeof legacy === \"object\" &&\n legacy !== null &&\n \"event\" in legacy &&\n legacy.event === \"outcome_observed\"\n ) {\n traceEvents.push(legacy);\n }\n }\n return traceEvents.length > 0 ? extractOutcomesFromTraceEvents(traceEvents) : [];\n}\n\nfunction validateExpectedObservations(\n suiteCase: SuiteCaseConfig,\n read: TraceReadResult,\n): { ok: boolean; diagnostics: SuiteDiagnostic[] } {\n const expected = suiteCase.expectedObservations ?? [];\n if (expected.length === 0) return { ok: true, diagnostics: [] };\n\n const outcomes = outcomesFromRead(read);\n\n const diagnostics: SuiteDiagnostic[] = [];\n for (const name of expected) {\n const match = outcomes.find((outcome) => outcome.name === name);\n if (!match) {\n diagnostics.push(\n diagnostic(\n \"AI_SUITE_CASE_OBSERVATION_FAILED\",\n `Expected observation \"${name}\" was not recorded.`,\n \"error\",\n suiteCase.id,\n ),\n );\n continue;\n }\n if (match.status !== \"passed\") {\n diagnostics.push(\n diagnostic(\n \"AI_SUITE_CASE_OBSERVATION_FAILED\",\n `Observation \"${name}\" has status \"${match.status}\", expected \"passed\".`,\n \"error\",\n suiteCase.id,\n ),\n );\n }\n }\n\n return { ok: diagnostics.length === 0, diagnostics };\n}\n\nasync function runSuiteCase(\n suiteCase: SuiteCaseConfig,\n config: SuiteConfig,\n options: { configDir: string; tracesDir: string },\n): Promise<SuiteCaseResult> {\n const resolved = await resolveSuiteCaseTrace(suiteCase, options);\n if (resolved.missing || resolved.tracePath === undefined) {\n return {\n id: suiteCase.id,\n status: \"skipped\",\n ...(resolved.runId !== undefined ? { runId: resolved.runId } : {}),\n message: resolved.reason,\n diagnostics: [\n diagnostic(\n \"AI_SUITE_CASE_TRACE_MISSING\",\n resolved.reason ?? \"Trace not found.\",\n \"warning\",\n suiteCase.id,\n ),\n ],\n };\n }\n\n let read: TraceReadResult;\n try {\n read = await openTrace({ type: \"file\", path: resolved.tracePath });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n id: suiteCase.id,\n status: \"error\",\n tracePath: resolved.tracePath,\n ...(resolved.runId !== undefined ? { runId: resolved.runId } : {}),\n message,\n diagnostics: [\n diagnostic(\"AI_SUITE_TRACE_UNREADABLE\", message, \"error\", suiteCase.id),\n ],\n };\n }\n\n const { rules, select } = buildCaseRules(suiteCase, config);\n const checkResult =\n rules.length > 0\n ? runTraceChecks({ read }, { rules, select })\n : {\n ok: true,\n status: \"pass\" as const,\n format: read.format,\n summary: { passed: 0, failed: 0, warnings: 0, errors: 0 },\n findings: [],\n diagnostics: [],\n };\n const observationResult = validateExpectedObservations(suiteCase, read);\n\n const diagnostics = [\n ...checkResult.diagnostics.map((item) =>\n diagnostic(\n \"AI_SUITE_CASE_CHECK_FAILED\",\n item.message,\n item.severity,\n suiteCase.id,\n ),\n ),\n ...checkResult.findings\n .filter((finding) => finding.status === \"fail\")\n .map((finding) =>\n diagnostic(\n \"AI_SUITE_CASE_CHECK_FAILED\",\n finding.message,\n finding.severity,\n suiteCase.id,\n ),\n ),\n ...observationResult.diagnostics,\n ];\n\n const checkOk = checkResult.ok;\n const observationsOk = observationResult.ok;\n const ok = checkOk && observationsOk;\n const status = ok ? \"pass\" : checkResult.status === \"error\" ? \"error\" : \"fail\";\n\n return {\n id: suiteCase.id,\n status,\n tracePath: resolved.tracePath,\n ...(resolved.runId !== undefined ? { runId: resolved.runId } : {}),\n checkOk,\n observationsOk,\n diagnostics,\n ...(ok\n ? {}\n : {\n message:\n diagnostics.map((item) => item.message).join(\"; \") ||\n checkResult.findings.map((item) => item.message).join(\"; \"),\n }),\n };\n}\n\nexport async function runSuite(options: RunSuiteOptions = {}): Promise<SuiteRunResult> {\n const startedAt = new Date(options.nowMs ?? Date.now()).toISOString();\n const { config, configPath, configDir } = await loadSuiteConfig(options);\n const tracesDir = path.resolve(configDir, config.traces);\n\n const cases: SuiteCaseResult[] = [];\n const diagnostics: SuiteDiagnostic[] = [];\n\n for (const suiteCase of config.cases) {\n cases.push(\n await runSuiteCase(suiteCase, config, {\n configDir,\n tracesDir,\n }),\n );\n }\n\n const summary = {\n passed: cases.filter((item) => item.status === \"pass\").length,\n failed: cases.filter((item) => item.status === \"fail\").length,\n errors: cases.filter((item) => item.status === \"error\").length,\n skipped: cases.filter((item) => item.status === \"skipped\").length,\n };\n\n const finishedAt = new Date(options.nowMs ?? Date.now()).toISOString();\n const ok = summary.failed === 0 && summary.errors === 0;\n const status =\n summary.errors > 0 ? \"error\" : summary.failed > 0 || !ok ? \"fail\" : \"pass\";\n\n return {\n ok,\n status,\n suiteName: config.name,\n configPath,\n tracesDir,\n startedAt,\n finishedAt,\n summary,\n cases,\n diagnostics,\n };\n}\n","import type { RenderSuiteReportOptions, SuiteRunResult } from \"./types.js\";\n\nfunction statusLabel(status: string): string {\n return status.toUpperCase();\n}\n\nexport function renderSuiteReportMarkdown(result: SuiteRunResult): string {\n const lines: string[] = [];\n lines.push(`# Suite: ${result.suiteName}`);\n lines.push(\"\");\n lines.push(`Status: **${statusLabel(result.status)}**`);\n lines.push(`Config: \\`${result.configPath}\\``);\n lines.push(`Traces: \\`${result.tracesDir}\\``);\n lines.push(`Started: ${result.startedAt}`);\n lines.push(`Finished: ${result.finishedAt}`);\n lines.push(\"\");\n lines.push(\"## Summary\");\n lines.push(`- Passed: ${result.summary.passed}`);\n lines.push(`- Failed: ${result.summary.failed}`);\n lines.push(`- Errors: ${result.summary.errors}`);\n lines.push(`- Skipped: ${result.summary.skipped}`);\n lines.push(\"\");\n lines.push(\"## Cases\");\n for (const suiteCase of result.cases) {\n lines.push(`### ${suiteCase.id} — ${statusLabel(suiteCase.status)}`);\n if (suiteCase.tracePath !== undefined) {\n lines.push(`- Trace: \\`${suiteCase.tracePath}\\``);\n }\n if (suiteCase.runId !== undefined) {\n lines.push(`- Run: \\`${suiteCase.runId}\\``);\n }\n if (suiteCase.message !== undefined && suiteCase.message.trim() !== \"\") {\n lines.push(`- ${suiteCase.message}`);\n }\n if (suiteCase.diagnostics.length > 0) {\n for (const item of suiteCase.diagnostics) {\n lines.push(`- [${item.severity}] ${item.message}`);\n }\n }\n lines.push(\"\");\n }\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderSuiteReport(\n result: SuiteRunResult,\n options: RenderSuiteReportOptions = {},\n): string {\n const format = options.format ?? \"markdown\";\n if (format === \"json\") {\n return JSON.stringify(result, null, 2);\n }\n return renderSuiteReportMarkdown(result);\n}\n","import type { TraceMetadataStatus } from \"../types.js\";\n\nexport type CohortMetricId =\n | \"errorRate\"\n | \"duration\"\n | \"toolChoice\"\n | \"toolOrdering\"\n | \"llmCallCount\"\n | \"tokenUsage\"\n | \"retryCount\"\n | \"observationFailure\"\n | \"guardrailFailure\"\n | \"circuitViolation\"\n | \"redactionWarning\";\n\nexport const COHORT_METRIC_IDS: readonly CohortMetricId[] = [\n \"errorRate\",\n \"duration\",\n \"toolChoice\",\n \"toolOrdering\",\n \"llmCallCount\",\n \"tokenUsage\",\n \"retryCount\",\n \"observationFailure\",\n \"guardrailFailure\",\n \"circuitViolation\",\n \"redactionWarning\",\n];\n\nexport interface CohortRunMetrics {\n runId: string;\n cohortLabel?: string;\n groupKey: string;\n status: TraceMetadataStatus;\n error: boolean;\n durationMs?: number;\n llmCallCount: number;\n tokenUsageTotal?: number;\n retryCount: number;\n observationFailures: number;\n guardrailFailures: number;\n circuitViolations: number;\n redactionWarnings: number;\n toolChoices: string[];\n toolOrdering: string[];\n}\n\nexport interface CohortAggregateMetrics {\n groupKey: string;\n cohortLabel?: string;\n runCount: number;\n errorRate: number;\n avgDurationMs?: number;\n p95DurationMs?: number;\n avgLlmCallCount: number;\n avgTokenUsage?: number;\n avgRetryCount: number;\n observationFailureRate: number;\n avgGuardrailFailures: number;\n avgCircuitViolations: number;\n avgRedactionWarnings: number;\n dominantToolChoice?: string;\n toolOrderingSignature?: string;\n}\n\nexport interface CohortMetricComparison {\n metric: CohortMetricId;\n baseline?: number | string;\n candidate?: number | string;\n delta?: number | string;\n regression: boolean;\n message: string;\n}\n\nexport interface CohortAnalysisResult {\n ok: boolean;\n traceDir: string;\n baseline?: string;\n candidate?: string;\n cohortKey: string;\n groupBy: string;\n metrics: CohortMetricId[];\n groups: CohortAggregateMetrics[];\n comparisons: CohortMetricComparison[];\n runs: CohortRunMetrics[];\n warnings: string[];\n}\n\nexport interface AnalyzeCohortOptions {\n traceDir: string;\n baseline?: string;\n candidate?: string;\n cohortKey?: string;\n groupBy?: string;\n metrics?: CohortMetricId[];\n}\n\nexport interface RenderCohortReportOptions {\n format?: \"markdown\" | \"json\" | \"html\";\n}\n","import { extractSessionWorkflowMetadata } from \"../sessions/metadata.js\";\nimport type { SessionRunRecord } from \"../sessions/types.js\";\n\nexport function parseCohortMetricList(value: string | undefined): string[] {\n if (value === undefined || value.trim() === \"\") return [];\n return value\n .split(\",\")\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n}\n\nexport function parseGroupBySpec(groupBy: string | undefined): {\n kind: \"model\" | \"session\" | \"group\" | \"metadata\";\n metadataKey?: string;\n} {\n const raw = (groupBy ?? \"model\").trim();\n if (raw === \"model\") return { kind: \"model\" };\n if (raw === \"session\") return { kind: \"session\" };\n if (raw === \"group\") return { kind: \"group\" };\n if (raw.startsWith(\"metadata.\")) {\n const metadataKey = raw.slice(\"metadata.\".length).trim();\n if (metadataKey === \"\") throw new Error(\"metadata group-by requires a key.\");\n return { kind: \"metadata\", metadataKey };\n }\n throw new Error(`Unsupported --group-by value: ${raw}`);\n}\n\nfunction metadataString(\n metadata: Record<string, unknown> | undefined,\n key: string,\n): string | undefined {\n const value = metadata?.[key];\n return typeof value === \"string\" && value.trim() !== \"\" ? value.trim() : undefined;\n}\n\nexport function resolveRunGroupKey(\n run: SessionRunRecord,\n groupBy: ReturnType<typeof parseGroupBySpec>,\n): string {\n const metadata = run.metadata ?? {};\n switch (groupBy.kind) {\n case \"model\":\n return metadataString(metadata, \"model\") ?? \"unknown\";\n case \"session\":\n return (\n extractSessionWorkflowMetadata(metadata)?.sessionId ??\n metadataString(metadata, \"sessionId\") ??\n \"__unscoped__\"\n );\n case \"group\":\n return (\n extractSessionWorkflowMetadata(metadata)?.groupId ??\n metadataString(metadata, \"groupId\") ??\n \"__unscoped__\"\n );\n case \"metadata\":\n return metadataString(metadata, groupBy.metadataKey!) ?? \"__missing__\";\n default:\n return \"unknown\";\n }\n}\n\nexport function resolveCohortLabel(\n run: SessionRunRecord,\n cohortKey: string,\n baseline?: string,\n candidate?: string,\n): string | undefined {\n const label = metadataString(run.metadata, cohortKey);\n if (label === undefined) return undefined;\n if (baseline !== undefined && label === baseline) return baseline;\n if (candidate !== undefined && label === candidate) return candidate;\n if (baseline === undefined && candidate === undefined) return label;\n return undefined;\n}\n\nexport function filterRunsForCohort(\n runs: readonly SessionRunRecord[],\n options: {\n cohortKey: string;\n baseline?: string;\n candidate?: string;\n },\n): { runs: SessionRunRecord[]; warnings: string[] } {\n const warnings: string[] = [];\n if (options.baseline === undefined && options.candidate === undefined) {\n return { runs: [...runs], warnings };\n }\n\n const selected: SessionRunRecord[] = [];\n for (const run of runs) {\n const label = resolveCohortLabel(\n run,\n options.cohortKey,\n options.baseline,\n options.candidate,\n );\n if (label !== undefined) selected.push(run);\n }\n\n if (selected.length === 0) {\n warnings.push(\n `No runs matched baseline/candidate labels on metadata.${options.cohortKey}.`,\n );\n }\n\n return { runs: selected, warnings };\n}\n","import type {\n CohortAggregateMetrics,\n CohortMetricComparison,\n CohortMetricId,\n} from \"./types.js\";\n\nfunction compareNumber(\n metric: CohortMetricId,\n label: string,\n baseline?: number,\n candidate?: number,\n higherIsWorse = true,\n): CohortMetricComparison | undefined {\n if (baseline === undefined && candidate === undefined) return undefined;\n const delta =\n baseline !== undefined && candidate !== undefined\n ? candidate - baseline\n : undefined;\n const regression =\n delta !== undefined &&\n ((higherIsWorse && delta > 0) || (!higherIsWorse && delta < 0));\n return {\n metric,\n baseline,\n candidate,\n delta,\n regression,\n message: `${label}: baseline=${baseline ?? \"n/a\"} candidate=${candidate ?? \"n/a\"}${\n delta !== undefined ? ` (delta ${delta})` : \"\"\n }`,\n };\n}\n\nfunction pickAggregate(\n groups: readonly CohortAggregateMetrics[],\n cohortLabel: string,\n groupKey?: string,\n): CohortAggregateMetrics | undefined {\n return groups.find(\n (group) =>\n group.cohortLabel === cohortLabel &&\n (groupKey === undefined || group.groupKey === groupKey),\n );\n}\n\nexport function compareCohortAggregates(\n groups: readonly CohortAggregateMetrics[],\n options: {\n baseline: string;\n candidate: string;\n metrics: readonly CohortMetricId[];\n groupKey?: string;\n },\n): CohortMetricComparison[] {\n const baselineAgg = pickAggregate(groups, options.baseline, options.groupKey);\n const candidateAgg = pickAggregate(groups, options.candidate, options.groupKey);\n const comparisons: CohortMetricComparison[] = [];\n\n for (const metric of options.metrics) {\n switch (metric) {\n case \"errorRate\": {\n const item = compareNumber(\n metric,\n \"Error rate\",\n baselineAgg?.errorRate,\n candidateAgg?.errorRate,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"duration\": {\n const item = compareNumber(\n metric,\n \"Average duration (ms)\",\n baselineAgg?.avgDurationMs,\n candidateAgg?.avgDurationMs,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"llmCallCount\": {\n const item = compareNumber(\n metric,\n \"Average LLM calls\",\n baselineAgg?.avgLlmCallCount,\n candidateAgg?.avgLlmCallCount,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"tokenUsage\": {\n const item = compareNumber(\n metric,\n \"Average token usage\",\n baselineAgg?.avgTokenUsage,\n candidateAgg?.avgTokenUsage,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"retryCount\": {\n const item = compareNumber(\n metric,\n \"Average retries\",\n baselineAgg?.avgRetryCount,\n candidateAgg?.avgRetryCount,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"observationFailure\": {\n const item = compareNumber(\n metric,\n \"Observation failure rate\",\n baselineAgg?.observationFailureRate,\n candidateAgg?.observationFailureRate,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"toolChoice\": {\n const baselineValue = baselineAgg?.dominantToolChoice;\n const candidateValue = candidateAgg?.dominantToolChoice;\n comparisons.push({\n metric,\n baseline: baselineValue,\n candidate: candidateValue,\n delta: baselineValue === candidateValue ? \"same\" : \"changed\",\n regression: baselineValue !== candidateValue,\n message: `Tool choice: baseline=${baselineValue ?? \"n/a\"} candidate=${candidateValue ?? \"n/a\"}`,\n });\n break;\n }\n case \"toolOrdering\": {\n const baselineValue = baselineAgg?.toolOrderingSignature;\n const candidateValue = candidateAgg?.toolOrderingSignature;\n comparisons.push({\n metric,\n baseline: baselineValue,\n candidate: candidateValue,\n delta: baselineValue === candidateValue ? \"same\" : \"changed\",\n regression: baselineValue !== candidateValue,\n message: `Tool ordering: baseline=${baselineValue ?? \"n/a\"} candidate=${candidateValue ?? \"n/a\"}`,\n });\n break;\n }\n case \"guardrailFailure\": {\n const item = compareNumber(\n metric,\n \"Guardrail failures\",\n baselineAgg?.avgGuardrailFailures,\n candidateAgg?.avgGuardrailFailures,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"circuitViolation\": {\n const item = compareNumber(\n metric,\n \"Circuit violations\",\n baselineAgg?.avgCircuitViolations,\n candidateAgg?.avgCircuitViolations,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"redactionWarning\": {\n const item = compareNumber(\n metric,\n \"Redaction warnings\",\n baselineAgg?.avgRedactionWarnings,\n candidateAgg?.avgRedactionWarnings,\n );\n if (item) comparisons.push(item);\n break;\n }\n default:\n break;\n }\n }\n\n return comparisons;\n}\n","import { extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { buildRunSummary } from \"../trace-metadata.js\";\nimport { readTraceEventsFromFile } from \"../storage.js\";\nimport type { StepStartedEvent, TraceEvent } from \"../types.js\";\nimport type { CohortRunMetrics } from \"./types.js\";\n\nfunction asNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction toolSteps(events: readonly TraceEvent[]): { choices: string[]; ordering: string[] } {\n const ordering: string[] = [];\n const choices = new Set<string>();\n const sorted = [...events]\n .filter((event) => event.event === \"step_started\")\n .sort((a, b) => a.timestamp - b.timestamp);\n for (const event of sorted) {\n const step = event as StepStartedEvent;\n if (step.type !== \"tool\") continue;\n const name =\n typeof step.metadata?.toolName === \"string\"\n ? step.metadata.toolName\n : step.name;\n ordering.push(name);\n choices.add(name);\n }\n return { choices: [...choices].sort(), ordering };\n}\n\nexport async function computeCohortRunMetrics(input: {\n runId: string;\n filePath: string;\n metadata?: Record<string, unknown>;\n status?: CohortRunMetrics[\"status\"];\n durationMs?: number;\n groupKey: string;\n cohortLabel?: string;\n}): Promise<CohortRunMetrics> {\n const events = await readTraceEventsFromFile(input.filePath);\n const summary = buildRunSummary(events);\n const tools = toolSteps(events);\n const outcomes = extractOutcomesFromTraceEvents(events);\n const observationFailures = outcomes.filter((item) => item.status === \"failed\").length;\n\n const metadata = input.metadata ?? {};\n const retryCount =\n asNumber(metadata.attempt) !== undefined && asNumber(metadata.attempt)! > 1\n ? asNumber(metadata.attempt)! - 1\n : typeof metadata.retryOf === \"string\"\n ? 1\n : 0;\n\n return {\n runId: input.runId,\n ...(input.cohortLabel !== undefined ? { cohortLabel: input.cohortLabel } : {}),\n groupKey: input.groupKey,\n status: summary.status,\n error: summary.status === \"error\",\n durationMs: summary.durationMs ?? input.durationMs,\n llmCallCount: summary.llmSteps,\n tokenUsageTotal: summary.totalTokens?.total,\n retryCount,\n observationFailures,\n guardrailFailures: asNumber(metadata.guardrailFailures) ?? 0,\n circuitViolations: asNumber(metadata.circuitViolations) ?? 0,\n redactionWarnings: asNumber(metadata.redactionWarnings) ?? 0,\n toolChoices: tools.choices,\n toolOrdering: tools.ordering,\n };\n}\n\nfunction percentile(values: number[], p: number): number | undefined {\n if (values.length === 0) return undefined;\n const sorted = [...values].sort((a, b) => a - b);\n const idx = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n );\n return sorted[idx];\n}\n\nfunction dominantToolChoice(runs: readonly CohortRunMetrics[]): string | undefined {\n const counts = new Map<string, number>();\n for (const run of runs) {\n const signature = run.toolChoices.join(\",\");\n if (signature === \"\") continue;\n counts.set(signature, (counts.get(signature) ?? 0) + 1);\n }\n let best: string | undefined;\n let bestCount = 0;\n for (const [key, count] of counts) {\n if (count > bestCount) {\n best = key;\n bestCount = count;\n }\n }\n return best;\n}\n\nfunction orderingSignature(runs: readonly CohortRunMetrics[]): string | undefined {\n const counts = new Map<string, number>();\n for (const run of runs) {\n const signature = run.toolOrdering.join(\">\");\n if (signature === \"\") continue;\n counts.set(signature, (counts.get(signature) ?? 0) + 1);\n }\n let best: string | undefined;\n let bestCount = 0;\n for (const [key, count] of counts) {\n if (count > bestCount) {\n best = key;\n bestCount = count;\n }\n }\n return best;\n}\n\nexport function aggregateCohortMetrics(\n runs: readonly CohortRunMetrics[],\n groupKey: string,\n cohortLabel?: string,\n) {\n const durations = runs\n .map((run) => run.durationMs)\n .filter((value): value is number => typeof value === \"number\");\n const tokenValues = runs\n .map((run) => run.tokenUsageTotal)\n .filter((value): value is number => typeof value === \"number\");\n const errors = runs.filter((run) => run.error).length;\n const observationFailures = runs.reduce((sum, run) => sum + run.observationFailures, 0);\n\n return {\n groupKey,\n ...(cohortLabel !== undefined ? { cohortLabel } : {}),\n runCount: runs.length,\n errorRate: runs.length > 0 ? errors / runs.length : 0,\n avgDurationMs:\n durations.length > 0\n ? durations.reduce((sum, value) => sum + value, 0) / durations.length\n : undefined,\n p95DurationMs: percentile(durations, 95),\n avgLlmCallCount:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.llmCallCount, 0) / runs.length\n : 0,\n avgTokenUsage:\n tokenValues.length > 0\n ? tokenValues.reduce((sum, value) => sum + value, 0) / tokenValues.length\n : undefined,\n avgRetryCount:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.retryCount, 0) / runs.length\n : 0,\n observationFailureRate:\n runs.length > 0 ? observationFailures / runs.length : 0,\n avgGuardrailFailures:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.guardrailFailures, 0) / runs.length\n : 0,\n avgCircuitViolations:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.circuitViolations, 0) / runs.length\n : 0,\n avgRedactionWarnings:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.redactionWarnings, 0) / runs.length\n : 0,\n dominantToolChoice: dominantToolChoice(runs),\n toolOrderingSignature: orderingSignature(runs),\n };\n}\n","import type { SessionRunRecord } from \"../sessions/types.js\";\nimport { compareCohortAggregates } from \"./compare.js\";\nimport {\n filterRunsForCohort,\n parseGroupBySpec,\n resolveCohortLabel,\n resolveRunGroupKey,\n} from \"./grouping.js\";\nimport { aggregateCohortMetrics, computeCohortRunMetrics } from \"./metrics.js\";\nimport {\n COHORT_METRIC_IDS,\n type AnalyzeCohortOptions,\n type CohortAnalysisResult,\n type CohortMetricComparison,\n type CohortMetricId,\n} from \"./types.js\";\n\nconst DEFAULT_METRICS: CohortMetricId[] = [\n \"errorRate\",\n \"duration\",\n \"toolChoice\",\n \"observationFailure\",\n];\n\nfunction normalizeMetrics(metrics: CohortMetricId[] | undefined): CohortMetricId[] {\n if (metrics === undefined || metrics.length === 0) return [...DEFAULT_METRICS];\n const allowed = new Set(COHORT_METRIC_IDS);\n return metrics.filter((metric) => allowed.has(metric));\n}\n\nexport async function analyzeCohort(\n runsInput: readonly SessionRunRecord[],\n options: AnalyzeCohortOptions,\n): Promise<CohortAnalysisResult> {\n const cohortKey = options.cohortKey ?? \"cohort\";\n const groupBySpec = parseGroupBySpec(options.groupBy);\n const metrics = normalizeMetrics(options.metrics);\n const { runs: filteredRuns, warnings } = filterRunsForCohort(runsInput, {\n cohortKey,\n baseline: options.baseline,\n candidate: options.candidate,\n });\n\n const runMetrics = [];\n for (const run of filteredRuns) {\n if (run.filePath === undefined) continue;\n const cohortLabel = resolveCohortLabel(\n run,\n cohortKey,\n options.baseline,\n options.candidate,\n );\n runMetrics.push(\n await computeCohortRunMetrics({\n runId: run.runId,\n filePath: run.filePath,\n metadata: run.metadata,\n status: run.status,\n durationMs: run.durationMs,\n groupKey: resolveRunGroupKey(run, groupBySpec),\n cohortLabel,\n }),\n );\n }\n\n const groupMap = new Map<string, typeof runMetrics>();\n for (const run of runMetrics) {\n const key = `${run.cohortLabel ?? \"*\"}::${run.groupKey}`;\n const bucket = groupMap.get(key) ?? [];\n bucket.push(run);\n groupMap.set(key, bucket);\n }\n\n const groups = [...groupMap.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([, bucket]) =>\n aggregateCohortMetrics(\n bucket,\n bucket[0]!.groupKey,\n bucket[0]?.cohortLabel,\n ),\n );\n\n const comparisons =\n options.baseline !== undefined && options.candidate !== undefined\n ? (() => {\n const groupKeys = [\n ...new Set(groups.map((group) => group.groupKey)),\n ].sort((a, b) => a.localeCompare(b));\n const items: CohortMetricComparison[] = [];\n for (const groupKey of groupKeys) {\n items.push(\n ...compareCohortAggregates(groups, {\n baseline: options.baseline,\n candidate: options.candidate,\n metrics,\n groupKey,\n }),\n );\n }\n return items;\n })()\n : [];\n\n const regression = comparisons.some((item) => item.regression);\n\n return {\n ok: !regression,\n traceDir: options.traceDir,\n ...(options.baseline !== undefined ? { baseline: options.baseline } : {}),\n ...(options.candidate !== undefined ? { candidate: options.candidate } : {}),\n cohortKey,\n groupBy: options.groupBy ?? \"model\",\n metrics,\n groups,\n comparisons,\n runs: runMetrics,\n warnings,\n };\n}\n","import type { InspectKind, InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\n\nconst REDACT_SUBSTRINGS = [\n \"authorization\",\n \"cookie\",\n \"token\",\n \"apikey\",\n \"password\",\n \"secret\",\n \"email\",\n] as const;\n\nfunction shouldRedactKey(key: string): boolean {\n const k = key.toLowerCase();\n for (const s of REDACT_SUBSTRINGS) {\n if (k.includes(s)) return true;\n }\n return false;\n}\n\nexport function safeString(value: unknown, maxLength?: number): string {\n if (value === null || value === undefined) return \"\";\n let s: string;\n if (typeof value === \"string\") s = value;\n else if (typeof value === \"number\" || typeof value === \"boolean\") s = String(value);\n else s = stableJson(value, false);\n if (maxLength !== undefined && maxLength >= 0 && s.length > maxLength) {\n return `${s.slice(0, maxLength)}…`;\n }\n return s;\n}\n\n/** Escape markdown table pipes and normalize line breaks for safe inline text. */\nexport function escapeMarkdown(value: string): string {\n return value\n .replace(/\\|/g, \"\\\\|\")\n .replace(/\\r\\n/g, \"\\n\")\n .replace(/\\r/g, \"\\n\")\n .replace(/\\n/g, \" \");\n}\n\nexport function escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction sortKeysDeep(input: unknown): unknown {\n if (input === null || typeof input !== \"object\") return input;\n if (Array.isArray(input)) return input.map(sortKeysDeep);\n const o = input as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const k of Object.keys(o).sort()) {\n out[k] = sortKeysDeep(o[k]);\n }\n return out;\n}\n\nexport function stableJson(value: unknown, pretty?: boolean): string {\n const sorted = sortKeysDeep(value);\n return pretty === true ? JSON.stringify(sorted, null, 2) : JSON.stringify(sorted);\n}\n\nexport function compactAttributes(\n attrs: Record<string, unknown> | undefined,\n options?: { maxLength?: number; redacted?: boolean },\n): Record<string, unknown> {\n if (attrs === undefined) return {};\n const maxLen = options?.maxLength ?? 500;\n const redacted = options?.redacted ?? true;\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(attrs).sort()) {\n if (redacted && shouldRedactKey(key)) {\n out[key] = \"[REDACTED]\";\n continue;\n }\n const v = attrs[key];\n out[key] = compactValue(v, maxLen, redacted);\n }\n return out;\n}\n\nfunction compactValue(value: unknown, maxLen: number, redacted: boolean): unknown {\n if (value === null || typeof value !== \"object\") {\n return typeof value === \"string\" ? safeString(value, maxLen) : value;\n }\n if (Array.isArray(value)) {\n const arr = value.slice(0, 20).map((x) => compactValue(x, maxLen, redacted));\n if (value.length > 20) arr.push(`…(+${value.length - 20} more)`);\n return arr;\n }\n const o = value as Record<string, unknown>;\n const inner: Record<string, unknown> = {};\n for (const k of Object.keys(o)) {\n if (redacted && shouldRedactKey(k)) inner[k] = \"[REDACTED]\";\n else inner[k] = compactValue(o[k], maxLen, redacted);\n }\n return inner;\n}\n\nexport function summarizeTree(tree: InspectRunTree): Record<string, unknown> {\n const flat = flattenTree(tree);\n const errorNodes = flat.filter((n) => n.event.status === \"error\").length;\n return {\n runId: tree.runId,\n name: tree.name,\n status: tree.status,\n startedAt: tree.startedAt,\n endedAt: tree.endedAt,\n durationMs: tree.durationMs,\n stepCount: flat.length,\n errorStepCount: errorNodes,\n totalEvents: tree.metadata.totalEvents,\n confidenceBreakdown: { ...tree.metadata.confidenceBreakdown },\n kinds: { ...tree.metadata.kinds },\n };\n}\n\n/** Depth-first pre-order flatten (matches typical tree display). */\nexport function flattenTree(tree: InspectRunTree): InspectNode[] {\n const out: InspectNode[] = [];\n function walk(nodes: InspectNode[]): void {\n for (const n of nodes) {\n out.push(n);\n if (n.children.length > 0) walk(n.children);\n }\n }\n walk(tree.children);\n return out;\n}\n\nexport function zeroKinds(): Record<InspectKind, number> {\n return {\n RUN: 0,\n AGENT: 0,\n LLM: 0,\n TOOL: 0,\n CHAIN: 0,\n RETRIEVER: 0,\n DECISION: 0,\n RESULT: 0,\n ERROR: 0,\n LOGIC: 0,\n LOG: 0,\n OUTCOME: 0,\n };\n}\n","import { escapeHtml } from \"../exporters/helpers.js\";\nimport type { CohortAnalysisResult, RenderCohortReportOptions } from \"./types.js\";\n\nfunction formatRate(value: number | undefined): string {\n if (value === undefined) return \"n/a\";\n return `${(value * 100).toFixed(1)}%`;\n}\n\nexport function renderCohortSummaryMarkdown(result: CohortAnalysisResult): string {\n const lines: string[] = [];\n lines.push(\"# Cohort analysis\");\n lines.push(\"\");\n lines.push(`Trace directory: \\`${result.traceDir}\\``);\n lines.push(`Group by: \\`${result.groupBy}\\``);\n if (result.baseline !== undefined && result.candidate !== undefined) {\n lines.push(\n `Baseline/Candidate key: \\`${result.cohortKey}\\` (${result.baseline} vs ${result.candidate})`,\n );\n }\n lines.push(`Status: **${result.ok ? \"PASS\" : \"REGRESSION\"}**`);\n lines.push(\"\");\n\n if (result.warnings.length > 0) {\n lines.push(\"## Warnings\");\n for (const warning of result.warnings) lines.push(`- ${warning}`);\n lines.push(\"\");\n }\n\n lines.push(\"## Groups\");\n for (const group of result.groups) {\n lines.push(\n `### ${group.cohortLabel ?? \"all\"} / ${group.groupKey} (${group.runCount} runs)`,\n );\n lines.push(`- Error rate: ${formatRate(group.errorRate)}`);\n if (group.avgDurationMs !== undefined) {\n lines.push(`- Avg duration: ${Math.round(group.avgDurationMs)} ms`);\n }\n if (group.dominantToolChoice !== undefined) {\n lines.push(`- Dominant tools: ${group.dominantToolChoice}`);\n }\n lines.push(\n `- Observation failure rate: ${formatRate(group.observationFailureRate)}`,\n );\n lines.push(\"\");\n }\n\n if (result.comparisons.length > 0) {\n lines.push(\"## Comparisons\");\n for (const comparison of result.comparisons) {\n const flag = comparison.regression ? \" **REGRESSION**\" : \"\";\n lines.push(`- ${comparison.message}${flag}`);\n }\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderCohortReportHtml(result: CohortAnalysisResult): string {\n const rows = result.groups\n .map(\n (group) =>\n `<tr><td>${escapeHtml(group.cohortLabel ?? \"all\")}</td><td>${escapeHtml(group.groupKey)}</td><td>${group.runCount}</td><td>${escapeHtml(formatRate(group.errorRate))}</td><td>${group.avgDurationMs !== undefined ? Math.round(group.avgDurationMs) : \"n/a\"}</td></tr>`,\n )\n .join(\"\");\n\n const comparisons = result.comparisons\n .map(\n (item) =>\n `<li>${escapeHtml(item.message)}${item.regression ? \" <strong>REGRESSION</strong>\" : \"\"}</li>`,\n )\n .join(\"\");\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\" />\n <title>Cohort report</title>\n <style>\n body { font-family: system-ui, sans-serif; margin: 2rem; }\n table { border-collapse: collapse; width: 100%; }\n th, td { border: 1px solid #ddd; padding: 0.5rem; text-align: left; }\n th { background: #f6f6f6; }\n </style>\n</head>\n<body>\n <h1>Cohort analysis</h1>\n <p>Status: <strong>${result.ok ? \"PASS\" : \"REGRESSION\"}</strong></p>\n <p>Trace directory: <code>${escapeHtml(result.traceDir)}</code></p>\n <h2>Groups</h2>\n <table>\n <thead><tr><th>Cohort</th><th>Group</th><th>Runs</th><th>Error rate</th><th>Avg duration (ms)</th></tr></thead>\n <tbody>${rows}</tbody>\n </table>\n ${result.comparisons.length > 0 ? `<h2>Comparisons</h2><ul>${comparisons}</ul>` : \"\"}\n</body>\n</html>`;\n}\n\nexport function renderCohortReport(\n result: CohortAnalysisResult,\n options: RenderCohortReportOptions = {},\n): string {\n const format = options.format ?? \"markdown\";\n if (format === \"json\") return JSON.stringify(result, null, 2);\n if (format === \"html\") return renderCohortReportHtml(result);\n return renderCohortSummaryMarkdown(result);\n}\n","export function parseGateList(value: string | undefined): string[] {\n if (value === undefined || value.trim() === \"\") return [];\n return value\n .split(\",\")\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n}\n\nexport function parseGateNumber(\n value: string | undefined,\n label: string,\n): number | undefined {\n if (value === undefined || value.trim() === \"\") return undefined;\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) {\n throw new Error(`Invalid ${label}: ${value}`);\n }\n return parsed;\n}\n","import { extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { readTraceEventsFromFile } from \"../storage.js\";\nimport { computeCohortRunMetrics } from \"../cohort/metrics.js\";\nimport type { SessionRunRecord } from \"../sessions/types.js\";\nimport type { GateCheckResult, RunGateOptions } from \"./types.js\";\n\nfunction percentile(values: number[], p: number): number | undefined {\n if (values.length === 0) return undefined;\n const sorted = [...values].sort((a, b) => a - b);\n const idx = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n );\n return sorted[idx];\n}\n\nfunction hasThresholds(options: RunGateOptions): boolean {\n return (\n options.maxErrorRate !== undefined ||\n options.maxP95DurationMs !== undefined ||\n (options.forbidTools?.length ?? 0) > 0 ||\n (options.requireObservations?.length ?? 0) > 0\n );\n}\n\nexport function gateHasThresholds(options: RunGateOptions): boolean {\n return hasThresholds(options);\n}\n\nasync function loadRunMetrics(runs: readonly SessionRunRecord[]) {\n const metrics = [];\n for (const run of runs) {\n if (run.filePath === undefined) continue;\n metrics.push(\n await computeCohortRunMetrics({\n runId: run.runId,\n filePath: run.filePath,\n metadata: run.metadata,\n status: run.status,\n durationMs: run.durationMs,\n groupKey: \"all\",\n }),\n );\n }\n return metrics;\n}\n\nasync function observationStatus(\n filePath: string,\n name: string,\n): Promise<\"passed\" | \"failed\" | \"missing\"> {\n const events = await readTraceEventsFromFile(filePath);\n const outcomes = extractOutcomesFromTraceEvents(events);\n const match = outcomes.find((item) => item.name === name);\n if (!match) return \"missing\";\n return match.status === \"passed\" ? \"passed\" : \"failed\";\n}\n\nexport async function evaluateGateThresholds(\n runs: readonly SessionRunRecord[],\n options: RunGateOptions,\n): Promise<{ checks: GateCheckResult[]; readErrors: string[] }> {\n const checks: GateCheckResult[] = [];\n const readErrors: string[] = [];\n\n if (!hasThresholds(options)) {\n return { checks, readErrors };\n }\n\n if (runs.length === 0) {\n readErrors.push(\"No trace runs found in the gate directory.\");\n return { checks, readErrors };\n }\n\n let runMetrics;\n try {\n runMetrics = await loadRunMetrics(runs);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n readErrors.push(message);\n return { checks, readErrors };\n }\n\n if (options.maxErrorRate !== undefined) {\n const errors = runMetrics.filter((run) => run.error).length;\n const actual = runMetrics.length > 0 ? (errors / runMetrics.length) * 100 : 0;\n const ok = actual <= options.maxErrorRate;\n checks.push({\n id: \"maxErrorRate\",\n name: \"Max error rate\",\n ok,\n expected: options.maxErrorRate,\n actual: Math.round(actual * 10) / 10,\n message: ok\n ? `Error rate ${actual.toFixed(1)}% within limit ${options.maxErrorRate}%`\n : `Error rate ${actual.toFixed(1)}% exceeds limit ${options.maxErrorRate}%`,\n });\n }\n\n if (options.maxP95DurationMs !== undefined) {\n const durations = runMetrics\n .map((run) => run.durationMs)\n .filter((value): value is number => typeof value === \"number\");\n const actual = percentile(durations, 95);\n const ok = actual !== undefined && actual <= options.maxP95DurationMs;\n checks.push({\n id: \"maxP95Duration\",\n name: \"Max p95 duration (ms)\",\n ok,\n expected: options.maxP95DurationMs,\n actual: actual ?? \"n/a\",\n message:\n actual === undefined\n ? \"No duration samples available for p95 check.\"\n : ok\n ? `P95 duration ${Math.round(actual)} ms within limit ${options.maxP95DurationMs} ms`\n : `P95 duration ${Math.round(actual)} ms exceeds limit ${options.maxP95DurationMs} ms`,\n });\n }\n\n for (const tool of options.forbidTools ?? []) {\n let violated = false;\n for (const run of runMetrics) {\n const used =\n run.toolChoices.includes(tool) || run.toolOrdering.includes(tool);\n if (used) {\n violated = true;\n checks.push({\n id: \"forbidTool\",\n name: `Forbid tool: ${tool}`,\n ok: false,\n expected: `not used`,\n actual: \"used\",\n runId: run.runId,\n message: `Forbidden tool \"${tool}\" used in run ${run.runId}`,\n });\n }\n }\n if (!violated) {\n checks.push({\n id: \"forbidTool\",\n name: `Forbid tool: ${tool}`,\n ok: true,\n message: `Forbidden tool \"${tool}\" not used`,\n });\n }\n }\n\n for (const observation of options.requireObservations ?? []) {\n for (const run of runs) {\n if (run.filePath === undefined) continue;\n try {\n const status = await observationStatus(run.filePath, observation);\n const ok = status === \"passed\";\n checks.push({\n id: \"requireObservation\",\n name: `Require observation: ${observation}`,\n ok,\n expected: \"passed\",\n actual: status,\n runId: run.runId,\n message: ok\n ? `Observation \"${observation}\" passed in run ${run.runId}`\n : status === \"missing\"\n ? `Observation \"${observation}\" missing in run ${run.runId}`\n : `Observation \"${observation}\" failed in run ${run.runId}`,\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n readErrors.push(`Run ${run.runId}: ${message}`);\n }\n }\n }\n\n return { checks, readErrors };\n}\n\nexport function checksFromSuiteResult(\n suiteResult: import(\"../suite/types.js\").SuiteRunResult,\n): GateCheckResult[] {\n const checks: GateCheckResult[] = [\n {\n id: \"suite\",\n name: `Suite: ${suiteResult.suiteName}`,\n ok: suiteResult.ok,\n message: suiteResult.ok\n ? `Suite passed (${suiteResult.summary.passed} cases)`\n : `Suite failed (${suiteResult.summary.failed} failed, ${suiteResult.summary.errors} errors)`,\n },\n ];\n\n for (const suiteCase of suiteResult.cases) {\n if (suiteCase.status === \"pass\") continue;\n checks.push({\n id: \"suite\",\n name: `Case: ${suiteCase.id}`,\n ok: false,\n message: suiteCase.message ?? `Case status: ${suiteCase.status}`,\n });\n }\n\n return checks;\n}\n","import path from \"node:path\";\n\nimport { runSuite } from \"../suite/run.js\";\nimport type { GateCheckResult, GateExitCode, GateResult, RunGateOptions } from \"./types.js\";\nimport { checksFromSuiteResult, evaluateGateThresholds, gateHasThresholds } from \"./evaluate.js\";\n\nfunction resolveExitCode(input: {\n ok: boolean;\n configError: boolean;\n readError: boolean;\n}): GateExitCode {\n if (input.configError) return 2;\n if (input.readError) return 3;\n if (!input.ok) return 1;\n return 0;\n}\n\nfunction validateOptions(options: RunGateOptions): string[] {\n const errors: string[] = [];\n const hasSuite = options.suitePath !== undefined && options.suitePath.trim() !== \"\";\n const hasThresholds = gateHasThresholds(options);\n\n if (!hasSuite && !hasThresholds) {\n errors.push(\n \"No gate rules specified. Pass --suite or at least one threshold flag.\",\n );\n }\n\n if (hasThresholds && (options.traceDir === undefined || options.traceDir.trim() === \"\")) {\n if (!hasSuite) {\n errors.push(\"Threshold flags require --dir <trace-directory>.\");\n }\n }\n\n if (options.maxErrorRate !== undefined && options.maxErrorRate < 0) {\n errors.push(\"--max-error-rate must be a non-negative percentage.\");\n }\n\n if (options.maxP95DurationMs !== undefined && options.maxP95DurationMs < 0) {\n errors.push(\"--max-p95-duration must be a non-negative millisecond value.\");\n }\n\n return errors;\n}\n\nfunction isConfigLoadError(error: unknown): boolean {\n if (!(error instanceof Error)) return false;\n const ext = path.extname(error.message);\n if (error.message.includes(\"Unsupported suite config extension\")) return true;\n if (error.message.includes(\"TypeScript suite configs require\")) return true;\n if (error.message.includes(\"No suite config found\")) return true;\n if (error.message.includes(\"AI_SUITE_CONFIG\")) return true;\n if (ext === \".ts\" || ext === \".mts\" || ext === \".cts\") return true;\n return \"diagnostics\" in error;\n}\n\nexport async function runGate(\n runs: readonly import(\"../sessions/types.js\").SessionRunRecord[],\n options: RunGateOptions,\n): Promise<GateResult> {\n const diagnostics: string[] = [];\n const checks: GateCheckResult[] = [];\n\n const validationErrors = validateOptions(options);\n if (validationErrors.length > 0) {\n return {\n ok: false,\n exitCode: 2,\n runCount: 0,\n checks,\n diagnostics: validationErrors,\n };\n }\n\n let traceDir = options.traceDir?.trim();\n let suiteResult: GateResult[\"suiteResult\"];\n\n if (options.suitePath !== undefined && options.suitePath.trim() !== \"\") {\n try {\n suiteResult = await runSuite({\n configPath: options.suitePath,\n cwd: options.cwd,\n });\n traceDir = traceDir ?? suiteResult.tracesDir;\n checks.push(...checksFromSuiteResult(suiteResult));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n diagnostics.push(message);\n return {\n ok: false,\n exitCode: isConfigLoadError(error) ? 2 : 3,\n traceDir,\n suitePath: options.suitePath,\n runCount: 0,\n checks,\n diagnostics,\n };\n }\n }\n\n if (gateHasThresholds(options)) {\n const thresholdDir = traceDir;\n if (thresholdDir === undefined || thresholdDir.trim() === \"\") {\n return {\n ok: false,\n exitCode: 2,\n traceDir,\n suitePath: options.suitePath,\n runCount: runs.length,\n checks,\n diagnostics: [\"Threshold evaluation requires a trace directory.\"],\n ...(suiteResult !== undefined ? { suiteResult } : {}),\n };\n }\n\n const thresholdRuns = runs.length > 0 ? runs : [];\n const { checks: thresholdChecks, readErrors } = await evaluateGateThresholds(\n thresholdRuns,\n options,\n );\n checks.push(...thresholdChecks);\n diagnostics.push(...readErrors);\n\n if (readErrors.length > 0) {\n const ok = checks.length > 0 && checks.every((item) => item.ok);\n return {\n ok,\n exitCode: resolveExitCode({\n ok,\n configError: false,\n readError: true,\n }),\n traceDir: thresholdDir,\n suitePath: options.suitePath,\n runCount: thresholdRuns.length,\n checks,\n diagnostics,\n ...(suiteResult !== undefined ? { suiteResult } : {}),\n };\n }\n }\n\n const ok = checks.length > 0 && checks.every((item) => item.ok);\n return {\n ok,\n exitCode: resolveExitCode({ ok, configError: false, readError: false }),\n traceDir,\n suitePath: options.suitePath,\n runCount: runs.length,\n checks,\n diagnostics,\n ...(suiteResult !== undefined ? { suiteResult } : {}),\n };\n}\n","import { escapeHtml } from \"../exporters/helpers.js\";\nimport type { GateResult, RenderGateReportOptions } from \"./types.js\";\n\nfunction escapeXml(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nexport function renderGateSummaryMarkdown(result: GateResult): string {\n const lines: string[] = [];\n lines.push(\"# AgentInspect gate\");\n lines.push(\"\");\n lines.push(`Status: **${result.ok ? \"PASS\" : \"FAIL\"}** (exit ${result.exitCode})`);\n if (result.traceDir !== undefined) {\n lines.push(`Trace directory: \\`${result.traceDir}\\``);\n }\n if (result.suitePath !== undefined) {\n lines.push(`Suite config: \\`${result.suitePath}\\``);\n }\n lines.push(`Runs evaluated: ${result.runCount}`);\n lines.push(\"\");\n\n if (result.diagnostics.length > 0) {\n lines.push(\"## Diagnostics\");\n for (const item of result.diagnostics) lines.push(`- ${item}`);\n lines.push(\"\");\n }\n\n lines.push(\"## Checks\");\n for (const check of result.checks) {\n const flag = check.ok ? \"PASS\" : \"FAIL\";\n lines.push(`- [${flag}] ${check.name}: ${check.message}`);\n }\n lines.push(\"\");\n\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderGateGithubStepSummary(result: GateResult): string {\n const lines: string[] = [];\n lines.push(`## AgentInspect gate: ${result.ok ? \"PASS\" : \"FAIL\"}`);\n lines.push(\"\");\n lines.push(\"| Check | Status | Details |\");\n lines.push(\"| --- | --- | --- |\");\n for (const check of result.checks) {\n lines.push(\n `| ${check.name} | ${check.ok ? \"pass\" : \"fail\"} | ${check.message.replace(/\\|/g, \"/\")} |`,\n );\n }\n if (result.diagnostics.length > 0) {\n lines.push(\"\");\n lines.push(\"**Diagnostics**\");\n for (const item of result.diagnostics) lines.push(`- ${item}`);\n }\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderGateReportHtml(result: GateResult): string {\n const rows = result.checks\n .map(\n (check) =>\n `<tr><td>${escapeHtml(check.name)}</td><td>${check.ok ? \"PASS\" : \"FAIL\"}</td><td>${escapeHtml(check.message)}</td></tr>`,\n )\n .join(\"\");\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\" />\n <title>Gate report</title>\n <style>\n body { font-family: system-ui, sans-serif; margin: 2rem; }\n table { border-collapse: collapse; width: 100%; }\n th, td { border: 1px solid #ddd; padding: 0.5rem; text-align: left; }\n th { background: #f6f6f6; }\n </style>\n</head>\n<body>\n <h1>AgentInspect gate</h1>\n <p>Status: <strong>${result.ok ? \"PASS\" : \"FAIL\"}</strong> (exit ${result.exitCode})</p>\n <h2>Checks</h2>\n <table>\n <thead><tr><th>Check</th><th>Status</th><th>Details</th></tr></thead>\n <tbody>${rows}</tbody>\n </table>\n</body>\n</html>`;\n}\n\nexport function renderGateJUnit(result: GateResult): string {\n const failures = result.checks.filter((check) => !check.ok).length;\n const tests = result.checks.length;\n const cases = result.checks\n .map((check) => {\n if (check.ok) {\n return ` <testcase name=\"${escapeXml(check.name)}\" classname=\"gate\" />`;\n }\n return ` <testcase name=\"${escapeXml(check.name)}\" classname=\"gate\">\n <failure message=\"${escapeXml(check.message)}\">${escapeXml(check.message)}</failure>\n </testcase>`;\n })\n .join(\"\\n\");\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites tests=\"${tests}\" failures=\"${failures}\" errors=\"0\" time=\"0\">\n <testsuite name=\"agent-inspect-gate\" tests=\"${tests}\" failures=\"${failures}\" errors=\"0\" time=\"0\">\n${cases}\n </testsuite>\n</testsuites>`;\n}\n\nexport function renderGateReport(\n result: GateResult,\n options: RenderGateReportOptions = {},\n): string {\n const format = options.format ?? \"markdown\";\n if (format === \"json\") return JSON.stringify(result, null, 2);\n if (format === \"html\") return renderGateReportHtml(result);\n if (format === \"junit\") return renderGateJUnit(result);\n if (format === \"github\") return renderGateGithubStepSummary(result);\n return renderGateSummaryMarkdown(result);\n}\n"]}
|