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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/trace-filter.ts","../src/explain.ts","../src/stats.ts","../src/search.ts","../src/sessions/metadata.ts","../src/sessions/status.ts","../src/sessions/activity.ts","../src/sessions/types.ts","../src/sessions/load.ts","../src/sessions/scope.ts","../src/sessions/cohort.ts","../src/sessions/checks.ts","../src/sessions/index.ts","../src/trace-verification.ts","../src/bundle/resolve.ts","../src/bundle/safety-status.ts","../src/bundle/manifest.ts","../src/bundle/summary.ts","../src/bundle/paths.ts","../src/suite/types.ts","../src/suite/validate.ts","../src/suite/load.ts","../src/suite/resolve.ts","../src/suite/run.ts","../src/suite/report.ts","../src/cohort/types.ts","../src/cohort/compare.ts","../src/cohort/grouping.ts","../src/cohort/metrics.ts","../src/cohort/analyze.ts","../src/cohort/render.ts","../src/gate/parse.ts","../src/gate/evaluate.ts","../src/gate/run.ts","../src/gate/render.ts"],"names":["observationStatus","warn","activityMs","path","diagnostic","access","percentile","hasThresholds","ok"],"mappings":"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","file":"advanced.mjs","sourcesContent":["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 { 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","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 { 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 ActivityEntry,\n ActivitySummary,\n BuildActivitySummaryOptions,\n SessionIndex,\n SessionStatus,\n SessionSummary,\n} from \"./types.js\";\n\nfunction statusLine(session: SessionSummary): string {\n const name =\n session.workflowId ??\n session.correlationId ??\n session.sessionId;\n const status = session.status;\n if (session.lastError) {\n return `${name} session ${session.sessionId} failed at ${session.lastError.message}`;\n }\n if (session.observationSummary) {\n return `${name} session ${session.sessionId} ${status} with observation warning`;\n }\n return `${name} session ${session.sessionId} ${status}`;\n}\n\nfunction parseSinceMs(since: string | undefined, nowMs: number): number {\n if (!since || since.trim() === \"\") return nowMs - 7 * 86_400_000;\n const trimmed = since.trim().toLowerCase();\n const match = /^(\\d+)([smhd])$/.exec(trimmed);\n if (!match) return nowMs - 7 * 86_400_000;\n const amount = Number.parseInt(match[1]!, 10);\n const unit = match[2];\n const mult =\n unit === \"s\" ? 1000 : unit === \"m\" ? 60_000 : unit === \"h\" ? 3_600_000 : 86_400_000;\n return nowMs - amount * mult;\n}\n\nfunction isFailed(status: SessionStatus): boolean {\n return status === \"error\";\n}\n\nfunction isStale(status: SessionStatus): boolean {\n return status === \"stale\";\n}\n\nfunction guardrailWarnings(session: SessionSummary): number {\n const summary = session.checkSummary;\n if (!summary) return 0;\n return summary.warn;\n}\n\n/**\n * Builds a deterministic activity summary from a session index (v4.2).\n * Read-only; does not mutate traces or invent relationships.\n */\nexport function buildActivitySummary(\n index: SessionIndex,\n options: BuildActivitySummaryOptions = {},\n): ActivitySummary {\n const nowMs = options.nowMs ?? Date.now();\n const sinceMs = parseSinceMs(options.since, nowMs);\n const sinceIso = new Date(sinceMs).toISOString();\n const limit =\n Number.isInteger(options.limit) && options.limit! > 0 ? options.limit! : 20;\n\n const inWindow = index.sessions.filter((session) => {\n const activityMs = Date.parse(session.lastActivity);\n return Number.isFinite(activityMs) && activityMs >= sinceMs;\n });\n\n const entries: ActivityEntry[] = [...inWindow]\n .sort((a, b) => Date.parse(b.lastActivity) - Date.parse(a.lastActivity))\n .slice(0, limit)\n .map((session) => ({\n sessionId: session.sessionId,\n status: session.status,\n summary: statusLine(session),\n lastActivity: session.lastActivity,\n runCount: session.runIds.length,\n }));\n\n let failed = 0;\n let stale = 0;\n let guardrailWarningTotal = 0;\n for (const session of inWindow) {\n if (isFailed(session.status)) failed += 1;\n if (isStale(session.status)) stale += 1;\n guardrailWarningTotal += guardrailWarnings(session);\n }\n\n return {\n since: sinceIso,\n sessions: inWindow.length,\n failed,\n stale,\n guardrailWarnings: guardrailWarningTotal,\n entries,\n };\n}\n\n/** Renders a human activity summary for terminal output. */\nexport function renderActivitySummaryHuman(\n summary: ActivitySummary,\n options?: { nowMs?: number },\n): string {\n const lines: string[] = [];\n const nowMs = options?.nowMs ?? Date.now();\n const todayStart = new Date(nowMs);\n todayStart.setHours(0, 0, 0, 0);\n const todayMs = todayStart.getTime();\n\n const today = summary.entries.filter(\n (entry) => Date.parse(entry.lastActivity) >= todayMs,\n );\n if (today.length > 0) {\n lines.push(\"Today\");\n for (const entry of today) {\n lines.push(` ${entry.summary}`);\n }\n lines.push(\"\");\n }\n\n lines.push(`Since ${summary.since}`);\n lines.push(` ${summary.sessions} sessions`);\n lines.push(` ${summary.failed} failed`);\n lines.push(` ${summary.stale} stale`);\n lines.push(` ${summary.guardrailWarnings} guardrail warnings`);\n\n return lines.join(\"\\n\");\n}\n","import type { TraceMetadataStatus } from \"../types.js\";\n\n/** Known session/workflow metadata keys (v2.4 RFC). */\nexport const SESSION_WORKFLOW_KEYS = [\n \"sessionId\",\n \"conversationId\",\n \"groupId\",\n \"parentGroupId\",\n \"attempt\",\n \"retryOf\",\n \"retryReason\",\n \"handoffFrom\",\n \"handoffTo\",\n \"subAgentId\",\n \"subAgentName\",\n \"jobId\",\n \"queueName\",\n \"workflowName\",\n \"workflowStep\",\n \"toolCallId\",\n \"mcpToolCallId\",\n \"linkedStepId\",\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n] as const;\n\nexport type SessionWorkflowKey = (typeof SESSION_WORKFLOW_KEYS)[number];\n\nexport type SessionConfidence = \"explicit\" | \"correlated\" | \"heuristic\" | \"unknown\";\n\nexport type SessionEdgeSource =\n | \"manual\"\n | \"adapter\"\n | \"json-log\"\n | \"log4js\"\n | \"mcp-client\"\n | \"inferred\";\n\nexport interface SessionWorkflowMetadata {\n sessionId?: string;\n conversationId?: string;\n groupId?: string;\n parentGroupId?: string;\n attempt?: number;\n retryOf?: string;\n retryReason?: string;\n handoffFrom?: string;\n handoffTo?: string;\n subAgentId?: string;\n subAgentName?: string;\n jobId?: string;\n queueName?: string;\n workflowName?: string;\n workflowStep?: string;\n toolCallId?: string;\n mcpToolCallId?: string;\n linkedStepId?: string;\n correlationId?: string;\n requestId?: string;\n decisionId?: string;\n}\n\nexport interface SessionRunRecord {\n runId: string;\n name?: string;\n status?: TraceMetadataStatus;\n startedAt?: number;\n endedAt?: number;\n durationMs?: number;\n filePath?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface SessionWarning {\n code: string;\n message: string;\n runId?: string;\n sessionId?: string;\n}\n\nexport interface HandoffEdge {\n from: string;\n to: string;\n source: SessionEdgeSource;\n confidence: SessionConfidence;\n}\n\nexport interface RetryLink {\n runId: string;\n retryOf?: string;\n attempt?: number;\n source: SessionEdgeSource;\n confidence: SessionConfidence;\n}\n\nexport interface SessionGroup {\n groupId: string;\n parentGroupId?: string;\n runIds: string[];\n}\n\nexport interface CriticalPathStep {\n runId: string;\n name?: string;\n startedAt?: number;\n durationMs?: number;\n source: SessionEdgeSource;\n confidence: SessionConfidence;\n}\n\n/** Session lifecycle status (v4.2 RFC). */\nexport type SessionStatus =\n | \"running\"\n | \"waiting_input\"\n | \"idle\"\n | \"completed\"\n | \"error\"\n | \"stale\"\n | \"unknown\";\n\nexport interface SessionLastError {\n runId: string;\n message: string;\n code?: string;\n}\n\nexport interface SessionCheckSummary {\n pass: number;\n fail: number;\n warn: number;\n}\n\nexport interface EnrichSessionSummaryOptions {\n /** Reference clock for staleness (default Date.now()). */\n nowMs?: number;\n /** Inactivity threshold before marking a session stale (default 24h). */\n staleThresholdMs?: number;\n}\n\nexport interface ActivityEntry {\n sessionId: string;\n status: SessionStatus;\n summary: string;\n lastActivity: string;\n runCount: number;\n}\n\nexport interface ActivitySummary {\n since: string;\n sessions: number;\n failed: number;\n stale: number;\n guardrailWarnings: number;\n entries: ActivityEntry[];\n}\n\nexport interface BuildActivitySummaryOptions {\n /** Duration window (e.g. 7d, 24h). Default 7d. */\n since?: string;\n /** Reference clock (default Date.now()). */\n nowMs?: number;\n /** Max entries returned (default 20). */\n limit?: number;\n}\n\nexport interface SessionSummary {\n sessionId: string;\n runIds: string[];\n groups: SessionGroup[];\n handoffs: HandoffEdge[];\n retries: RetryLink[];\n criticalPath: CriticalPathStep[];\n /** Derived session status (v4.2+). */\n status: SessionStatus;\n /** Earliest run start time in the session. */\n startedAt?: number;\n /** Latest run end time when all runs have ended. */\n endedAt?: number;\n /** endedAt - startedAt when both are present. */\n durationMs?: number;\n correlationId?: string;\n jobId?: string;\n workflowId?: string;\n lastError?: SessionLastError;\n /** ISO-8601 timestamp of the most recent run activity. */\n lastActivity: string;\n retryCount: number;\n observationSummary?: string;\n checkSummary?: SessionCheckSummary;\n}\n\nexport interface SessionIndex {\n runs: SessionRunRecord[];\n sessions: SessionSummary[];\n unscopedRunIds: string[];\n warnings: SessionWarning[];\n}\n\nexport interface BuildSessionIndexOptions {\n /** When true, group runs that share only `groupId` under a synthetic session key. */\n correlateByGroupId?: boolean;\n /** Reference clock for session staleness (v4.2+). */\n nowMs?: number;\n /** Inactivity threshold before marking a session stale (v4.2+, default 24h). */\n staleThresholdMs?: number;\n}\n","import { readTraceEventsFromFile } from \"../storage.js\";\nimport type { TraceMetadata } from \"../types.js\";\nimport type { SessionRunRecord } from \"./types.js\";\n\n/** Enriches trace metadata with run_started metadata for session indexing. */\nexport async function enrichSessionRunRecord(\n meta: TraceMetadata,\n): Promise<SessionRunRecord> {\n let metadata: Record<string, unknown> | undefined;\n try {\n const events = await readTraceEventsFromFile(meta.filePath);\n for (const event of events) {\n if (event.event !== \"run_started\") continue;\n if (event.metadata && typeof event.metadata === \"object\") {\n metadata = event.metadata as Record<string, unknown>;\n }\n break;\n }\n } catch {\n /* skip */\n }\n\n return {\n runId: meta.runId,\n name: meta.name,\n status: meta.status,\n startedAt: meta.startedAt,\n endedAt: meta.endedAt,\n durationMs: meta.durationMs,\n filePath: meta.filePath,\n metadata,\n };\n}\n\n/** Builds session run records from extracted trace metadata rows. */\nexport async function loadSessionRunRecords(\n metas: readonly TraceMetadata[],\n): Promise<SessionRunRecord[]> {\n const out: SessionRunRecord[] = [];\n for (const meta of metas) {\n out.push(await enrichSessionRunRecord(meta));\n }\n return out;\n}\n","import type { TraceMetadata } from \"../types.js\";\nimport { buildSessionIndex } from \"./index.js\";\nimport { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type { SessionRunRecord, SessionWarning } from \"./types.js\";\n\nexport interface SessionScopeOptions {\n sessionId?: string;\n groupId?: string;\n correlateByGroupId?: boolean;\n}\n\nexport interface SessionScopeResult {\n metas: TraceMetadata[];\n scopeLabel: string;\n scopeKind: \"session\" | \"group\";\n runIds: string[];\n warnings: SessionWarning[];\n notFound: boolean;\n}\n\nfunction metaToSessionRunRecord(meta: TraceMetadata): SessionRunRecord {\n return {\n runId: meta.runId,\n name: meta.name,\n status: meta.status,\n startedAt: meta.startedAt,\n endedAt: meta.endedAt,\n durationMs: meta.durationMs,\n filePath: meta.filePath,\n metadata: undefined,\n };\n}\n\n/** Filters trace metadata rows to runs in a session or group scope. */\nexport function filterMetasBySessionScope(\n metas: readonly TraceMetadata[],\n records: readonly SessionRunRecord[],\n options: SessionScopeOptions,\n): SessionScopeResult {\n const sessionId = options.sessionId?.trim();\n const groupId = options.groupId?.trim();\n const warnings: SessionWarning[] = [];\n\n if (sessionId) {\n const index = buildSessionIndex(records, {\n correlateByGroupId: options.correlateByGroupId === true,\n });\n warnings.push(...index.warnings);\n const session = index.sessions.find((item) => item.sessionId === sessionId);\n if (!session) {\n return {\n metas: [],\n scopeLabel: sessionId,\n scopeKind: \"session\",\n runIds: [],\n warnings,\n notFound: true,\n };\n }\n const runIdSet = new Set(session.runIds);\n const filtered = metas.filter((meta) => runIdSet.has(meta.runId));\n return {\n metas: filtered,\n scopeLabel: sessionId,\n scopeKind: \"session\",\n runIds: session.runIds,\n warnings,\n notFound: false,\n };\n }\n\n if (groupId) {\n const runIds = records\n .filter((run) => extractSessionWorkflowMetadata(run.metadata)?.groupId === groupId)\n .map((run) => run.runId)\n .sort();\n if (runIds.length === 0) {\n return {\n metas: [],\n scopeLabel: groupId,\n scopeKind: \"group\",\n runIds: [],\n warnings,\n notFound: true,\n };\n }\n const runIdSet = new Set(runIds);\n return {\n metas: metas.filter((meta) => runIdSet.has(meta.runId)),\n scopeLabel: groupId,\n scopeKind: \"group\",\n runIds,\n warnings,\n notFound: false,\n };\n }\n\n return {\n metas: [...metas],\n scopeLabel: \"\",\n scopeKind: \"session\",\n runIds: [],\n warnings,\n notFound: false,\n };\n}\n\n/** Lightweight metadata rows for scope resolution when run_started metadata is absent. */\nexport function traceMetasToSessionRunRecords(\n metas: readonly TraceMetadata[],\n): SessionRunRecord[] {\n return metas.map(metaToSessionRunRecord);\n}\n","import { buildSessionIndex } from \"./index.js\";\nimport { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type { BuildSessionIndexOptions, SessionRunRecord } from \"./types.js\";\n\nexport type SessionCohortKind = \"session\" | \"group\";\n\nexport interface SessionCohort {\n key: string;\n kind: SessionCohortKind;\n runIds: string[];\n}\n\nexport interface GroupSessionCohortsOptions extends BuildSessionIndexOptions {\n groupBy?: \"session\" | \"group\";\n}\n\n/**\n * Groups runs into session or group cohort buckets for local search/check aggregation.\n * Deterministic; does not infer causality from timestamps.\n */\nexport function groupSessionCohorts(\n runs: readonly SessionRunRecord[],\n options: GroupSessionCohortsOptions = {},\n): SessionCohort[] {\n const groupBy = options.groupBy ?? \"session\";\n const cohorts: SessionCohort[] = [];\n\n if (groupBy === \"session\") {\n const index = buildSessionIndex(runs, options);\n for (const session of index.sessions) {\n cohorts.push({\n key: session.sessionId,\n kind: \"session\",\n runIds: [...session.runIds],\n });\n }\n if (index.unscopedRunIds.length > 0) {\n cohorts.push({\n key: \"__unscoped__\",\n kind: \"session\",\n runIds: [...index.unscopedRunIds],\n });\n }\n return cohorts.sort((a, b) => a.key.localeCompare(b.key));\n }\n\n const byGroup = new Map<string, string[]>();\n const unscoped: string[] = [];\n\n for (const run of runs) {\n const groupId = extractSessionWorkflowMetadata(run.metadata)?.groupId;\n if (!groupId) {\n unscoped.push(run.runId);\n continue;\n }\n const bucket = byGroup.get(groupId) ?? [];\n bucket.push(run.runId);\n byGroup.set(groupId, bucket);\n }\n\n for (const [key, runIds] of [...byGroup.entries()].sort(([a], [b]) =>\n a.localeCompare(b),\n )) {\n cohorts.push({\n key,\n kind: \"group\",\n runIds: runIds.sort(),\n });\n }\n\n if (unscoped.length > 0) {\n cohorts.push({\n key: \"__unscoped__\",\n kind: \"group\",\n runIds: unscoped.sort(),\n });\n }\n\n return cohorts;\n}\n","import type {\n TraceCheckDiagnostic,\n TraceCheckFinding,\n TraceCheckResult,\n 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 { 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 { 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 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 { extractSessionWorkflowMetadata } from \"../sessions/metadata.js\";\nimport type { SessionRunRecord } from \"../sessions/types.js\";\n\nexport function parseCohortMetricList(value: string | undefined): string[] {\n if (value === undefined || value.trim() === \"\") return [];\n return value\n .split(\",\")\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n}\n\nexport function parseGroupBySpec(groupBy: string | undefined): {\n kind: \"model\" | \"session\" | \"group\" | \"metadata\";\n metadataKey?: string;\n} {\n const raw = (groupBy ?? \"model\").trim();\n if (raw === \"model\") return { kind: \"model\" };\n if (raw === \"session\") return { kind: \"session\" };\n if (raw === \"group\") return { kind: \"group\" };\n if (raw.startsWith(\"metadata.\")) {\n const metadataKey = raw.slice(\"metadata.\".length).trim();\n if (metadataKey === \"\") throw new Error(\"metadata group-by requires a key.\");\n return { kind: \"metadata\", metadataKey };\n }\n throw new Error(`Unsupported --group-by value: ${raw}`);\n}\n\nfunction metadataString(\n metadata: Record<string, unknown> | undefined,\n key: string,\n): string | undefined {\n const value = metadata?.[key];\n return typeof value === \"string\" && value.trim() !== \"\" ? value.trim() : undefined;\n}\n\nexport function resolveRunGroupKey(\n run: SessionRunRecord,\n groupBy: ReturnType<typeof parseGroupBySpec>,\n): string {\n const metadata = run.metadata ?? {};\n switch (groupBy.kind) {\n case \"model\":\n return metadataString(metadata, \"model\") ?? \"unknown\";\n case \"session\":\n return (\n extractSessionWorkflowMetadata(metadata)?.sessionId ??\n metadataString(metadata, \"sessionId\") ??\n \"__unscoped__\"\n );\n case \"group\":\n return (\n extractSessionWorkflowMetadata(metadata)?.groupId ??\n metadataString(metadata, \"groupId\") ??\n \"__unscoped__\"\n );\n case \"metadata\":\n return metadataString(metadata, groupBy.metadataKey!) ?? \"__missing__\";\n default:\n return \"unknown\";\n }\n}\n\nexport function resolveCohortLabel(\n run: SessionRunRecord,\n cohortKey: string,\n baseline?: string,\n candidate?: string,\n): string | undefined {\n const label = metadataString(run.metadata, cohortKey);\n if (label === undefined) return undefined;\n if (baseline !== undefined && label === baseline) return baseline;\n if (candidate !== undefined && label === candidate) return candidate;\n if (baseline === undefined && candidate === undefined) return label;\n return undefined;\n}\n\nexport function filterRunsForCohort(\n runs: readonly SessionRunRecord[],\n options: {\n cohortKey: string;\n baseline?: string;\n candidate?: string;\n },\n): { runs: SessionRunRecord[]; warnings: string[] } {\n const warnings: string[] = [];\n if (options.baseline === undefined && options.candidate === undefined) {\n return { runs: [...runs], warnings };\n }\n\n const selected: SessionRunRecord[] = [];\n for (const run of runs) {\n const label = resolveCohortLabel(\n run,\n options.cohortKey,\n options.baseline,\n options.candidate,\n );\n if (label !== undefined) selected.push(run);\n }\n\n if (selected.length === 0) {\n warnings.push(\n `No runs matched baseline/candidate labels on metadata.${options.cohortKey}.`,\n );\n }\n\n return { runs: selected, warnings };\n}\n","import { extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { buildRunSummary } from \"../trace-metadata.js\";\nimport { readTraceEventsFromFile } from \"../storage.js\";\nimport type { StepStartedEvent, TraceEvent } from \"../types.js\";\nimport type { CohortRunMetrics } from \"./types.js\";\n\nfunction asNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction toolSteps(events: readonly TraceEvent[]): { choices: string[]; ordering: string[] } {\n const ordering: string[] = [];\n const choices = new Set<string>();\n const sorted = [...events]\n .filter((event) => event.event === \"step_started\")\n .sort((a, b) => a.timestamp - b.timestamp);\n for (const event of sorted) {\n const step = event as StepStartedEvent;\n if (step.type !== \"tool\") continue;\n const name =\n typeof step.metadata?.toolName === \"string\"\n ? step.metadata.toolName\n : step.name;\n ordering.push(name);\n choices.add(name);\n }\n return { choices: [...choices].sort(), ordering };\n}\n\nexport async function computeCohortRunMetrics(input: {\n runId: string;\n filePath: string;\n metadata?: Record<string, unknown>;\n status?: CohortRunMetrics[\"status\"];\n durationMs?: number;\n groupKey: string;\n cohortLabel?: string;\n}): Promise<CohortRunMetrics> {\n const events = await readTraceEventsFromFile(input.filePath);\n const summary = buildRunSummary(events);\n const tools = toolSteps(events);\n const outcomes = extractOutcomesFromTraceEvents(events);\n const observationFailures = outcomes.filter((item) => item.status === \"failed\").length;\n\n const metadata = input.metadata ?? {};\n const retryCount =\n asNumber(metadata.attempt) !== undefined && asNumber(metadata.attempt)! > 1\n ? asNumber(metadata.attempt)! - 1\n : typeof metadata.retryOf === \"string\"\n ? 1\n : 0;\n\n return {\n runId: input.runId,\n ...(input.cohortLabel !== undefined ? { cohortLabel: input.cohortLabel } : {}),\n groupKey: input.groupKey,\n status: summary.status,\n error: summary.status === \"error\",\n durationMs: summary.durationMs ?? input.durationMs,\n llmCallCount: summary.llmSteps,\n tokenUsageTotal: summary.totalTokens?.total,\n retryCount,\n observationFailures,\n guardrailFailures: asNumber(metadata.guardrailFailures) ?? 0,\n circuitViolations: asNumber(metadata.circuitViolations) ?? 0,\n redactionWarnings: asNumber(metadata.redactionWarnings) ?? 0,\n toolChoices: tools.choices,\n toolOrdering: tools.ordering,\n };\n}\n\nfunction percentile(values: number[], p: number): number | undefined {\n if (values.length === 0) return undefined;\n const sorted = [...values].sort((a, b) => a - b);\n const idx = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n );\n return sorted[idx];\n}\n\nfunction dominantToolChoice(runs: readonly CohortRunMetrics[]): string | undefined {\n const counts = new Map<string, number>();\n for (const run of runs) {\n const signature = run.toolChoices.join(\",\");\n if (signature === \"\") continue;\n counts.set(signature, (counts.get(signature) ?? 0) + 1);\n }\n let best: string | undefined;\n let bestCount = 0;\n for (const [key, count] of counts) {\n if (count > bestCount) {\n best = key;\n bestCount = count;\n }\n }\n return best;\n}\n\nfunction orderingSignature(runs: readonly CohortRunMetrics[]): string | undefined {\n const counts = new Map<string, number>();\n for (const run of runs) {\n const signature = run.toolOrdering.join(\">\");\n if (signature === \"\") continue;\n counts.set(signature, (counts.get(signature) ?? 0) + 1);\n }\n let best: string | undefined;\n let bestCount = 0;\n for (const [key, count] of counts) {\n if (count > bestCount) {\n best = key;\n bestCount = count;\n }\n }\n return best;\n}\n\nexport function aggregateCohortMetrics(\n runs: readonly CohortRunMetrics[],\n groupKey: string,\n cohortLabel?: string,\n) {\n const durations = runs\n .map((run) => run.durationMs)\n .filter((value): value is number => typeof value === \"number\");\n const tokenValues = runs\n .map((run) => run.tokenUsageTotal)\n .filter((value): value is number => typeof value === \"number\");\n const errors = runs.filter((run) => run.error).length;\n const observationFailures = runs.reduce((sum, run) => sum + run.observationFailures, 0);\n\n return {\n groupKey,\n ...(cohortLabel !== undefined ? { cohortLabel } : {}),\n runCount: runs.length,\n errorRate: runs.length > 0 ? errors / runs.length : 0,\n avgDurationMs:\n durations.length > 0\n ? durations.reduce((sum, value) => sum + value, 0) / durations.length\n : undefined,\n p95DurationMs: percentile(durations, 95),\n avgLlmCallCount:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.llmCallCount, 0) / runs.length\n : 0,\n avgTokenUsage:\n tokenValues.length > 0\n ? tokenValues.reduce((sum, value) => sum + value, 0) / tokenValues.length\n : undefined,\n avgRetryCount:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.retryCount, 0) / runs.length\n : 0,\n observationFailureRate:\n runs.length > 0 ? observationFailures / runs.length : 0,\n avgGuardrailFailures:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.guardrailFailures, 0) / runs.length\n : 0,\n avgCircuitViolations:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.circuitViolations, 0) / runs.length\n : 0,\n avgRedactionWarnings:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.redactionWarnings, 0) / runs.length\n : 0,\n dominantToolChoice: dominantToolChoice(runs),\n toolOrderingSignature: orderingSignature(runs),\n };\n}\n","import type { SessionRunRecord } from \"../sessions/types.js\";\nimport { compareCohortAggregates } from \"./compare.js\";\nimport {\n filterRunsForCohort,\n parseGroupBySpec,\n resolveCohortLabel,\n resolveRunGroupKey,\n} from \"./grouping.js\";\nimport { aggregateCohortMetrics, computeCohortRunMetrics } from \"./metrics.js\";\nimport {\n COHORT_METRIC_IDS,\n type AnalyzeCohortOptions,\n type CohortAnalysisResult,\n type CohortMetricComparison,\n type CohortMetricId,\n} from \"./types.js\";\n\nconst DEFAULT_METRICS: CohortMetricId[] = [\n \"errorRate\",\n \"duration\",\n \"toolChoice\",\n \"observationFailure\",\n];\n\nfunction normalizeMetrics(metrics: CohortMetricId[] | undefined): CohortMetricId[] {\n if (metrics === undefined || metrics.length === 0) return [...DEFAULT_METRICS];\n const allowed = new Set(COHORT_METRIC_IDS);\n return metrics.filter((metric) => allowed.has(metric));\n}\n\nexport async function analyzeCohort(\n runsInput: readonly SessionRunRecord[],\n options: AnalyzeCohortOptions,\n): Promise<CohortAnalysisResult> {\n const cohortKey = options.cohortKey ?? \"cohort\";\n const groupBySpec = parseGroupBySpec(options.groupBy);\n const metrics = normalizeMetrics(options.metrics);\n const { runs: filteredRuns, warnings } = filterRunsForCohort(runsInput, {\n cohortKey,\n baseline: options.baseline,\n candidate: options.candidate,\n });\n\n const runMetrics = [];\n for (const run of filteredRuns) {\n if (run.filePath === undefined) continue;\n const cohortLabel = resolveCohortLabel(\n run,\n cohortKey,\n options.baseline,\n options.candidate,\n );\n runMetrics.push(\n await computeCohortRunMetrics({\n runId: run.runId,\n filePath: run.filePath,\n metadata: run.metadata,\n status: run.status,\n durationMs: run.durationMs,\n groupKey: resolveRunGroupKey(run, groupBySpec),\n cohortLabel,\n }),\n );\n }\n\n const groupMap = new Map<string, typeof runMetrics>();\n for (const run of runMetrics) {\n const key = `${run.cohortLabel ?? \"*\"}::${run.groupKey}`;\n const bucket = groupMap.get(key) ?? [];\n bucket.push(run);\n groupMap.set(key, bucket);\n }\n\n const groups = [...groupMap.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([, bucket]) =>\n aggregateCohortMetrics(\n bucket,\n bucket[0]!.groupKey,\n bucket[0]?.cohortLabel,\n ),\n );\n\n const comparisons =\n options.baseline !== undefined && options.candidate !== undefined\n ? (() => {\n const groupKeys = [\n ...new Set(groups.map((group) => group.groupKey)),\n ].sort((a, b) => a.localeCompare(b));\n const items: CohortMetricComparison[] = [];\n 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 { 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, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&apos;\");\n}\n\nexport function renderGateSummaryMarkdown(result: GateResult): string {\n const lines: string[] = [];\n lines.push(\"# AgentInspect gate\");\n lines.push(\"\");\n lines.push(`Status: **${result.ok ? \"PASS\" : \"FAIL\"}** (exit ${result.exitCode})`);\n if (result.traceDir !== undefined) {\n lines.push(`Trace directory: \\`${result.traceDir}\\``);\n }\n if (result.suitePath !== undefined) {\n lines.push(`Suite config: \\`${result.suitePath}\\``);\n }\n lines.push(`Runs evaluated: ${result.runCount}`);\n lines.push(\"\");\n\n if (result.diagnostics.length > 0) {\n lines.push(\"## Diagnostics\");\n for (const item of result.diagnostics) lines.push(`- ${item}`);\n lines.push(\"\");\n }\n\n lines.push(\"## Checks\");\n for (const check of result.checks) {\n const flag = check.ok ? \"PASS\" : \"FAIL\";\n lines.push(`- [${flag}] ${check.name}: ${check.message}`);\n }\n lines.push(\"\");\n\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderGateGithubStepSummary(result: GateResult): string {\n const lines: string[] = [];\n lines.push(`## AgentInspect gate: ${result.ok ? \"PASS\" : \"FAIL\"}`);\n lines.push(\"\");\n lines.push(\"| Check | Status | Details |\");\n lines.push(\"| --- | --- | --- |\");\n for (const check of result.checks) {\n lines.push(\n `| ${check.name} | ${check.ok ? \"pass\" : \"fail\"} | ${check.message.replace(/\\|/g, \"/\")} |`,\n );\n }\n if (result.diagnostics.length > 0) {\n lines.push(\"\");\n lines.push(\"**Diagnostics**\");\n for (const item of result.diagnostics) lines.push(`- ${item}`);\n }\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderGateReportHtml(result: GateResult): string {\n const rows = result.checks\n .map(\n (check) =>\n `<tr><td>${escapeHtml(check.name)}</td><td>${check.ok ? \"PASS\" : \"FAIL\"}</td><td>${escapeHtml(check.message)}</td></tr>`,\n )\n .join(\"\");\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\" />\n <title>Gate report</title>\n <style>\n body { font-family: system-ui, sans-serif; margin: 2rem; }\n table { border-collapse: collapse; width: 100%; }\n th, td { border: 1px solid #ddd; padding: 0.5rem; text-align: left; }\n th { background: #f6f6f6; }\n </style>\n</head>\n<body>\n <h1>AgentInspect gate</h1>\n <p>Status: <strong>${result.ok ? \"PASS\" : \"FAIL\"}</strong> (exit ${result.exitCode})</p>\n <h2>Checks</h2>\n <table>\n <thead><tr><th>Check</th><th>Status</th><th>Details</th></tr></thead>\n <tbody>${rows}</tbody>\n </table>\n</body>\n</html>`;\n}\n\nexport function renderGateJUnit(result: GateResult): string {\n const failures = result.checks.filter((check) => !check.ok).length;\n const tests = result.checks.length;\n const cases = result.checks\n .map((check) => {\n if (check.ok) {\n return ` <testcase name=\"${escapeXml(check.name)}\" classname=\"gate\" />`;\n }\n return ` <testcase name=\"${escapeXml(check.name)}\" classname=\"gate\">\n <failure message=\"${escapeXml(check.message)}\">${escapeXml(check.message)}</failure>\n </testcase>`;\n })\n .join(\"\\n\");\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites tests=\"${tests}\" failures=\"${failures}\" errors=\"0\" time=\"0\">\n <testsuite name=\"agent-inspect-gate\" tests=\"${tests}\" failures=\"${failures}\" errors=\"0\" time=\"0\">\n${cases}\n </testsuite>\n</testsuites>`;\n}\n\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":["../src/trace-filter.ts","../src/explain.ts","../src/stats.ts","../src/search.ts","../src/sessions/metadata.ts","../src/sessions/status.ts","../src/sessions/activity.ts","../src/sessions/types.ts","../src/sessions/load.ts","../src/sessions/scope.ts","../src/sessions/cohort.ts","../src/sessions/checks.ts","../src/sessions/index.ts","../src/trace-verification.ts","../src/bundle/resolve.ts","../src/bundle/safety-status.ts","../src/bundle/manifest.ts","../src/bundle/summary.ts","../src/bundle/paths.ts","../src/suite/types.ts","../src/suite/validate.ts","../src/suite/load.ts","../src/suite/resolve.ts","../src/suite/run.ts","../src/suite/report.ts","../src/cohort/types.ts","../src/cohort/compare.ts","../src/cohort/grouping.ts","../src/cohort/metrics.ts","../src/cohort/analyze.ts","../src/cohort/render.ts","../src/gate/parse.ts","../src/gate/evaluate.ts","../src/gate/run.ts","../src/gate/render.ts"],"names":["observationStatus","warn","activityMs","path","diagnostic","access","percentile","hasThresholds","ok"],"mappings":"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","file":"advanced.mjs","sourcesContent":["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 { 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","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 { 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 ActivityEntry,\n ActivitySummary,\n BuildActivitySummaryOptions,\n SessionIndex,\n SessionStatus,\n SessionSummary,\n} from \"./types.js\";\n\nfunction statusLine(session: SessionSummary): string {\n const name =\n session.workflowId ??\n session.correlationId ??\n session.sessionId;\n const status = session.status;\n if (session.lastError) {\n return `${name} session ${session.sessionId} failed at ${session.lastError.message}`;\n }\n if (session.observationSummary) {\n return `${name} session ${session.sessionId} ${status} with observation warning`;\n }\n return `${name} session ${session.sessionId} ${status}`;\n}\n\nfunction parseSinceMs(since: string | undefined, nowMs: number): number {\n if (!since || since.trim() === \"\") return nowMs - 7 * 86_400_000;\n const trimmed = since.trim().toLowerCase();\n const match = /^(\\d+)([smhd])$/.exec(trimmed);\n if (!match) return nowMs - 7 * 86_400_000;\n const amount = Number.parseInt(match[1]!, 10);\n const unit = match[2];\n const mult =\n unit === \"s\" ? 1000 : unit === \"m\" ? 60_000 : unit === \"h\" ? 3_600_000 : 86_400_000;\n return nowMs - amount * mult;\n}\n\nfunction isFailed(status: SessionStatus): boolean {\n return status === \"error\";\n}\n\nfunction isStale(status: SessionStatus): boolean {\n return status === \"stale\";\n}\n\nfunction guardrailWarnings(session: SessionSummary): number {\n const summary = session.checkSummary;\n if (!summary) return 0;\n return summary.warn;\n}\n\n/**\n * Builds a deterministic activity summary from a session index (v4.2).\n * Read-only; does not mutate traces or invent relationships.\n */\nexport function buildActivitySummary(\n index: SessionIndex,\n options: BuildActivitySummaryOptions = {},\n): ActivitySummary {\n const nowMs = options.nowMs ?? Date.now();\n const sinceMs = parseSinceMs(options.since, nowMs);\n const sinceIso = new Date(sinceMs).toISOString();\n const limit =\n Number.isInteger(options.limit) && options.limit! > 0 ? options.limit! : 20;\n\n const inWindow = index.sessions.filter((session) => {\n const activityMs = Date.parse(session.lastActivity);\n return Number.isFinite(activityMs) && activityMs >= sinceMs;\n });\n\n const entries: ActivityEntry[] = [...inWindow]\n .sort((a, b) => Date.parse(b.lastActivity) - Date.parse(a.lastActivity))\n .slice(0, limit)\n .map((session) => ({\n sessionId: session.sessionId,\n status: session.status,\n summary: statusLine(session),\n lastActivity: session.lastActivity,\n runCount: session.runIds.length,\n }));\n\n let failed = 0;\n let stale = 0;\n let guardrailWarningTotal = 0;\n for (const session of inWindow) {\n if (isFailed(session.status)) failed += 1;\n if (isStale(session.status)) stale += 1;\n guardrailWarningTotal += guardrailWarnings(session);\n }\n\n return {\n since: sinceIso,\n sessions: inWindow.length,\n failed,\n stale,\n guardrailWarnings: guardrailWarningTotal,\n entries,\n };\n}\n\n/** Renders a human activity summary for terminal output. */\nexport function renderActivitySummaryHuman(\n summary: ActivitySummary,\n options?: { nowMs?: number },\n): string {\n const lines: string[] = [];\n const nowMs = options?.nowMs ?? Date.now();\n const todayStart = new Date(nowMs);\n todayStart.setHours(0, 0, 0, 0);\n const todayMs = todayStart.getTime();\n\n const today = summary.entries.filter(\n (entry) => Date.parse(entry.lastActivity) >= todayMs,\n );\n if (today.length > 0) {\n lines.push(\"Today\");\n for (const entry of today) {\n lines.push(` ${entry.summary}`);\n }\n lines.push(\"\");\n }\n\n lines.push(`Since ${summary.since}`);\n lines.push(` ${summary.sessions} sessions`);\n lines.push(` ${summary.failed} failed`);\n lines.push(` ${summary.stale} stale`);\n lines.push(` ${summary.guardrailWarnings} guardrail warnings`);\n\n return lines.join(\"\\n\");\n}\n","import type { TraceMetadataStatus } from \"../types.js\";\n\n/** Known session/workflow metadata keys (v2.4 RFC). */\nexport const SESSION_WORKFLOW_KEYS = [\n \"sessionId\",\n \"conversationId\",\n \"groupId\",\n \"parentGroupId\",\n \"attempt\",\n \"retryOf\",\n \"retryReason\",\n \"handoffFrom\",\n \"handoffTo\",\n \"subAgentId\",\n \"subAgentName\",\n \"jobId\",\n \"queueName\",\n \"workflowName\",\n \"workflowStep\",\n \"toolCallId\",\n \"mcpToolCallId\",\n \"linkedStepId\",\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n] as const;\n\nexport type SessionWorkflowKey = (typeof SESSION_WORKFLOW_KEYS)[number];\n\nexport type SessionConfidence = \"explicit\" | \"correlated\" | \"heuristic\" | \"unknown\";\n\nexport type SessionEdgeSource =\n | \"manual\"\n | \"adapter\"\n | \"json-log\"\n | \"log4js\"\n | \"mcp-client\"\n | \"inferred\";\n\nexport interface SessionWorkflowMetadata {\n sessionId?: string;\n conversationId?: string;\n groupId?: string;\n parentGroupId?: string;\n attempt?: number;\n retryOf?: string;\n retryReason?: string;\n handoffFrom?: string;\n handoffTo?: string;\n subAgentId?: string;\n subAgentName?: string;\n jobId?: string;\n queueName?: string;\n workflowName?: string;\n workflowStep?: string;\n toolCallId?: string;\n mcpToolCallId?: string;\n linkedStepId?: string;\n correlationId?: string;\n requestId?: string;\n decisionId?: string;\n}\n\nexport interface SessionRunRecord {\n runId: string;\n name?: string;\n status?: TraceMetadataStatus;\n startedAt?: number;\n endedAt?: number;\n durationMs?: number;\n filePath?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface SessionWarning {\n code: string;\n message: string;\n runId?: string;\n sessionId?: string;\n}\n\nexport interface HandoffEdge {\n from: string;\n to: string;\n source: SessionEdgeSource;\n confidence: SessionConfidence;\n}\n\nexport interface RetryLink {\n runId: string;\n retryOf?: string;\n attempt?: number;\n source: SessionEdgeSource;\n confidence: SessionConfidence;\n}\n\nexport interface SessionGroup {\n groupId: string;\n parentGroupId?: string;\n runIds: string[];\n}\n\nexport interface CriticalPathStep {\n runId: string;\n name?: string;\n startedAt?: number;\n durationMs?: number;\n source: SessionEdgeSource;\n confidence: SessionConfidence;\n}\n\n/** Session lifecycle status (v4.2 RFC). */\nexport type SessionStatus =\n | \"running\"\n | \"waiting_input\"\n | \"idle\"\n | \"completed\"\n | \"error\"\n | \"stale\"\n | \"unknown\";\n\nexport interface SessionLastError {\n runId: string;\n message: string;\n code?: string;\n}\n\nexport interface SessionCheckSummary {\n pass: number;\n fail: number;\n warn: number;\n}\n\nexport interface EnrichSessionSummaryOptions {\n /** Reference clock for staleness (default Date.now()). */\n nowMs?: number;\n /** Inactivity threshold before marking a session stale (default 24h). */\n staleThresholdMs?: number;\n}\n\nexport interface ActivityEntry {\n sessionId: string;\n status: SessionStatus;\n summary: string;\n lastActivity: string;\n runCount: number;\n}\n\nexport interface ActivitySummary {\n since: string;\n sessions: number;\n failed: number;\n stale: number;\n guardrailWarnings: number;\n entries: ActivityEntry[];\n}\n\nexport interface BuildActivitySummaryOptions {\n /** Duration window (e.g. 7d, 24h). Default 7d. */\n since?: string;\n /** Reference clock (default Date.now()). */\n nowMs?: number;\n /** Max entries returned (default 20). */\n limit?: number;\n}\n\nexport interface SessionSummary {\n sessionId: string;\n runIds: string[];\n groups: SessionGroup[];\n handoffs: HandoffEdge[];\n retries: RetryLink[];\n criticalPath: CriticalPathStep[];\n /** Derived session status (v4.2+). */\n status: SessionStatus;\n /** Earliest run start time in the session. */\n startedAt?: number;\n /** Latest run end time when all runs have ended. */\n endedAt?: number;\n /** endedAt - startedAt when both are present. */\n durationMs?: number;\n correlationId?: string;\n jobId?: string;\n workflowId?: string;\n lastError?: SessionLastError;\n /** ISO-8601 timestamp of the most recent run activity. */\n lastActivity: string;\n retryCount: number;\n observationSummary?: string;\n checkSummary?: SessionCheckSummary;\n}\n\nexport interface SessionIndex {\n runs: SessionRunRecord[];\n sessions: SessionSummary[];\n unscopedRunIds: string[];\n warnings: SessionWarning[];\n}\n\nexport interface BuildSessionIndexOptions {\n /** When true, group runs that share only `groupId` under a synthetic session key. */\n correlateByGroupId?: boolean;\n /** Reference clock for session staleness (v4.2+). */\n nowMs?: number;\n /** Inactivity threshold before marking a session stale (v4.2+, default 24h). */\n staleThresholdMs?: number;\n}\n","import { readTraceEventsFromFile } from \"../storage.js\";\nimport type { TraceMetadata } from \"../types.js\";\nimport type { SessionRunRecord } from \"./types.js\";\n\n/** Enriches trace metadata with run_started metadata for session indexing. */\nexport async function enrichSessionRunRecord(\n meta: TraceMetadata,\n): Promise<SessionRunRecord> {\n let metadata: Record<string, unknown> | undefined;\n try {\n const events = await readTraceEventsFromFile(meta.filePath);\n for (const event of events) {\n if (event.event !== \"run_started\") continue;\n if (event.metadata && typeof event.metadata === \"object\") {\n metadata = event.metadata as Record<string, unknown>;\n }\n break;\n }\n } catch {\n /* skip */\n }\n\n return {\n runId: meta.runId,\n name: meta.name,\n status: meta.status,\n startedAt: meta.startedAt,\n endedAt: meta.endedAt,\n durationMs: meta.durationMs,\n filePath: meta.filePath,\n metadata,\n };\n}\n\n/** Builds session run records from extracted trace metadata rows. */\nexport async function loadSessionRunRecords(\n metas: readonly TraceMetadata[],\n): Promise<SessionRunRecord[]> {\n const out: SessionRunRecord[] = [];\n for (const meta of metas) {\n out.push(await enrichSessionRunRecord(meta));\n }\n return out;\n}\n","import type { TraceMetadata } from \"../types.js\";\nimport { buildSessionIndex } from \"./index.js\";\nimport { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type { SessionRunRecord, SessionWarning } from \"./types.js\";\n\nexport interface SessionScopeOptions {\n sessionId?: string;\n groupId?: string;\n correlateByGroupId?: boolean;\n}\n\nexport interface SessionScopeResult {\n metas: TraceMetadata[];\n scopeLabel: string;\n scopeKind: \"session\" | \"group\";\n runIds: string[];\n warnings: SessionWarning[];\n notFound: boolean;\n}\n\nfunction metaToSessionRunRecord(meta: TraceMetadata): SessionRunRecord {\n return {\n runId: meta.runId,\n name: meta.name,\n status: meta.status,\n startedAt: meta.startedAt,\n endedAt: meta.endedAt,\n durationMs: meta.durationMs,\n filePath: meta.filePath,\n metadata: undefined,\n };\n}\n\n/** Filters trace metadata rows to runs in a session or group scope. */\nexport function filterMetasBySessionScope(\n metas: readonly TraceMetadata[],\n records: readonly SessionRunRecord[],\n options: SessionScopeOptions,\n): SessionScopeResult {\n const sessionId = options.sessionId?.trim();\n const groupId = options.groupId?.trim();\n const warnings: SessionWarning[] = [];\n\n if (sessionId) {\n const index = buildSessionIndex(records, {\n correlateByGroupId: options.correlateByGroupId === true,\n });\n warnings.push(...index.warnings);\n const session = index.sessions.find((item) => item.sessionId === sessionId);\n if (!session) {\n return {\n metas: [],\n scopeLabel: sessionId,\n scopeKind: \"session\",\n runIds: [],\n warnings,\n notFound: true,\n };\n }\n const runIdSet = new Set(session.runIds);\n const filtered = metas.filter((meta) => runIdSet.has(meta.runId));\n return {\n metas: filtered,\n scopeLabel: sessionId,\n scopeKind: \"session\",\n runIds: session.runIds,\n warnings,\n notFound: false,\n };\n }\n\n if (groupId) {\n const runIds = records\n .filter((run) => extractSessionWorkflowMetadata(run.metadata)?.groupId === groupId)\n .map((run) => run.runId)\n .sort();\n if (runIds.length === 0) {\n return {\n metas: [],\n scopeLabel: groupId,\n scopeKind: \"group\",\n runIds: [],\n warnings,\n notFound: true,\n };\n }\n const runIdSet = new Set(runIds);\n return {\n metas: metas.filter((meta) => runIdSet.has(meta.runId)),\n scopeLabel: groupId,\n scopeKind: \"group\",\n runIds,\n warnings,\n notFound: false,\n };\n }\n\n return {\n metas: [...metas],\n scopeLabel: \"\",\n scopeKind: \"session\",\n runIds: [],\n warnings,\n notFound: false,\n };\n}\n\n/** Lightweight metadata rows for scope resolution when run_started metadata is absent. */\nexport function traceMetasToSessionRunRecords(\n metas: readonly TraceMetadata[],\n): SessionRunRecord[] {\n return metas.map(metaToSessionRunRecord);\n}\n","import { buildSessionIndex } from \"./index.js\";\nimport { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type { BuildSessionIndexOptions, SessionRunRecord } from \"./types.js\";\n\nexport type SessionCohortKind = \"session\" | \"group\";\n\nexport interface SessionCohort {\n key: string;\n kind: SessionCohortKind;\n runIds: string[];\n}\n\nexport interface GroupSessionCohortsOptions extends BuildSessionIndexOptions {\n groupBy?: \"session\" | \"group\";\n}\n\n/**\n * Groups runs into session or group cohort buckets for local search/check aggregation.\n * Deterministic; does not infer causality from timestamps.\n */\nexport function groupSessionCohorts(\n runs: readonly SessionRunRecord[],\n options: GroupSessionCohortsOptions = {},\n): SessionCohort[] {\n const groupBy = options.groupBy ?? \"session\";\n const cohorts: SessionCohort[] = [];\n\n if (groupBy === \"session\") {\n const index = buildSessionIndex(runs, options);\n for (const session of index.sessions) {\n cohorts.push({\n key: session.sessionId,\n kind: \"session\",\n runIds: [...session.runIds],\n });\n }\n if (index.unscopedRunIds.length > 0) {\n cohorts.push({\n key: \"__unscoped__\",\n kind: \"session\",\n runIds: [...index.unscopedRunIds],\n });\n }\n return cohorts.sort((a, b) => a.key.localeCompare(b.key));\n }\n\n const byGroup = new Map<string, string[]>();\n const unscoped: string[] = [];\n\n for (const run of runs) {\n const groupId = extractSessionWorkflowMetadata(run.metadata)?.groupId;\n if (!groupId) {\n unscoped.push(run.runId);\n continue;\n }\n const bucket = byGroup.get(groupId) ?? [];\n bucket.push(run.runId);\n byGroup.set(groupId, bucket);\n }\n\n for (const [key, runIds] of [...byGroup.entries()].sort(([a], [b]) =>\n a.localeCompare(b),\n )) {\n cohorts.push({\n key,\n kind: \"group\",\n runIds: runIds.sort(),\n });\n }\n\n if (unscoped.length > 0) {\n cohorts.push({\n key: \"__unscoped__\",\n kind: \"group\",\n runIds: unscoped.sort(),\n });\n }\n\n return cohorts;\n}\n","import type {\n TraceCheckDiagnostic,\n TraceCheckFinding,\n TraceCheckResult,\n 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 { 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 { 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 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 { extractSessionWorkflowMetadata } from \"../sessions/metadata.js\";\nimport type { SessionRunRecord } from \"../sessions/types.js\";\n\nexport function parseCohortMetricList(value: string | undefined): string[] {\n if (value === undefined || value.trim() === \"\") return [];\n return value\n .split(\",\")\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n}\n\nexport function parseGroupBySpec(groupBy: string | undefined): {\n kind: \"model\" | \"session\" | \"group\" | \"metadata\";\n metadataKey?: string;\n} {\n const raw = (groupBy ?? \"model\").trim();\n if (raw === \"model\") return { kind: \"model\" };\n if (raw === \"session\") return { kind: \"session\" };\n if (raw === \"group\") return { kind: \"group\" };\n if (raw.startsWith(\"metadata.\")) {\n const metadataKey = raw.slice(\"metadata.\".length).trim();\n if (metadataKey === \"\") throw new Error(\"metadata group-by requires a key.\");\n return { kind: \"metadata\", metadataKey };\n }\n throw new Error(`Unsupported --group-by value: ${raw}`);\n}\n\nfunction metadataString(\n metadata: Record<string, unknown> | undefined,\n key: string,\n): string | undefined {\n const value = metadata?.[key];\n return typeof value === \"string\" && value.trim() !== \"\" ? value.trim() : undefined;\n}\n\nexport function resolveRunGroupKey(\n run: SessionRunRecord,\n groupBy: ReturnType<typeof parseGroupBySpec>,\n): string {\n const metadata = run.metadata ?? {};\n switch (groupBy.kind) {\n case \"model\":\n return metadataString(metadata, \"model\") ?? \"unknown\";\n case \"session\":\n return (\n extractSessionWorkflowMetadata(metadata)?.sessionId ??\n metadataString(metadata, \"sessionId\") ??\n \"__unscoped__\"\n );\n case \"group\":\n return (\n extractSessionWorkflowMetadata(metadata)?.groupId ??\n metadataString(metadata, \"groupId\") ??\n \"__unscoped__\"\n );\n case \"metadata\":\n return metadataString(metadata, groupBy.metadataKey!) ?? \"__missing__\";\n default:\n return \"unknown\";\n }\n}\n\nexport function resolveCohortLabel(\n run: SessionRunRecord,\n cohortKey: string,\n baseline?: string,\n candidate?: string,\n): string | undefined {\n const label = metadataString(run.metadata, cohortKey);\n if (label === undefined) return undefined;\n if (baseline !== undefined && label === baseline) return baseline;\n if (candidate !== undefined && label === candidate) return candidate;\n if (baseline === undefined && candidate === undefined) return label;\n return undefined;\n}\n\nexport function filterRunsForCohort(\n runs: readonly SessionRunRecord[],\n options: {\n cohortKey: string;\n baseline?: string;\n candidate?: string;\n },\n): { runs: SessionRunRecord[]; warnings: string[] } {\n const warnings: string[] = [];\n if (options.baseline === undefined && options.candidate === undefined) {\n return { runs: [...runs], warnings };\n }\n\n const selected: SessionRunRecord[] = [];\n for (const run of runs) {\n const label = resolveCohortLabel(\n run,\n options.cohortKey,\n options.baseline,\n options.candidate,\n );\n if (label !== undefined) selected.push(run);\n }\n\n if (selected.length === 0) {\n warnings.push(\n `No runs matched baseline/candidate labels on metadata.${options.cohortKey}.`,\n );\n }\n\n return { runs: selected, warnings };\n}\n","import { extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { buildRunSummary } from \"../trace-metadata.js\";\nimport { readTraceEventsFromFile } from \"../storage.js\";\nimport type { StepStartedEvent, TraceEvent } from \"../types.js\";\nimport type { CohortRunMetrics } from \"./types.js\";\n\nfunction asNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction toolSteps(events: readonly TraceEvent[]): { choices: string[]; ordering: string[] } {\n const ordering: string[] = [];\n const choices = new Set<string>();\n const sorted = [...events]\n .filter((event) => event.event === \"step_started\")\n .sort((a, b) => a.timestamp - b.timestamp);\n for (const event of sorted) {\n const step = event as StepStartedEvent;\n if (step.type !== \"tool\") continue;\n const name =\n typeof step.metadata?.toolName === \"string\"\n ? step.metadata.toolName\n : step.name;\n ordering.push(name);\n choices.add(name);\n }\n return { choices: [...choices].sort(), ordering };\n}\n\nexport async function computeCohortRunMetrics(input: {\n runId: string;\n filePath: string;\n metadata?: Record<string, unknown>;\n status?: CohortRunMetrics[\"status\"];\n durationMs?: number;\n groupKey: string;\n cohortLabel?: string;\n}): Promise<CohortRunMetrics> {\n const events = await readTraceEventsFromFile(input.filePath);\n const summary = buildRunSummary(events);\n const tools = toolSteps(events);\n const outcomes = extractOutcomesFromTraceEvents(events);\n const observationFailures = outcomes.filter((item) => item.status === \"failed\").length;\n\n const metadata = input.metadata ?? {};\n const retryCount =\n asNumber(metadata.attempt) !== undefined && asNumber(metadata.attempt)! > 1\n ? asNumber(metadata.attempt)! - 1\n : typeof metadata.retryOf === \"string\"\n ? 1\n : 0;\n\n return {\n runId: input.runId,\n ...(input.cohortLabel !== undefined ? { cohortLabel: input.cohortLabel } : {}),\n groupKey: input.groupKey,\n status: summary.status,\n error: summary.status === \"error\",\n durationMs: summary.durationMs ?? input.durationMs,\n llmCallCount: summary.llmSteps,\n tokenUsageTotal: summary.totalTokens?.total,\n retryCount,\n observationFailures,\n guardrailFailures: asNumber(metadata.guardrailFailures) ?? 0,\n circuitViolations: asNumber(metadata.circuitViolations) ?? 0,\n redactionWarnings: asNumber(metadata.redactionWarnings) ?? 0,\n toolChoices: tools.choices,\n toolOrdering: tools.ordering,\n };\n}\n\nfunction percentile(values: number[], p: number): number | undefined {\n if (values.length === 0) return undefined;\n const sorted = [...values].sort((a, b) => a - b);\n const idx = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n );\n return sorted[idx];\n}\n\nfunction dominantToolChoice(runs: readonly CohortRunMetrics[]): string | undefined {\n const counts = new Map<string, number>();\n for (const run of runs) {\n const signature = run.toolChoices.join(\",\");\n if (signature === \"\") continue;\n counts.set(signature, (counts.get(signature) ?? 0) + 1);\n }\n let best: string | undefined;\n let bestCount = 0;\n for (const [key, count] of counts) {\n if (count > bestCount) {\n best = key;\n bestCount = count;\n }\n }\n return best;\n}\n\nfunction orderingSignature(runs: readonly CohortRunMetrics[]): string | undefined {\n const counts = new Map<string, number>();\n for (const run of runs) {\n const signature = run.toolOrdering.join(\">\");\n if (signature === \"\") continue;\n counts.set(signature, (counts.get(signature) ?? 0) + 1);\n }\n let best: string | undefined;\n let bestCount = 0;\n for (const [key, count] of counts) {\n if (count > bestCount) {\n best = key;\n bestCount = count;\n }\n }\n return best;\n}\n\nexport function aggregateCohortMetrics(\n runs: readonly CohortRunMetrics[],\n groupKey: string,\n cohortLabel?: string,\n) {\n const durations = runs\n .map((run) => run.durationMs)\n .filter((value): value is number => typeof value === \"number\");\n const tokenValues = runs\n .map((run) => run.tokenUsageTotal)\n .filter((value): value is number => typeof value === \"number\");\n const errors = runs.filter((run) => run.error).length;\n const observationFailures = runs.reduce((sum, run) => sum + run.observationFailures, 0);\n\n return {\n groupKey,\n ...(cohortLabel !== undefined ? { cohortLabel } : {}),\n runCount: runs.length,\n errorRate: runs.length > 0 ? errors / runs.length : 0,\n avgDurationMs:\n durations.length > 0\n ? durations.reduce((sum, value) => sum + value, 0) / durations.length\n : undefined,\n p95DurationMs: percentile(durations, 95),\n avgLlmCallCount:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.llmCallCount, 0) / runs.length\n : 0,\n avgTokenUsage:\n tokenValues.length > 0\n ? tokenValues.reduce((sum, value) => sum + value, 0) / tokenValues.length\n : undefined,\n avgRetryCount:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.retryCount, 0) / runs.length\n : 0,\n observationFailureRate:\n runs.length > 0 ? observationFailures / runs.length : 0,\n avgGuardrailFailures:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.guardrailFailures, 0) / runs.length\n : 0,\n avgCircuitViolations:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.circuitViolations, 0) / runs.length\n : 0,\n avgRedactionWarnings:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.redactionWarnings, 0) / runs.length\n : 0,\n dominantToolChoice: dominantToolChoice(runs),\n toolOrderingSignature: orderingSignature(runs),\n };\n}\n","import type { SessionRunRecord } from \"../sessions/types.js\";\nimport { compareCohortAggregates } from \"./compare.js\";\nimport {\n filterRunsForCohort,\n parseGroupBySpec,\n resolveCohortLabel,\n resolveRunGroupKey,\n} from \"./grouping.js\";\nimport { aggregateCohortMetrics, computeCohortRunMetrics } from \"./metrics.js\";\nimport {\n COHORT_METRIC_IDS,\n type AnalyzeCohortOptions,\n type CohortAnalysisResult,\n type CohortMetricComparison,\n type CohortMetricId,\n} from \"./types.js\";\n\nconst DEFAULT_METRICS: CohortMetricId[] = [\n \"errorRate\",\n \"duration\",\n \"toolChoice\",\n \"observationFailure\",\n];\n\nfunction normalizeMetrics(metrics: CohortMetricId[] | undefined): CohortMetricId[] {\n if (metrics === undefined || metrics.length === 0) return [...DEFAULT_METRICS];\n const allowed = new Set(COHORT_METRIC_IDS);\n return metrics.filter((metric) => allowed.has(metric));\n}\n\nexport async function analyzeCohort(\n runsInput: readonly SessionRunRecord[],\n options: AnalyzeCohortOptions,\n): Promise<CohortAnalysisResult> {\n const cohortKey = options.cohortKey ?? \"cohort\";\n const groupBySpec = parseGroupBySpec(options.groupBy);\n const metrics = normalizeMetrics(options.metrics);\n const { runs: filteredRuns, warnings } = filterRunsForCohort(runsInput, {\n cohortKey,\n baseline: options.baseline,\n candidate: options.candidate,\n });\n\n const runMetrics = [];\n for (const run of filteredRuns) {\n if (run.filePath === undefined) continue;\n const cohortLabel = resolveCohortLabel(\n run,\n cohortKey,\n options.baseline,\n options.candidate,\n );\n runMetrics.push(\n await computeCohortRunMetrics({\n runId: run.runId,\n filePath: run.filePath,\n metadata: run.metadata,\n status: run.status,\n durationMs: run.durationMs,\n groupKey: resolveRunGroupKey(run, groupBySpec),\n cohortLabel,\n }),\n );\n }\n\n const groupMap = new Map<string, typeof runMetrics>();\n for (const run of runMetrics) {\n const key = `${run.cohortLabel ?? \"*\"}::${run.groupKey}`;\n const bucket = groupMap.get(key) ?? [];\n bucket.push(run);\n groupMap.set(key, bucket);\n }\n\n const groups = [...groupMap.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([, bucket]) =>\n aggregateCohortMetrics(\n bucket,\n bucket[0]!.groupKey,\n bucket[0]?.cohortLabel,\n ),\n );\n\n const comparisons =\n options.baseline !== undefined && options.candidate !== undefined\n ? (() => {\n const groupKeys = [\n ...new Set(groups.map((group) => group.groupKey)),\n ].sort((a, b) => a.localeCompare(b));\n const items: CohortMetricComparison[] = [];\n 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 { 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, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&apos;\");\n}\n\nexport function renderGateSummaryMarkdown(result: GateResult): string {\n const lines: string[] = [];\n lines.push(\"# AgentInspect gate\");\n lines.push(\"\");\n lines.push(`Status: **${result.ok ? \"PASS\" : \"FAIL\"}** (exit ${result.exitCode})`);\n if (result.traceDir !== undefined) {\n lines.push(`Trace directory: \\`${result.traceDir}\\``);\n }\n if (result.suitePath !== undefined) {\n lines.push(`Suite config: \\`${result.suitePath}\\``);\n }\n lines.push(`Runs evaluated: ${result.runCount}`);\n lines.push(\"\");\n\n if (result.diagnostics.length > 0) {\n lines.push(\"## Diagnostics\");\n for (const item of result.diagnostics) lines.push(`- ${item}`);\n lines.push(\"\");\n }\n\n lines.push(\"## Checks\");\n for (const check of result.checks) {\n const flag = check.ok ? \"PASS\" : \"FAIL\";\n lines.push(`- [${flag}] ${check.name}: ${check.message}`);\n }\n lines.push(\"\");\n\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderGateGithubStepSummary(result: GateResult): string {\n const lines: string[] = [];\n lines.push(`## AgentInspect gate: ${result.ok ? \"PASS\" : \"FAIL\"}`);\n lines.push(\"\");\n lines.push(\"| Check | Status | Details |\");\n lines.push(\"| --- | --- | --- |\");\n for (const check of result.checks) {\n lines.push(\n `| ${check.name} | ${check.ok ? \"pass\" : \"fail\"} | ${check.message.replace(/\\|/g, \"/\")} |`,\n );\n }\n if (result.diagnostics.length > 0) {\n lines.push(\"\");\n lines.push(\"**Diagnostics**\");\n for (const item of result.diagnostics) lines.push(`- ${item}`);\n }\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderGateReportHtml(result: GateResult): string {\n const rows = result.checks\n .map(\n (check) =>\n `<tr><td>${escapeHtml(check.name)}</td><td>${check.ok ? \"PASS\" : \"FAIL\"}</td><td>${escapeHtml(check.message)}</td></tr>`,\n )\n .join(\"\");\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\" />\n <title>Gate report</title>\n <style>\n body { font-family: system-ui, sans-serif; margin: 2rem; }\n table { border-collapse: collapse; width: 100%; }\n th, td { border: 1px solid #ddd; padding: 0.5rem; text-align: left; }\n th { background: #f6f6f6; }\n </style>\n</head>\n<body>\n <h1>AgentInspect gate</h1>\n <p>Status: <strong>${result.ok ? \"PASS\" : \"FAIL\"}</strong> (exit ${result.exitCode})</p>\n <h2>Checks</h2>\n <table>\n <thead><tr><th>Check</th><th>Status</th><th>Details</th></tr></thead>\n <tbody>${rows}</tbody>\n </table>\n</body>\n</html>`;\n}\n\nexport function renderGateJUnit(result: GateResult): string {\n const failures = result.checks.filter((check) => !check.ok).length;\n const tests = result.checks.length;\n const cases = result.checks\n .map((check) => {\n if (check.ok) {\n return ` <testcase name=\"${escapeXml(check.name)}\" classname=\"gate\" />`;\n }\n return ` <testcase name=\"${escapeXml(check.name)}\" classname=\"gate\">\n <failure message=\"${escapeXml(check.message)}\">${escapeXml(check.message)}</failure>\n </testcase>`;\n })\n .join(\"\\n\");\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites tests=\"${tests}\" failures=\"${failures}\" errors=\"0\" time=\"0\">\n <testsuite name=\"agent-inspect-gate\" tests=\"${tests}\" failures=\"${failures}\" errors=\"0\" time=\"0\">\n${cases}\n </testsuite>\n</testsuites>`;\n}\n\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"]}