agent-inspect 6.26.0 → 6.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +1 -1
- package/docs/BUNDLES.md +4 -1
- package/docs/LIMITATIONS.md +1 -1
- package/docs/SAFE-TRACE-SHARING.md +2 -0
- package/docs/TRACE-CONTRACTS.md +21 -3
- package/package.json +1 -1
- package/packages/cli/dist/{chunk-HPR2OJPU.mjs → chunk-JVQ4LTHR.mjs} +4317 -3803
- package/packages/cli/dist/chunk-JVQ4LTHR.mjs.map +1 -0
- package/packages/cli/dist/index.cjs +4541 -4005
- package/packages/cli/dist/index.cjs.map +1 -1
- package/packages/cli/dist/index.mjs +4 -4
- package/packages/cli/dist/index.mjs.map +1 -1
- package/packages/cli/dist/{src-J43ECFHC.mjs → src-M5J5YC5E.mjs} +3 -3
- package/packages/cli/dist/{src-J43ECFHC.mjs.map → src-M5J5YC5E.mjs.map} +1 -1
- package/packages/core/dist/advanced.cjs +3026 -2501
- package/packages/core/dist/advanced.cjs.map +1 -1
- package/packages/core/dist/advanced.d.cts +172 -16
- package/packages/core/dist/advanced.d.ts +172 -16
- package/packages/core/dist/advanced.mjs +362 -32
- package/packages/core/dist/advanced.mjs.map +1 -1
- package/packages/core/dist/checks.cjs +537 -152
- package/packages/core/dist/checks.cjs.map +1 -1
- package/packages/core/dist/checks.d.cts +9 -414
- package/packages/core/dist/checks.d.ts +9 -414
- package/packages/core/dist/checks.mjs +1 -1
- package/packages/core/dist/{chunk-LHSXRIYU.mjs → chunk-ME4WXYY3.mjs} +3609 -3224
- package/packages/core/dist/chunk-ME4WXYY3.mjs.map +1 -0
- package/packages/core/dist/{context-DOOT9GZ-.d.cts → context-DGMqxFpz.d.cts} +4 -4
- package/packages/core/dist/{context-DOX2-RjH.d.ts → context-DgcvkJ9t.d.ts} +4 -4
- package/packages/core/dist/diff.d.cts +3 -3
- package/packages/core/dist/diff.d.ts +3 -3
- package/packages/core/dist/exporters.d.cts +3 -3
- package/packages/core/dist/exporters.d.ts +3 -3
- package/packages/core/dist/{index-CtK_p-ps.d.ts → index-BOA1AeEU.d.ts} +473 -6
- package/packages/core/dist/{index-D72DPqAF.d.ts → index-BzyNPfLm.d.ts} +2 -2
- package/packages/core/dist/{index-DLLz9sce.d.cts → index-C6bCIbFO.d.cts} +2 -2
- package/packages/core/dist/{index-CR4CCRqP.d.cts → index-DVetZwGG.d.cts} +473 -6
- package/packages/core/dist/index.d.cts +7 -7
- package/packages/core/dist/index.d.ts +7 -7
- package/packages/core/dist/{inspect-event-DRthdZlf.d.cts → inspect-event-CDqjcrG_.d.cts} +1 -1
- package/packages/core/dist/{inspect-event-DRthdZlf.d.ts → inspect-event-CDqjcrG_.d.ts} +1 -1
- package/packages/core/dist/{log-config-CFlIJHTf.d.cts → log-config-DcjV8ZjF.d.cts} +1 -1
- package/packages/core/dist/{log-config-OZRfpHED.d.ts → log-config-N_c5AE09.d.ts} +1 -1
- package/packages/core/dist/logs.d.cts +3 -3
- package/packages/core/dist/logs.d.ts +3 -3
- package/packages/core/dist/{persisted-inspect-event-BVucFVrP.d.ts → persisted-inspect-event-CbaRYpbw.d.ts} +1 -1
- package/packages/core/dist/{persisted-inspect-event-CVZWZldL.d.cts → persisted-inspect-event-DiJ0I_vi.d.cts} +1 -1
- package/packages/core/dist/persisted.d.cts +5 -5
- package/packages/core/dist/persisted.d.ts +5 -5
- package/packages/core/dist/readers.d.cts +3 -3
- package/packages/core/dist/readers.d.ts +3 -3
- package/packages/core/dist/{types-B562HgN_.d.cts → types-BA_IOdg4.d.cts} +1 -1
- package/packages/core/dist/{types-B562HgN_.d.ts → types-BA_IOdg4.d.ts} +1 -1
- package/packages/core/dist/{types-VzKihKQo.d.cts → types-wXuxMUop.d.cts} +2 -2
- package/packages/core/dist/{types-Bx3mEZ04.d.ts → types-xv9bSgOK.d.ts} +2 -2
- package/packages/core/dist/writers.d.cts +2 -2
- package/packages/core/dist/writers.d.ts +2 -2
- package/packages/cli/dist/chunk-HPR2OJPU.mjs.map +0 -1
- package/packages/core/dist/chunk-LHSXRIYU.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapters/preview-capture.ts","../src/causal-failure.ts","../src/explain.ts","../src/search.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/evidence/types.ts","../src/evidence/hash.ts","../src/evidence/paths.ts","../src/evidence/manifest.ts","../src/evidence/views.ts","../src/evidence/html-shell.ts","../src/evidence/views-contract.ts","../src/evidence/views-safety.ts","../src/evidence/zip.ts","../src/evidence/verify.ts","../src/evidence/ci.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/suite/templates.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","../src/safety/omitted-payload.ts"],"names":["observationStatus","warn","activityMs","path","diagnostic","access","readFile","percentile","hasThresholds","ok","createHash"],"mappings":"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","file":"advanced.mjs","sourcesContent":["/**\n * Shared bounded-preview capture used by the official framework adapters.\n *\n * Adapters own framework field selection; this module owns the parts that must\n * behave identically everywhere: safe serialization, `maxPreviewChars` bounds,\n * key/profile redaction before the value reaches an event, and stable\n * diagnostics when a requested field cannot be sourced.\n *\n * Previews are bounded and key-redacted, not sanitized. Review exports before\n * sharing.\n *\n * @experimental Adapter-facing helper; shape may change while the official\n * adapters remain experimental.\n */\nimport { Redactor } from \"../logs/redactor.js\";\nimport { resolveRedactionProfile } from \"../redaction-profiles.js\";\nimport type { RedactionRule } from \"../types/log-config.js\";\nimport type { RedactionProfile } from \"../types.js\";\n\n/** Default bound for adapter preview fields (characters). */\nexport const DEFAULT_ADAPTER_MAX_PREVIEW_CHARS = 200;\n\n/**\n * Capture policy shared by the official adapters.\n *\n * `metadata-only` is the default everywhere and never persists framework\n * payload content. `preview` opts into bounded, redacted previews.\n */\nexport type AdapterCaptureMode = \"metadata-only\" | \"preview\";\n\n/** Stable diagnostic codes emitted by shared preview capture. */\nexport const ADAPTER_CAPTURE_DIAGNOSTIC_CODES = [\n \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n \"AI_CAPTURE_PREVIEW_TRUNCATED\",\n \"AI_CAPTURE_PREVIEW_REDACTED\",\n] as const;\n\nexport type AdapterCaptureDiagnosticCode =\n (typeof ADAPTER_CAPTURE_DIAGNOSTIC_CODES)[number];\n\n/** One bounded diagnostic. Never contains preview content or filesystem paths. */\nexport interface AdapterCaptureDiagnostic {\n readonly code: AdapterCaptureDiagnosticCode;\n readonly message: string;\n /** Persisted attribute name the diagnostic refers to (e.g. `inputPreview`). */\n readonly field: string;\n readonly capture: AdapterCaptureMode;\n}\n\n/** Optional consumer hook for adapter capture diagnostics. */\nexport type AdapterDiagnosticListener = (\n diagnostic: AdapterCaptureDiagnostic,\n) => void;\n\n/** Preview capture options accepted by every official adapter. */\nexport interface AdapterPreviewCaptureOptions {\n /** Defaults to `metadata-only`. */\n capture?: AdapterCaptureMode;\n /** Redaction profile applied to preview values before they reach an event. */\n redactionProfile?: RedactionProfile;\n /** Upper bound for each serialized preview field. */\n maxPreviewChars?: number;\n /** Extra adapter-supplied redaction rules. */\n redact?: RedactionRule[];\n /** Receives bounded capture diagnostics. Listener failures are swallowed. */\n onDiagnostic?: AdapterDiagnosticListener;\n}\n\n/** Bounded capture counters for adapter `getDiagnostics()` surfaces. */\nexport interface AdapterCaptureDiagnostics {\n readonly capture: AdapterCaptureMode;\n readonly redactionProfile: RedactionProfile;\n readonly maxPreviewChars: number;\n readonly previewFieldsCaptured: number;\n readonly previewFieldsUnavailable: number;\n readonly previewFieldsTruncated: number;\n readonly previewFieldsRedacted: number;\n readonly lastDiagnosticCode?: AdapterCaptureDiagnosticCode;\n readonly lastDiagnosticMessage?: string;\n}\n\n/** Shared preview capture handle owned by one adapter instance. */\nexport interface AdapterPreviewCapture {\n /** Effective capture mode (adapters no longer downgrade `preview`). */\n readonly capture: AdapterCaptureMode;\n readonly previewEnabled: boolean;\n readonly maxPreviewChars: number;\n readonly redactionProfile: RedactionProfile;\n /** Normalizes a logical field to a persisted `*Preview` attribute name. */\n previewFieldName(field: string): string;\n /**\n * Returns a bounded, redacted preview string, or `undefined` when capture is\n * metadata-only or the field could not be sourced.\n */\n capturePreviewField(field: string, value: unknown): string | undefined;\n /** Writes every available preview onto `target` and returns it. */\n applyPreviewFields(\n target: Record<string, unknown>,\n fields: Record<string, unknown>,\n ): Record<string, unknown>;\n getDiagnostics(): AdapterCaptureDiagnostics;\n}\n\n/**\n * JSON-ish serialization that tolerates cycles, bigints, and throwing getters,\n * bounded to `maxChars`. Returns `undefined` for a non-positive bound or a\n * value JSON cannot represent.\n */\nexport function serializeAdapterPreview(\n value: unknown,\n maxChars: number,\n): string | undefined {\n if (!Number.isFinite(maxChars) || maxChars <= 0) return undefined;\n const serialized = serializePreviewValue(value);\n if (serialized === undefined) return undefined;\n return boundPreviewString(serialized, Math.floor(maxChars)).text;\n}\n\n/**\n * Resolves the effective preview bound. Profile caps apply so a `share` or\n * `strict` profile cannot be widened by a larger adapter option.\n */\nexport function resolveAdapterMaxPreviewChars(\n value: unknown,\n profile: RedactionProfile = \"local\",\n): number {\n const requested =\n typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? Math.floor(value)\n : DEFAULT_ADAPTER_MAX_PREVIEW_CHARS;\n const cap = resolveRedactionProfile(profile).maxPreviewLengthCap;\n return cap === undefined ? requested : Math.min(requested, cap);\n}\n\n/** Creates the shared preview capture handle for one adapter instance. */\nexport function createAdapterPreviewCapture(\n options: AdapterPreviewCaptureOptions = {},\n): AdapterPreviewCapture {\n const capture: AdapterCaptureMode =\n options.capture === \"preview\" ? \"preview\" : \"metadata-only\";\n const redactionProfile: RedactionProfile = options.redactionProfile ?? \"local\";\n const maxPreviewChars = resolveAdapterMaxPreviewChars(\n options.maxPreviewChars,\n redactionProfile,\n );\n const redactor = new Redactor({\n rules: options.redact,\n extraKeys: resolveRedactionProfile(redactionProfile).extraKeys,\n });\n\n const counters = {\n previewFieldsCaptured: 0,\n previewFieldsUnavailable: 0,\n previewFieldsTruncated: 0,\n previewFieldsRedacted: 0,\n };\n let lastDiagnosticCode: AdapterCaptureDiagnosticCode | undefined;\n let lastDiagnosticMessage: string | undefined;\n\n const emit = (\n code: AdapterCaptureDiagnosticCode,\n field: string,\n message: string,\n ): void => {\n lastDiagnosticCode = code;\n lastDiagnosticMessage = `${code}: ${message}`;\n try {\n options.onDiagnostic?.({ code, message, field, capture });\n } catch {\n // Consumer diagnostics must never throw into instrumented code.\n }\n };\n\n const previewFieldName = (field: string): string =>\n /preview$/i.test(field) ? field : `${field}Preview`;\n\n const capturePreviewField = (\n field: string,\n value: unknown,\n ): string | undefined => {\n if (capture !== \"preview\" || maxPreviewChars <= 0) return undefined;\n const name = previewFieldName(field);\n\n try {\n if (value === undefined) {\n counters.previewFieldsUnavailable += 1;\n emit(\n \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n name,\n `${name} was requested but this framework callback did not expose the field`,\n );\n return undefined;\n }\n\n // Normalize before redaction so cycles and hostile getters cannot reach\n // the key-based redactor, which walks plain structures only.\n const plain = toPlainPreviewValue(value);\n if (plain === UNSERIALIZABLE) {\n counters.previewFieldsUnavailable += 1;\n emit(\n \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n name,\n `${name} could not be serialized into a bounded preview`,\n );\n return undefined;\n }\n\n const serialized = serializePreviewValue(redactor.redactValue(name, plain));\n if (serialized === undefined) {\n counters.previewFieldsUnavailable += 1;\n emit(\n \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n name,\n `${name} could not be serialized into a bounded preview`,\n );\n return undefined;\n }\n\n if (containsRedactionMarker(serialized)) {\n counters.previewFieldsRedacted += 1;\n emit(\n \"AI_CAPTURE_PREVIEW_REDACTED\",\n name,\n `${name} matched the ${redactionProfile} redaction profile before persistence`,\n );\n }\n\n const bounded = boundPreviewString(serialized, maxPreviewChars);\n if (bounded.truncated) {\n counters.previewFieldsTruncated += 1;\n emit(\n \"AI_CAPTURE_PREVIEW_TRUNCATED\",\n name,\n `${name} was truncated to maxPreviewChars=${maxPreviewChars}`,\n );\n }\n\n counters.previewFieldsCaptured += 1;\n return bounded.text;\n } catch {\n counters.previewFieldsUnavailable += 1;\n emit(\n \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n name,\n `${name} could not be read from this framework callback`,\n );\n return undefined;\n }\n };\n\n return {\n capture,\n previewEnabled: capture === \"preview\",\n maxPreviewChars,\n redactionProfile,\n previewFieldName,\n capturePreviewField,\n applyPreviewFields(target, fields) {\n if (capture !== \"preview\") return target;\n for (const [field, value] of Object.entries(fields)) {\n const preview = capturePreviewField(field, value);\n if (preview !== undefined) target[previewFieldName(field)] = preview;\n }\n return target;\n },\n getDiagnostics() {\n return {\n capture,\n redactionProfile,\n maxPreviewChars,\n ...counters,\n ...(lastDiagnosticCode === undefined ? {} : { lastDiagnosticCode }),\n ...(lastDiagnosticMessage === undefined\n ? {}\n : { lastDiagnosticMessage }),\n };\n },\n };\n}\n\n/** Sentinel for a value JSON cannot represent at all. */\nconst UNSERIALIZABLE = Symbol(\"agent-inspect.preview.unserializable\");\n\nfunction toPlainPreviewValue(value: unknown): unknown {\n const json = serializePreviewValue(value);\n if (json === undefined) return UNSERIALIZABLE;\n try {\n return JSON.parse(json) as unknown;\n } catch {\n // `serializePreviewValue` fell back to `String(value)`.\n return json;\n }\n}\n\nfunction containsRedactionMarker(serialized: string): boolean {\n return serialized.includes(\"[REDACTED]\") || serialized.includes(\"[HASH:\");\n}\n\nfunction serializePreviewValue(value: unknown): string | undefined {\n try {\n const seen = new WeakSet<object>();\n return JSON.stringify(value, (_key, entry) => {\n if (typeof entry === \"bigint\") return entry.toString();\n if (typeof entry === \"function\" || typeof entry === \"symbol\") {\n return undefined;\n }\n if (typeof entry === \"object\" && entry !== null) {\n if (seen.has(entry)) return \"[Circular]\";\n seen.add(entry);\n }\n return entry;\n });\n } catch {\n try {\n return String(value);\n } catch {\n return undefined;\n }\n }\n}\n\nfunction boundPreviewString(\n value: string,\n maxChars: number,\n): { text: string; truncated: boolean } {\n if (value.length <= maxChars) return { text: value, truncated: false };\n return { text: `${value.slice(0, maxChars)}…`, truncated: true };\n}\n","/**\n * Conservative first-causal-failure analysis (v6.11+).\n *\n * @experimental Available through `agent-inspect/advanced`.\n */\nimport { extractOutcomesFromTraceEvents } from \"./outcomes/extract.js\";\nimport { buildRunTimeline } from \"./timeline.js\";\nimport type { StepCompletedEvent, StepStartedEvent, TraceEvent } from \"./types.js\";\n\nexport type CausalFailureKind =\n | \"explicit_error_event\"\n | \"failed_observed_outcome\"\n | \"contract_failure\"\n | \"failed_ancestor_or_child\"\n | \"none\";\n\nexport interface CausalContractFindingInput {\n ruleId: string;\n status: \"fail\" | \"pass\" | \"warning\" | string;\n /** Linked event/step ids from check evidence. */\n evidenceIds?: string[];\n message?: string;\n}\n\nexport interface FirstCausalFailure {\n kind: CausalFailureKind;\n /** Stable evidence ids (stepId / outcomeId / event-linked ids). No raw paths. */\n evidenceIds: string[];\n rationale: string;\n /** 1–4 when matched; 0 when none. */\n orderIndex: 0 | 1 | 2 | 3 | 4;\n runId?: string;\n primary?: {\n stepId?: string;\n outcomeId?: string;\n ruleId?: string;\n name?: string;\n };\n relationship?: {\n role: \"self\" | \"ancestor\" | \"child\";\n relatedIds: string[];\n };\n engine: \"conservative-causal-v1\";\n}\n\nexport interface FindFirstCausalFailureOptions {\n /** Optional contract/check failures (step 3). Omitted → skip contract stage. */\n contractFindings?: readonly CausalContractFindingInput[];\n}\n\nfunction runIdFromEvents(events: readonly TraceEvent[]): string | undefined {\n for (const event of events) {\n if (\"runId\" in event && typeof event.runId === \"string\") return event.runId;\n }\n return undefined;\n}\n\nfunction noneResult(runId: string | undefined, rationale: string): FirstCausalFailure {\n return {\n kind: \"none\",\n evidenceIds: [],\n rationale,\n orderIndex: 0,\n runId,\n engine: \"conservative-causal-v1\",\n };\n}\n\n/**\n * Find the first causal failure using the locked conservative order.\n * Does not infer from timing correlation alone.\n */\nexport function findFirstCausalFailure(\n events: readonly TraceEvent[],\n options: FindFirstCausalFailureOptions = {},\n): FirstCausalFailure {\n const runId = runIdFromEvents(events);\n\n // 1. Explicit failed/error event (timeline isError / step_completed error / run error)\n const timeline = buildRunTimeline(events);\n const firstError = timeline.entries.find((entry) => entry.isError);\n if (firstError) {\n return {\n kind: \"explicit_error_event\",\n evidenceIds: [firstError.stepId],\n rationale:\n \"First timeline step with status error (explicit failure; no timing-only inference).\",\n orderIndex: 1,\n runId: timeline.runId || runId,\n primary: {\n stepId: firstError.stepId,\n name: firstError.name,\n },\n relationship: { role: \"self\", relatedIds: [] },\n engine: \"conservative-causal-v1\",\n };\n }\n\n const runCompletedError = events.find(\n (event): event is Extract<TraceEvent, { event: \"run_completed\" }> =>\n event.event === \"run_completed\" && event.status === \"error\",\n );\n if (runCompletedError) {\n return {\n kind: \"explicit_error_event\",\n evidenceIds: [runCompletedError.runId],\n rationale: \"Run completed with status error and no earlier errored step.\",\n orderIndex: 1,\n runId: runCompletedError.runId,\n primary: { name: \"run\", stepId: runCompletedError.runId },\n relationship: { role: \"self\", relatedIds: [] },\n engine: \"conservative-causal-v1\",\n };\n }\n\n // 2. Failed observed outcome\n const outcomes = extractOutcomesFromTraceEvents(events);\n const failedOutcome = outcomes.find((outcome) => outcome.status === \"failed\");\n if (failedOutcome) {\n const evidenceIds = [failedOutcome.outcomeId];\n if (failedOutcome.parentId) evidenceIds.push(failedOutcome.parentId);\n return {\n kind: \"failed_observed_outcome\",\n evidenceIds,\n rationale: \"First observed outcome with status failed.\",\n orderIndex: 2,\n runId: failedOutcome.runId || runId,\n primary: {\n outcomeId: failedOutcome.outcomeId,\n stepId: failedOutcome.parentId,\n name: failedOutcome.name,\n },\n relationship: failedOutcome.parentId\n ? { role: \"child\", relatedIds: [failedOutcome.parentId] }\n : { role: \"self\", relatedIds: [] },\n engine: \"conservative-causal-v1\",\n };\n }\n\n // 3. Contract failure linked to an event\n const contractFail = (options.contractFindings ?? []).find(\n (finding) => finding.status === \"fail\" && (finding.evidenceIds?.length ?? 0) > 0,\n );\n if (contractFail) {\n const evidenceIds = [...(contractFail.evidenceIds ?? [])];\n return {\n kind: \"contract_failure\",\n evidenceIds,\n rationale:\n contractFail.message ??\n `Contract rule ${contractFail.ruleId} failed with linked evidence ids.`,\n orderIndex: 3,\n runId,\n primary: {\n ruleId: contractFail.ruleId,\n stepId: evidenceIds[0],\n name: contractFail.ruleId,\n },\n relationship: { role: \"self\", relatedIds: [] },\n engine: \"conservative-causal-v1\",\n };\n }\n\n // 4. Nearest failed ancestor/child — only when we have structural parent links\n // among completed steps that somehow weren't marked isError (defensive) or\n // when a success parent wraps a failed child already handled above.\n // If no explicit error steps exist, look for parent/child pairs where a child\n // completed with error relative to a parent (already covered by step 1).\n // Here: if any step has a parent that also completed with error, prefer the\n // child tip — but step 1 would have caught any error step. So this stage\n // only fires when contractFindings lacked event links but we can still find\n // parent/child error adjacency from raw events that timeline missed.\n const completed = events.filter(\n (event): event is StepCompletedEvent => event.event === \"step_completed\",\n );\n const started = events.filter(\n (event): event is StepStartedEvent => event.event === \"step_started\",\n );\n const parentByStep = new Map<string, string | undefined>();\n for (const start of started) {\n parentByStep.set(start.stepId, start.parentId);\n }\n const errorSteps = completed.filter((event) => event.status === \"error\");\n if (errorSteps.length > 0) {\n // Prefer deepest error (has parent that is also error or any parent)\n const sorted = [...errorSteps].sort((a, b) => {\n const depth = (id: string): number => {\n let d = 0;\n let cur: string | undefined = id;\n const seen = new Set<string>();\n while (cur && parentByStep.has(cur) && !seen.has(cur)) {\n seen.add(cur);\n const parent = parentByStep.get(cur);\n if (!parent) break;\n d += 1;\n cur = parent;\n }\n return d;\n };\n return depth(b.stepId) - depth(a.stepId);\n });\n const tip = sorted[0]!;\n const parentId = parentByStep.get(tip.stepId);\n const relatedIds = parentId ? [parentId] : [];\n return {\n kind: \"failed_ancestor_or_child\",\n evidenceIds: [tip.stepId, ...relatedIds],\n rationale: parentId\n ? \"Deepest explicit error step with parent link (nearest ancestor relationship).\"\n : \"Explicit error step used as structural tip (no parent id).\",\n orderIndex: 4,\n runId: tip.runId || runId,\n primary: { stepId: tip.stepId, name: started.find((s) => s.stepId === tip.stepId)?.name },\n relationship: {\n role: parentId ? \"child\" : \"self\",\n relatedIds,\n },\n engine: \"conservative-causal-v1\",\n };\n }\n\n // 5. No timing-only inference\n return noneResult(\n runId,\n \"No explicit error event, failed outcome, or linked contract failure; refusing timing-only inference.\",\n );\n}\n","import { Redactor } from \"./logs/redactor.js\";\nimport { resolveRedactionProfile } from \"./redaction-profiles.js\";\nimport type { RedactionProfile } from \"./types.js\";\nimport type { InspectNode, InspectRunTree } from \"./types/inspect-event.js\";\n\nexport type ExplainMode = \"dry-run\" | \"local\";\n\nexport interface ExplainFact {\n id: string;\n label: string;\n value: unknown;\n source: \"trace\";\n confidence: \"observed\";\n}\n\nexport interface ExplainInference {\n id: string;\n label: string;\n text: string;\n evidence: string[];\n confidence: \"deterministic\";\n}\n\nexport interface ExplainResult {\n mode: ExplainMode;\n runId: string;\n name?: string;\n status?: string;\n redactionProfile: RedactionProfile;\n facts: ExplainFact[];\n inferences: ExplainInference[];\n notes: string[];\n}\n\nexport interface ExplainOptions {\n mode?: ExplainMode;\n redactionProfile?: RedactionProfile;\n}\n\ninterface FlatNode {\n node: InspectNode;\n index: number;\n}\n\n/**\n * Maps the reader run-tree status vocabulary (\"ok\"/\"error\"/\"running\") to the\n * user-facing status vocabulary that list/view/stats report (\"success\"/...),\n * so explain agrees with the other commands for the same run.\n */\nfunction toDisplayStatus(status: InspectRunTree[\"status\"] | undefined): string {\n if (status === \"ok\") return \"success\";\n if (status === \"error\") return \"error\";\n if (status === \"running\") return \"running\";\n return \"unknown\";\n}\n\nfunction flatten(nodes: InspectNode[], out: FlatNode[] = []): FlatNode[] {\n for (const node of nodes) {\n out.push({ node, index: out.length + 1 });\n flatten(node.children, out);\n }\n return out;\n}\n\nfunction redactValue(\n redactor: Redactor,\n key: string,\n value: unknown,\n): unknown {\n return redactor.redactValue(key, value);\n}\n\nfunction fact(\n id: string,\n label: string,\n value: unknown,\n redactor: Redactor,\n): ExplainFact {\n return {\n id,\n label,\n value: redactValue(redactor, id.split(\".\").at(-1) ?? id, value),\n source: \"trace\",\n confidence: \"observed\",\n };\n}\n\nfunction topKinds(run: InspectRunTree): string[] {\n return Object.entries(run.metadata.kinds)\n .filter(([, count]) => count > 0)\n .sort((a, b) => {\n if (b[1] !== a[1]) return b[1] - a[1];\n return a[0].localeCompare(b[0]);\n })\n .slice(0, 5)\n .map(([kind, count]) => `${kind}:${count}`);\n}\n\nfunction countErrorNodes(nodes: FlatNode[]): number {\n return nodes.filter((entry) => entry.node.event.status === \"error\").length;\n}\n\nfunction slowestNode(nodes: FlatNode[]): FlatNode | undefined {\n return nodes\n .filter(\n (entry) =>\n entry.node.event.durationMs !== undefined &&\n // The RUN boundary spans the whole run, so its duration always dominates\n // and shadows every real step. Rank actual work nodes only, matching the\n // stats slowest-step ranking, which never counts the run envelope.\n entry.node.event.kind !== \"RUN\",\n )\n .sort((a, b) => {\n const delta = (b.node.event.durationMs ?? 0) - (a.node.event.durationMs ?? 0);\n return delta !== 0 ? delta : a.index - b.index;\n })[0];\n}\n\nfunction attributeFacts(nodes: FlatNode[], redactor: Redactor): ExplainFact[] {\n const facts: ExplainFact[] = [];\n for (const entry of nodes) {\n const attrs = entry.node.event.attributes;\n if (attrs === undefined) continue;\n for (const key of Object.keys(attrs).sort()) {\n facts.push({\n id: `node.${entry.index}.attributes.${key}`,\n label: `${entry.node.event.name} attribute ${key}`,\n value: redactValue(redactor, key, attrs[key]),\n source: \"trace\",\n confidence: \"observed\",\n });\n if (facts.length >= 8) return facts;\n }\n }\n return facts;\n}\n\nfunction buildFacts(run: InspectRunTree, redactor: Redactor): ExplainFact[] {\n const nodes = flatten(run.children);\n const facts = [\n fact(\"run.id\", \"Run id\", run.runId, redactor),\n fact(\"run.name\", \"Run name\", run.name ?? run.runId, redactor),\n fact(\"run.status\", \"Run status\", toDisplayStatus(run.status), redactor),\n fact(\"run.totalEvents\", \"Total events\", run.metadata.totalEvents, redactor),\n fact(\"run.stepCount\", \"Top-level step count\", run.children.length, redactor),\n fact(\"run.nodeCount\", \"Total node count\", nodes.length, redactor),\n fact(\"run.errorNodeCount\", \"Error node count\", countErrorNodes(nodes), redactor),\n fact(\"run.kinds\", \"Observed kind mix\", topKinds(run), redactor),\n ];\n if (run.durationMs !== undefined) {\n facts.push(fact(\"run.durationMs\", \"Run duration milliseconds\", run.durationMs, redactor));\n }\n const slowest = slowestNode(nodes);\n if (slowest !== undefined) {\n facts.push(\n fact(\"run.slowestNode\", \"Slowest observed node\", {\n name: slowest.node.event.name,\n kind: slowest.node.event.kind,\n durationMs: slowest.node.event.durationMs,\n }, redactor),\n );\n }\n facts.push(...attributeFacts(nodes, redactor));\n return facts;\n}\n\nfunction buildInferences(run: InspectRunTree, facts: ExplainFact[]): ExplainInference[] {\n const inferences: ExplainInference[] = [];\n const errorFact = facts.find((item) => item.id === \"run.errorNodeCount\");\n const kindFact = facts.find((item) => item.id === \"run.kinds\");\n const durationFact = facts.find((item) => item.id === \"run.durationMs\");\n const errorNodeCount =\n typeof errorFact?.value === \"number\" ? errorFact.value : 0;\n\n if (run.status === \"error\" || errorNodeCount > 0) {\n inferences.push({\n id: \"outcome.error\",\n label: \"Outcome\",\n text: \"The run recorded an error status or at least one error node.\",\n evidence: [\"run.status\", \"run.errorNodeCount\"],\n confidence: \"deterministic\",\n });\n } else if (run.status === \"ok\") {\n inferences.push({\n id: \"outcome.success\",\n label: \"Outcome\",\n text: \"The run completed without observed error nodes.\",\n evidence: [\"run.status\", \"run.errorNodeCount\"],\n confidence: \"deterministic\",\n });\n }\n\n if (kindFact !== undefined) {\n inferences.push({\n id: \"shape.kind-mix\",\n label: \"Trace shape\",\n text: \"The explanation is based on the observed event kind mix, not generated content.\",\n evidence: [kindFact.id],\n confidence: \"deterministic\",\n });\n }\n\n if (durationFact !== undefined) {\n inferences.push({\n id: \"timing.duration\",\n label: \"Timing\",\n text: \"Timing claims are limited to persisted duration fields in the trace.\",\n evidence: [durationFact.id],\n confidence: \"deterministic\",\n });\n }\n\n return inferences;\n}\n\n/**\n * Build a local, deterministic explanation payload from a reader-selected run.\n *\n * This helper performs no network I/O and does not call a model provider.\n */\nexport function buildLocalExplanation(\n run: InspectRunTree,\n options: ExplainOptions = {},\n): ExplainResult {\n const redactionProfile = options.redactionProfile ?? \"local\";\n const resolved = resolveRedactionProfile(redactionProfile);\n const redactor = new Redactor({ extraKeys: resolved.extraKeys });\n const mode = options.mode ?? \"local\";\n const facts = buildFacts(run, redactor);\n return {\n mode,\n runId: String(redactValue(redactor, \"runId\", run.runId)),\n ...(run.name !== undefined ? { name: String(redactValue(redactor, \"name\", run.name)) } : {}),\n ...(run.status !== undefined ? { status: toDisplayStatus(run.status) } : {}),\n redactionProfile,\n facts,\n inferences: mode === \"dry-run\" ? [] : buildInferences(run, facts),\n notes: [\n \"Generated locally without provider or network calls.\",\n \"Facts are observed from normalized trace data; inferences are deterministic labels.\",\n ],\n };\n}\n","import type { StepCompletedEvent, StepStartedEvent, TraceEvent } from \"./types.js\";\nimport { extractMetadata } from \"./trace-metadata.js\";\nimport { filterTraces as filterTraceMetas } from \"./trace-filter.js\";\nimport { readTraceEventsFromFile } from \"./storage.js\";\nimport type { TraceMetadata, StepType } from \"./types.js\";\nimport { parseDuration } from \"./utils/duration.js\";\nimport {\n extractOutcomesFromTraceEvents,\n parseObservationFilter,\n} from \"./outcomes/index.js\";\n\nexport interface TraceSearchOptions {\n traceDir: string;\n since?: string;\n status?: \"success\" | \"error\" | \"running\" | \"unknown\";\n kind?: string;\n type?: string;\n name?: string;\n tool?: string;\n duration?: string;\n limit?: number;\n session?: string;\n correlateGroup?: boolean;\n observation?: string;\n}\n\nexport interface TraceSearchResult {\n runId: string;\n runName?: string;\n runStatus: string;\n stepId?: string;\n stepName?: string;\n stepType?: string;\n timestamp?: number;\n durationMs?: number;\n matchReason: string;\n matchedFields: string[];\n filePath: string;\n sessionId?: string;\n}\n\nexport interface ParsedDurationFilter {\n op: \">\" | \">=\" | \"<\" | \"<=\";\n ms: number;\n}\n\nexport function parseDurationFilter(expr: string): ParsedDurationFilter {\n const raw = expr.trim();\n const m = raw.match(/^(>=|<=|>|<)\\s*(.+)$/);\n if (!m) {\n throw new Error(\n `Invalid --duration \"${expr}\". Use forms like >5s, >=500ms, <2m.`,\n );\n }\n const op = m[1] as ParsedDurationFilter[\"op\"];\n const ms = parseDuration(m[2].trim());\n return { op, ms };\n}\n\nfunction durationMatches(\n valueMs: number | undefined,\n filter: ParsedDurationFilter,\n): boolean {\n if (valueMs === undefined || !Number.isFinite(valueMs)) return false;\n switch (filter.op) {\n case \">\":\n return valueMs > filter.ms;\n case \">=\":\n return valueMs >= filter.ms;\n case \"<\":\n return valueMs < filter.ms;\n case \"<=\":\n return valueMs <= filter.ms;\n default:\n return false;\n }\n}\n\nfunction normalizeStepTypeFilter(kind?: string, type?: string): string | undefined {\n const v = (kind ?? type)?.trim().toLowerCase();\n return v && v !== \"\" ? v : undefined;\n}\n\nfunction nameMatches(hay: string, needle: string): boolean {\n return hay.toLowerCase().includes(needle.toLowerCase());\n}\n\nexport async function searchTraces(\n metas: TraceMetadata[],\n options: TraceSearchOptions,\n): Promise<TraceSearchResult[]> {\n let filtered = filterTraceMetas(metas, { since: options.since });\n const stepTypeFilter = normalizeStepTypeFilter(options.kind, options.type);\n const nameQuery = options.name?.trim();\n const toolQuery = options.tool?.trim();\n let durationFilter: ParsedDurationFilter | undefined;\n if (options.duration) {\n durationFilter = parseDurationFilter(options.duration);\n }\n const limit = options.limit ?? 50;\n const sessionId = options.session?.trim();\n const observationStatus = parseObservationFilter(options.observation);\n\n const hasContentFilter = Boolean(\n options.status ||\n stepTypeFilter ||\n nameQuery ||\n toolQuery ||\n durationFilter ||\n observationStatus,\n );\n\n const results: TraceSearchResult[] = [];\n const sessionLabel = sessionId && sessionId !== \"\" ? sessionId : undefined;\n\n if (!hasContentFilter) {\n for (const m of filtered) {\n results.push({\n runId: m.runId,\n runName: m.name,\n runStatus: m.status,\n timestamp: m.startedAt,\n durationMs: m.durationMs,\n matchReason: sessionLabel\n ? `trace in session ${sessionLabel}`\n : \"trace in directory\",\n matchedFields: sessionLabel ? [\"run\", \"session\"] : [\"run\"],\n filePath: m.filePath,\n ...(sessionLabel ? { sessionId: sessionLabel } : {}),\n });\n }\n results.sort((a, b) => {\n const ta = a.timestamp ?? 0;\n const tb = b.timestamp ?? 0;\n if (ta !== tb) return tb - ta;\n return a.runId.localeCompare(b.runId);\n });\n return results.slice(0, limit);\n }\n\n for (const m of filtered) {\n if (options.status && m.status !== options.status) continue;\n\n let events: TraceEvent[] = [];\n try {\n events = await readTraceEventsFromFile(m.filePath);\n } catch {\n continue;\n }\n if (events.length === 0) continue;\n\n const runMatches = matchRunLevel(m, {\n stepTypeFilter,\n nameQuery,\n toolQuery,\n durationFilter,\n statusFilter: options.status,\n });\n results.push(...runMatches);\n\n const stepMatches = matchStepLevel(m, events, {\n stepTypeFilter,\n nameQuery,\n toolQuery,\n durationFilter,\n statusFilter: options.status,\n });\n results.push(...stepMatches);\n\n if (observationStatus) {\n const outcomes = extractOutcomesFromTraceEvents(events);\n const matched = outcomes.filter((outcome) => outcome.status === observationStatus);\n for (const outcome of matched) {\n results.push({\n runId: m.runId,\n runName: m.name,\n runStatus: m.status,\n stepName: outcome.name,\n timestamp: outcome.observedAt,\n matchReason: `observation status=${outcome.status}`,\n matchedFields: [\"outcome.status\", \"outcome.name\"],\n filePath: m.filePath,\n });\n }\n }\n }\n\n results.sort((a, b) => {\n const ta = a.timestamp ?? 0;\n const tb = b.timestamp ?? 0;\n // Newest-first so --limit keeps the most recent matches.\n if (ta !== tb) return tb - ta;\n const runCmp = a.runId.localeCompare(b.runId);\n if (runCmp !== 0) return runCmp;\n return (a.stepName ?? \"\").localeCompare(b.stepName ?? \"\");\n });\n\n return results.slice(0, limit);\n}\n\nfunction matchRunLevel(\n m: TraceMetadata,\n opts: {\n stepTypeFilter?: string;\n nameQuery?: string;\n toolQuery?: string;\n durationFilter?: ParsedDurationFilter;\n statusFilter?: string;\n },\n): TraceSearchResult[] {\n // Step-oriented filters are handled only by matchStepLevel.\n if (opts.stepTypeFilter || opts.toolQuery) return [];\n\n // Structured run filters are conjunctive: every supplied filter must match.\n // Previously status/name/duration were OR'd via field accumulation, so\n // `--name missing --status error` could still emit a status-only run hit (#323).\n if (opts.statusFilter && m.status !== opts.statusFilter) return [];\n if (opts.nameQuery && !nameMatches(m.name ?? m.runId, opts.nameQuery)) {\n return [];\n }\n if (\n opts.durationFilter &&\n !durationMatches(m.durationMs, opts.durationFilter)\n ) {\n return [];\n }\n\n const fields: string[] = [];\n if (opts.statusFilter) fields.push(\"run.status\");\n if (opts.nameQuery) fields.push(\"run.name\");\n if (opts.durationFilter) fields.push(\"run.durationMs\");\n if (fields.length === 0) return [];\n\n return [\n {\n runId: m.runId,\n runName: m.name,\n runStatus: m.status,\n timestamp: m.startedAt,\n durationMs: m.durationMs,\n matchReason: `run match: ${fields.join(\", \")}`,\n matchedFields: fields,\n filePath: m.filePath,\n },\n ];\n}\n\nfunction matchStepLevel(\n m: TraceMetadata,\n events: TraceEvent[],\n opts: {\n stepTypeFilter?: string;\n nameQuery?: string;\n toolQuery?: string;\n durationFilter?: ParsedDurationFilter;\n statusFilter?: string;\n },\n): TraceSearchResult[] {\n const out: TraceSearchResult[] = [];\n const started = new Map<string, StepStartedEvent>();\n\n for (const e of events) {\n if (e.event === \"step_started\") {\n started.set((e as StepStartedEvent).stepId, e as StepStartedEvent);\n }\n }\n\n for (const e of events) {\n if (e.event !== \"step_completed\") continue;\n const c = e as StepCompletedEvent;\n const s = started.get(c.stepId);\n if (!s) continue;\n\n const fields: string[] = [];\n const stepType = s.type as StepType;\n\n if (opts.stepTypeFilter && stepType !== opts.stepTypeFilter) {\n continue;\n }\n\n const hasStepFilters =\n opts.stepTypeFilter ||\n opts.nameQuery ||\n opts.toolQuery ||\n opts.durationFilter ||\n opts.statusFilter === \"error\" ||\n opts.statusFilter === \"success\";\n\n if (!hasStepFilters) continue;\n\n if (opts.statusFilter === \"error\" && c.status === \"error\") {\n fields.push(\"step.status\");\n } else if (opts.statusFilter === \"success\" && c.status === \"success\") {\n fields.push(\"step.status\");\n } else if (opts.statusFilter === \"error\" || opts.statusFilter === \"success\") {\n continue;\n }\n\n if (opts.nameQuery) {\n if (!nameMatches(s.name, opts.nameQuery)) continue;\n fields.push(\"step.name\");\n }\n if (opts.toolQuery) {\n const toolName =\n typeof s.metadata?.toolName === \"string\"\n ? s.metadata.toolName\n : s.name;\n if (!nameMatches(toolName, opts.toolQuery)) continue;\n fields.push(\"step.tool\");\n }\n if (opts.durationFilter) {\n if (!durationMatches(c.durationMs, opts.durationFilter)) continue;\n fields.push(\"step.durationMs\");\n }\n if (opts.stepTypeFilter) {\n fields.push(\"step.type\");\n }\n\n if (fields.length === 0) continue;\n\n out.push({\n runId: m.runId,\n runName: m.name,\n runStatus: m.status,\n stepId: c.stepId,\n stepName: s.name,\n stepType,\n timestamp: s.startTime ?? s.timestamp,\n durationMs: c.durationMs,\n matchReason: `step match: ${fields.join(\", \")}`,\n matchedFields: fields,\n filePath: m.filePath,\n });\n }\n\n return out;\n}\n\nexport async function loadTraceMetadataList(\n _traceDir: string,\n fileNames: string[],\n getPath: (fileName: string) => string,\n): Promise<TraceMetadata[]> {\n const metas: TraceMetadata[] = [];\n for (const fileName of fileNames) {\n try {\n const filePath = getPath(fileName);\n const meta = await extractMetadata(filePath);\n metas.push(meta);\n } catch {\n /* skip */\n }\n }\n return metas;\n}\n","import { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type {\n EnrichSessionSummaryOptions,\n SessionCheckSummary,\n SessionLastError,\n SessionRunRecord,\n SessionStatus,\n SessionSummary,\n} from \"./types.js\";\n\nconst DEFAULT_STALE_THRESHOLD_MS = 86_400_000;\n\nconst EXPLICIT_STATUS_PRIORITY: Record<string, number> = {\n error: 5,\n waiting_input: 4,\n idle: 3,\n stale: 2,\n completed: 1,\n};\n\nconst EXPLICIT_SESSION_STATUSES = new Set<string>([\n \"running\",\n \"waiting_input\",\n \"idle\",\n \"completed\",\n \"error\",\n \"stale\",\n \"unknown\",\n]);\n\nfunction isExplicitSessionStatus(value: unknown): value is SessionStatus {\n return typeof value === \"string\" && EXPLICIT_SESSION_STATUSES.has(value);\n}\n\nfunction activityMs(run: SessionRunRecord): number {\n return run.endedAt ?? run.startedAt ?? 0;\n}\n\nfunction latestActivityMs(runs: readonly SessionRunRecord[]): number {\n let latest = 0;\n for (const run of runs) {\n const ms = activityMs(run);\n if (ms > latest) latest = ms;\n }\n return latest;\n}\n\nfunction earliestStart(runs: readonly SessionRunRecord[]): number | undefined {\n let earliest: number | undefined;\n for (const run of runs) {\n if (run.startedAt === undefined) continue;\n if (earliest === undefined || run.startedAt < earliest) {\n earliest = run.startedAt;\n }\n }\n return earliest;\n}\n\nfunction latestEndWhenAllEnded(runs: readonly SessionRunRecord[]): number | undefined {\n if (runs.length === 0) return undefined;\n let latest: number | undefined;\n for (const run of runs) {\n if (run.endedAt === undefined) return undefined;\n if (latest === undefined || run.endedAt > latest) latest = run.endedAt;\n }\n return latest;\n}\n\nfunction pickExplicitStatus(runs: readonly SessionRunRecord[]): SessionStatus | undefined {\n let best: SessionStatus | undefined;\n let bestPriority = 0;\n for (const run of runs) {\n const raw = run.metadata?.sessionStatus;\n if (!isExplicitSessionStatus(raw)) continue;\n const priority = EXPLICIT_STATUS_PRIORITY[raw] ?? 0;\n if (priority > bestPriority) {\n bestPriority = priority;\n best = raw;\n }\n }\n return best;\n}\n\nfunction deriveLastError(runs: readonly SessionRunRecord[]): SessionLastError | undefined {\n const errorRuns = runs\n .filter((run) => run.status === \"error\")\n .sort((a, b) => activityMs(b) - activityMs(a));\n const latest = errorRuns[0];\n if (!latest) return undefined;\n\n const meta = latest.metadata ?? {};\n const message =\n typeof meta.errorMessage === \"string\" && meta.errorMessage.trim() !== \"\"\n ? meta.errorMessage.trim()\n : (latest.name ?? latest.runId);\n const code =\n typeof meta.errorCode === \"string\" && meta.errorCode.trim() !== \"\"\n ? meta.errorCode.trim()\n : undefined;\n\n return { runId: latest.runId, message, code };\n}\n\nfunction deriveCheckSummary(\n runs: readonly SessionRunRecord[],\n): SessionCheckSummary | undefined {\n let pass = 0;\n let fail = 0;\n let warn = 0;\n let found = false;\n\n for (const run of runs) {\n const summary = run.metadata?.checkSummary;\n if (!summary || typeof summary !== \"object\") continue;\n const record = summary as Record<string, unknown>;\n if (typeof record.pass === \"number\") {\n pass += record.pass;\n found = true;\n }\n if (typeof record.fail === \"number\") {\n fail += record.fail;\n found = true;\n }\n if (typeof record.warn === \"number\") {\n warn += record.warn;\n found = true;\n }\n }\n\n return found ? { pass, fail, warn } : undefined;\n}\n\nfunction deriveObservationSummary(runs: readonly SessionRunRecord[]): string | undefined {\n for (const run of [...runs].sort((a, b) => activityMs(b) - activityMs(a))) {\n const value = run.metadata?.observationSummary;\n if (typeof value === \"string\" && value.trim() !== \"\") {\n return value.trim();\n }\n }\n return undefined;\n}\n\n/** Derives session status from run records per the v4.2 RFC (no timestamp-only causality). */\nexport function deriveSessionStatus(\n runs: readonly SessionRunRecord[],\n options: EnrichSessionSummaryOptions = {},\n): SessionStatus {\n if (runs.length === 0) return \"unknown\";\n\n if (runs.some((run) => run.status === \"running\")) return \"running\";\n\n const explicit = pickExplicitStatus(runs);\n if (explicit && explicit !== \"running\") return explicit;\n\n if (runs.some((run) => run.status === \"error\")) return \"error\";\n\n if (runs.every((run) => run.status === \"success\")) return \"completed\";\n\n const nowMs = options.nowMs ?? Date.now();\n const staleThresholdMs = options.staleThresholdMs ?? DEFAULT_STALE_THRESHOLD_MS;\n const lastMs = latestActivityMs(runs);\n if (lastMs > 0 && nowMs - lastMs > staleThresholdMs) return \"stale\";\n\n return \"unknown\";\n}\n\n/**\n * Enriches a session summary with v4.2 derived fields (status, timing, errors).\n * Pure function; does not read trace files.\n */\nexport function enrichSessionSummary(\n summary: Omit<\n SessionSummary,\n | \"status\"\n | \"lastActivity\"\n | \"retryCount\"\n | \"startedAt\"\n | \"endedAt\"\n | \"durationMs\"\n | \"correlationId\"\n | \"jobId\"\n | \"workflowId\"\n | \"lastError\"\n | \"observationSummary\"\n | \"checkSummary\"\n >,\n runs: readonly SessionRunRecord[],\n options: EnrichSessionSummaryOptions = {},\n): SessionSummary {\n const sessionRuns = runs\n .filter((run) => summary.runIds.includes(run.runId))\n .sort((a, b) => a.runId.localeCompare(b.runId));\n\n const startedAt = earliestStart(sessionRuns);\n const endedAt = latestEndWhenAllEnded(sessionRuns);\n const durationMs =\n startedAt !== undefined && endedAt !== undefined ? endedAt - startedAt : undefined;\n\n let correlationId: string | undefined;\n let jobId: string | undefined;\n let workflowId: string | undefined;\n for (const run of sessionRuns) {\n const meta = extractSessionWorkflowMetadata(run.metadata);\n if (!correlationId && meta?.correlationId) correlationId = meta.correlationId;\n if (!jobId && meta?.jobId) jobId = meta.jobId;\n if (!workflowId && meta?.workflowName) workflowId = meta.workflowName;\n else if (!workflowId && meta?.workflowStep) workflowId = meta.workflowStep;\n }\n\n const lastMs = latestActivityMs(sessionRuns);\n const lastActivity =\n lastMs > 0 ? new Date(lastMs).toISOString() : new Date(0).toISOString();\n\n const retryCount = summary.retries.filter(\n (retry) => retry.retryOf !== undefined || (retry.attempt ?? 0) > 1,\n ).length;\n\n return {\n ...summary,\n status: deriveSessionStatus(sessionRuns, options),\n startedAt,\n endedAt,\n durationMs,\n correlationId,\n jobId,\n workflowId,\n lastError: deriveLastError(sessionRuns),\n lastActivity,\n retryCount,\n observationSummary: deriveObservationSummary(sessionRuns),\n checkSummary: deriveCheckSummary(sessionRuns),\n };\n}\n","import type {\n ActivityEntry,\n ActivitySummary,\n BuildActivitySummaryOptions,\n SessionIndex,\n SessionStatus,\n SessionSummary,\n} from \"./types.js\";\n\nfunction statusLine(session: SessionSummary): string {\n const name =\n session.workflowId ??\n session.correlationId ??\n session.sessionId;\n const status = session.status;\n if (session.lastError) {\n return `${name} session ${session.sessionId} failed at ${session.lastError.message}`;\n }\n if (session.observationSummary) {\n return `${name} session ${session.sessionId} ${status} with observation warning`;\n }\n return `${name} session ${session.sessionId} ${status}`;\n}\n\nfunction parseSinceMs(since: string | undefined, nowMs: number): number {\n if (!since || since.trim() === \"\") return nowMs - 7 * 86_400_000;\n const trimmed = since.trim().toLowerCase();\n const match = /^(\\d+)([smhd])$/.exec(trimmed);\n if (!match) return nowMs - 7 * 86_400_000;\n const amount = Number.parseInt(match[1]!, 10);\n const unit = match[2];\n const mult =\n unit === \"s\" ? 1000 : unit === \"m\" ? 60_000 : unit === \"h\" ? 3_600_000 : 86_400_000;\n return nowMs - amount * mult;\n}\n\nfunction isFailed(status: SessionStatus): boolean {\n return status === \"error\";\n}\n\nfunction isStale(status: SessionStatus): boolean {\n return status === \"stale\";\n}\n\nfunction guardrailWarnings(session: SessionSummary): number {\n const summary = session.checkSummary;\n if (!summary) return 0;\n return summary.warn;\n}\n\n/**\n * Builds a deterministic activity summary from a session index (v4.2).\n * Read-only; does not mutate traces or invent relationships.\n */\nexport function buildActivitySummary(\n index: SessionIndex,\n options: BuildActivitySummaryOptions = {},\n): ActivitySummary {\n const nowMs = options.nowMs ?? Date.now();\n const sinceMs = parseSinceMs(options.since, nowMs);\n const sinceIso = new Date(sinceMs).toISOString();\n const limit =\n Number.isInteger(options.limit) && options.limit! > 0 ? options.limit! : 20;\n\n const inWindow = index.sessions.filter((session) => {\n const activityMs = Date.parse(session.lastActivity);\n return Number.isFinite(activityMs) && activityMs >= sinceMs;\n });\n\n const entries: ActivityEntry[] = [...inWindow]\n .sort((a, b) => Date.parse(b.lastActivity) - Date.parse(a.lastActivity))\n .slice(0, limit)\n .map((session) => ({\n sessionId: session.sessionId,\n status: session.status,\n summary: statusLine(session),\n lastActivity: session.lastActivity,\n runCount: session.runIds.length,\n }));\n\n let failed = 0;\n let stale = 0;\n let guardrailWarningTotal = 0;\n for (const session of inWindow) {\n if (isFailed(session.status)) failed += 1;\n if (isStale(session.status)) stale += 1;\n guardrailWarningTotal += guardrailWarnings(session);\n }\n\n return {\n since: sinceIso,\n sessions: inWindow.length,\n failed,\n stale,\n guardrailWarnings: guardrailWarningTotal,\n entries,\n };\n}\n\n/** Renders a human activity summary for terminal output. */\nexport function renderActivitySummaryHuman(\n summary: ActivitySummary,\n options?: { nowMs?: number },\n): string {\n const lines: string[] = [];\n const nowMs = options?.nowMs ?? Date.now();\n const todayStart = new Date(nowMs);\n todayStart.setHours(0, 0, 0, 0);\n const todayMs = todayStart.getTime();\n\n const today = summary.entries.filter(\n (entry) => Date.parse(entry.lastActivity) >= todayMs,\n );\n if (today.length > 0) {\n lines.push(\"Today\");\n for (const entry of today) {\n lines.push(` ${entry.summary}`);\n }\n lines.push(\"\");\n }\n\n lines.push(`Since ${summary.since}`);\n lines.push(` ${summary.sessions} sessions`);\n lines.push(` ${summary.failed} failed`);\n lines.push(` ${summary.stale} stale`);\n lines.push(` ${summary.guardrailWarnings} guardrail warnings`);\n\n return lines.join(\"\\n\");\n}\n","import type { TraceMetadataStatus } from \"../types.js\";\n\n/** Known session/workflow metadata keys (v2.4 RFC). */\nexport const SESSION_WORKFLOW_KEYS = [\n \"sessionId\",\n \"conversationId\",\n \"groupId\",\n \"parentGroupId\",\n \"attempt\",\n \"retryOf\",\n \"retryReason\",\n \"handoffFrom\",\n \"handoffTo\",\n \"subAgentId\",\n \"subAgentName\",\n \"jobId\",\n \"queueName\",\n \"workflowName\",\n \"workflowStep\",\n \"toolCallId\",\n \"mcpToolCallId\",\n \"linkedStepId\",\n \"operationId\",\n \"attemptId\",\n \"attemptNumber\",\n \"fallbackOf\",\n \"idempotencyKey\",\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n] as const;\n\nexport type SessionWorkflowKey = (typeof SESSION_WORKFLOW_KEYS)[number];\n\nexport type SessionConfidence = \"explicit\" | \"correlated\" | \"heuristic\" | \"unknown\";\n\nexport type SessionEdgeSource =\n | \"manual\"\n | \"adapter\"\n | \"json-log\"\n | \"log4js\"\n | \"mcp-client\"\n | \"inferred\";\n\nexport interface SessionWorkflowMetadata {\n sessionId?: string;\n conversationId?: string;\n groupId?: string;\n parentGroupId?: string;\n attempt?: number;\n retryOf?: string;\n retryReason?: string;\n handoffFrom?: string;\n handoffTo?: string;\n subAgentId?: string;\n subAgentName?: string;\n jobId?: string;\n queueName?: string;\n workflowName?: string;\n workflowStep?: string;\n toolCallId?: string;\n mcpToolCallId?: string;\n linkedStepId?: string;\n operationId?: string;\n attemptId?: string;\n attemptNumber?: number;\n fallbackOf?: string;\n idempotencyKey?: string;\n correlationId?: string;\n requestId?: string;\n decisionId?: string;\n}\n\nexport interface SessionRunRecord {\n runId: string;\n name?: string;\n status?: TraceMetadataStatus;\n startedAt?: number;\n endedAt?: number;\n durationMs?: number;\n filePath?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface SessionWarning {\n code: string;\n message: string;\n runId?: string;\n sessionId?: string;\n}\n\nexport interface HandoffEdge {\n from: string;\n to: string;\n source: SessionEdgeSource;\n confidence: SessionConfidence;\n}\n\nexport interface RetryLink {\n runId: string;\n retryOf?: string;\n attempt?: number;\n source: SessionEdgeSource;\n confidence: SessionConfidence;\n}\n\nexport interface SessionGroup {\n groupId: string;\n parentGroupId?: string;\n runIds: string[];\n}\n\nexport interface CriticalPathStep {\n runId: string;\n name?: string;\n startedAt?: number;\n durationMs?: number;\n source: SessionEdgeSource;\n confidence: SessionConfidence;\n}\n\n/** Session lifecycle status (v4.2 RFC). */\nexport type SessionStatus =\n | \"running\"\n | \"waiting_input\"\n | \"idle\"\n | \"completed\"\n | \"error\"\n | \"stale\"\n | \"unknown\";\n\nexport interface SessionLastError {\n runId: string;\n message: string;\n code?: string;\n}\n\nexport interface SessionCheckSummary {\n pass: number;\n fail: number;\n warn: number;\n}\n\nexport interface EnrichSessionSummaryOptions {\n /** Reference clock for staleness (default Date.now()). */\n nowMs?: number;\n /** Inactivity threshold before marking a session stale (default 24h). */\n staleThresholdMs?: number;\n}\n\nexport interface ActivityEntry {\n sessionId: string;\n status: SessionStatus;\n summary: string;\n lastActivity: string;\n runCount: number;\n}\n\nexport interface ActivitySummary {\n since: string;\n sessions: number;\n failed: number;\n stale: number;\n guardrailWarnings: number;\n entries: ActivityEntry[];\n}\n\nexport interface BuildActivitySummaryOptions {\n /** Duration window (e.g. 7d, 24h). Default 7d. */\n since?: string;\n /** Reference clock (default Date.now()). */\n nowMs?: number;\n /** Max entries returned (default 20). */\n limit?: number;\n}\n\nexport interface SessionSummary {\n sessionId: string;\n runIds: string[];\n groups: SessionGroup[];\n handoffs: HandoffEdge[];\n retries: RetryLink[];\n criticalPath: CriticalPathStep[];\n /** Derived session status (v4.2+). */\n status: SessionStatus;\n /** Earliest run start time in the session. */\n startedAt?: number;\n /** Latest run end time when all runs have ended. */\n endedAt?: number;\n /** endedAt - startedAt when both are present. */\n durationMs?: number;\n correlationId?: string;\n jobId?: string;\n workflowId?: string;\n lastError?: SessionLastError;\n /** ISO-8601 timestamp of the most recent run activity. */\n lastActivity: string;\n retryCount: number;\n observationSummary?: string;\n checkSummary?: SessionCheckSummary;\n}\n\nexport interface SessionIndex {\n runs: SessionRunRecord[];\n sessions: SessionSummary[];\n unscopedRunIds: string[];\n warnings: SessionWarning[];\n}\n\nexport interface BuildSessionIndexOptions {\n /** When true, group runs that share only `groupId` under a synthetic session key. */\n correlateByGroupId?: boolean;\n /** Reference clock for session staleness (v4.2+). */\n nowMs?: number;\n /** Inactivity threshold before marking a session stale (v4.2+, default 24h). */\n staleThresholdMs?: number;\n}\n","import { readTraceEventsFromFile } from \"../storage.js\";\nimport type { TraceMetadata } from \"../types.js\";\nimport type { SessionRunRecord } from \"./types.js\";\n\n/** Enriches trace metadata with run_started metadata for session indexing. */\nexport async function enrichSessionRunRecord(\n meta: TraceMetadata,\n): Promise<SessionRunRecord> {\n let metadata: Record<string, unknown> | undefined;\n try {\n const events = await readTraceEventsFromFile(meta.filePath);\n for (const event of events) {\n if (event.event !== \"run_started\") continue;\n if (event.metadata && typeof event.metadata === \"object\") {\n metadata = event.metadata as Record<string, unknown>;\n }\n break;\n }\n } catch {\n /* skip */\n }\n\n return {\n runId: meta.runId,\n name: meta.name,\n status: meta.status,\n startedAt: meta.startedAt,\n endedAt: meta.endedAt,\n durationMs: meta.durationMs,\n filePath: meta.filePath,\n metadata,\n };\n}\n\n/** Builds session run records from extracted trace metadata rows. */\nexport async function loadSessionRunRecords(\n metas: readonly TraceMetadata[],\n): Promise<SessionRunRecord[]> {\n const out: SessionRunRecord[] = [];\n for (const meta of metas) {\n out.push(await enrichSessionRunRecord(meta));\n }\n return out;\n}\n","import type { TraceMetadata } from \"../types.js\";\nimport { buildSessionIndex } from \"./index.js\";\nimport { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type { SessionRunRecord, SessionWarning } from \"./types.js\";\n\nexport interface SessionScopeOptions {\n sessionId?: string;\n groupId?: string;\n correlateByGroupId?: boolean;\n}\n\nexport interface SessionScopeResult {\n metas: TraceMetadata[];\n scopeLabel: string;\n scopeKind: \"session\" | \"group\";\n runIds: string[];\n warnings: SessionWarning[];\n notFound: boolean;\n}\n\nfunction metaToSessionRunRecord(meta: TraceMetadata): SessionRunRecord {\n return {\n runId: meta.runId,\n name: meta.name,\n status: meta.status,\n startedAt: meta.startedAt,\n endedAt: meta.endedAt,\n durationMs: meta.durationMs,\n filePath: meta.filePath,\n metadata: undefined,\n };\n}\n\n/** Filters trace metadata rows to runs in a session or group scope. */\nexport function filterMetasBySessionScope(\n metas: readonly TraceMetadata[],\n records: readonly SessionRunRecord[],\n options: SessionScopeOptions,\n): SessionScopeResult {\n const sessionId = options.sessionId?.trim();\n const groupId = options.groupId?.trim();\n const warnings: SessionWarning[] = [];\n\n if (sessionId) {\n const index = buildSessionIndex(records, {\n correlateByGroupId: options.correlateByGroupId === true,\n });\n warnings.push(...index.warnings);\n const session = index.sessions.find((item) => item.sessionId === sessionId);\n if (!session) {\n return {\n metas: [],\n scopeLabel: sessionId,\n scopeKind: \"session\",\n runIds: [],\n warnings,\n notFound: true,\n };\n }\n const runIdSet = new Set(session.runIds);\n const filtered = metas.filter((meta) => runIdSet.has(meta.runId));\n return {\n metas: filtered,\n scopeLabel: sessionId,\n scopeKind: \"session\",\n runIds: session.runIds,\n warnings,\n notFound: false,\n };\n }\n\n if (groupId) {\n const runIds = records\n .filter((run) => extractSessionWorkflowMetadata(run.metadata)?.groupId === groupId)\n .map((run) => run.runId)\n .sort();\n if (runIds.length === 0) {\n return {\n metas: [],\n scopeLabel: groupId,\n scopeKind: \"group\",\n runIds: [],\n warnings,\n notFound: true,\n };\n }\n const runIdSet = new Set(runIds);\n return {\n metas: metas.filter((meta) => runIdSet.has(meta.runId)),\n scopeLabel: groupId,\n scopeKind: \"group\",\n runIds,\n warnings,\n notFound: false,\n };\n }\n\n return {\n metas: [...metas],\n scopeLabel: \"\",\n scopeKind: \"session\",\n runIds: [],\n warnings,\n notFound: false,\n };\n}\n\n/** Lightweight metadata rows for scope resolution when run_started metadata is absent. */\nexport function traceMetasToSessionRunRecords(\n metas: readonly TraceMetadata[],\n): SessionRunRecord[] {\n return metas.map(metaToSessionRunRecord);\n}\n","import { buildSessionIndex } from \"./index.js\";\nimport { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type { BuildSessionIndexOptions, SessionRunRecord } from \"./types.js\";\n\nexport type SessionCohortKind = \"session\" | \"group\";\n\nexport interface SessionCohort {\n key: string;\n kind: SessionCohortKind;\n runIds: string[];\n}\n\nexport interface GroupSessionCohortsOptions extends BuildSessionIndexOptions {\n groupBy?: \"session\" | \"group\";\n}\n\n/**\n * Groups runs into session or group cohort buckets for local search/check aggregation.\n * Deterministic; does not infer causality from timestamps.\n */\nexport function groupSessionCohorts(\n runs: readonly SessionRunRecord[],\n options: GroupSessionCohortsOptions = {},\n): SessionCohort[] {\n const groupBy = options.groupBy ?? \"session\";\n const cohorts: SessionCohort[] = [];\n\n if (groupBy === \"session\") {\n const index = buildSessionIndex(runs, options);\n for (const session of index.sessions) {\n cohorts.push({\n key: session.sessionId,\n kind: \"session\",\n runIds: [...session.runIds],\n });\n }\n if (index.unscopedRunIds.length > 0) {\n cohorts.push({\n key: \"__unscoped__\",\n kind: \"session\",\n runIds: [...index.unscopedRunIds],\n });\n }\n return cohorts.sort((a, b) => a.key.localeCompare(b.key));\n }\n\n const byGroup = new Map<string, string[]>();\n const unscoped: string[] = [];\n\n for (const run of runs) {\n const groupId = extractSessionWorkflowMetadata(run.metadata)?.groupId;\n if (!groupId) {\n unscoped.push(run.runId);\n continue;\n }\n const bucket = byGroup.get(groupId) ?? [];\n bucket.push(run.runId);\n byGroup.set(groupId, bucket);\n }\n\n for (const [key, runIds] of [...byGroup.entries()].sort(([a], [b]) =>\n a.localeCompare(b),\n )) {\n cohorts.push({\n key,\n kind: \"group\",\n runIds: runIds.sort(),\n });\n }\n\n if (unscoped.length > 0) {\n cohorts.push({\n key: \"__unscoped__\",\n kind: \"group\",\n runIds: unscoped.sort(),\n });\n }\n\n return cohorts;\n}\n","import type {\n TraceCheckDiagnostic,\n TraceCheckFinding,\n TraceCheckResult,\n TraceCheckRuleExecution,\n TraceCheckStatus,\n TraceCheckSummary,\n} from \"../checks/index.js\";\nimport type { SessionWarning } from \"./types.js\";\n\nexport interface TraceSessionCheckResult extends TraceCheckResult {\n scopeKind: \"session\" | \"group\";\n scopeLabel: string;\n runIds: string[];\n runResults: Array<{ runId: string; status: TraceCheckStatus }>;\n sessionWarnings?: SessionWarning[];\n}\n\nfunction emptySummary(): TraceCheckSummary {\n return { passed: 0, failed: 0, warnings: 0, errors: 0, rulesEvaluated: 0 };\n}\n\nfunction mergeSummary(\n target: TraceCheckSummary,\n source: TraceCheckSummary,\n): TraceCheckSummary {\n return {\n passed: target.passed + source.passed,\n failed: target.failed + source.failed,\n warnings: target.warnings + source.warnings,\n errors: target.errors + source.errors,\n rulesEvaluated: target.rulesEvaluated + source.rulesEvaluated,\n };\n}\n\nfunction sessionDiagnostic(\n code: \"AI_CHECK_INVALID_ARGUMENTS\" | \"AI_CHECK_TRACE_UNREADABLE\",\n message: string,\n): TraceCheckDiagnostic {\n return { code, message, severity: \"error\" };\n}\n\n/** Aggregates per-run check results for a session or group scope. */\nexport function aggregateSessionCheckResults(\n perRun: readonly TraceCheckResult[],\n scope: {\n scopeKind: \"session\" | \"group\";\n scopeLabel: string;\n runIds: string[];\n sessionWarnings?: SessionWarning[];\n notFound?: boolean;\n empty?: boolean;\n },\n): TraceSessionCheckResult {\n if (scope.notFound) {\n return {\n ok: false,\n status: \"error\",\n format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n scopeKind: scope.scopeKind,\n scopeLabel: scope.scopeLabel,\n runIds: [],\n runResults: [],\n summary: { ...emptySummary(), errors: 1 },\n findings: [],\n diagnostics: [\n sessionDiagnostic(\n \"AI_CHECK_INVALID_ARGUMENTS\",\n `${scope.scopeKind} not found: ${scope.scopeLabel}`,\n ),\n ],\n ruleExecutions: [],\n ...(scope.sessionWarnings?.length\n ? { sessionWarnings: [...scope.sessionWarnings] }\n : {}),\n };\n }\n\n if (scope.empty || perRun.length === 0) {\n return {\n ok: false,\n status: \"error\",\n format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n scopeKind: scope.scopeKind,\n scopeLabel: scope.scopeLabel,\n runIds: scope.runIds,\n runResults: [],\n summary: { ...emptySummary(), errors: 1 },\n findings: [],\n diagnostics: [\n sessionDiagnostic(\n \"AI_CHECK_TRACE_UNREADABLE\",\n `No readable traces in ${scope.scopeKind}: ${scope.scopeLabel}`,\n ),\n ],\n ruleExecutions: [],\n ...(scope.sessionWarnings?.length\n ? { sessionWarnings: [...scope.sessionWarnings] }\n : {}),\n };\n }\n\n let summary = emptySummary();\n const findings: TraceCheckFinding[] = [];\n const diagnostics: TraceCheckDiagnostic[] = [];\n const ruleExecutions: TraceCheckRuleExecution[] = [];\n const runResults: Array<{ runId: string; status: TraceCheckStatus }> = [];\n\n for (const result of perRun) {\n summary = mergeSummary(summary, result.summary);\n findings.push(...result.findings);\n diagnostics.push(...result.diagnostics);\n ruleExecutions.push(...(result.ruleExecutions ?? []));\n if (result.runId) {\n runResults.push({ runId: result.runId, status: result.status });\n }\n }\n\n runResults.sort((a, b) => a.runId.localeCompare(b.runId));\n findings.sort((a, b) => {\n const runCmp = (a.evidence[0]?.runId ?? \"\").localeCompare(\n b.evidence[0]?.runId ?? \"\",\n );\n if (runCmp !== 0) return runCmp;\n return a.ruleId.localeCompare(b.ruleId);\n });\n ruleExecutions.sort((a, b) => {\n const runCmp = (a.runId ?? \"\").localeCompare(b.runId ?? \"\");\n if (runCmp !== 0) return runCmp;\n return a.ruleId.localeCompare(b.ruleId);\n });\n\n const hasErrors = diagnostics.some((item) => item.severity === \"error\");\n const status: TraceCheckStatus = hasErrors\n ? \"error\"\n : summary.failed > 0\n ? \"fail\"\n : \"pass\";\n\n return {\n ok: status === \"pass\",\n status,\n format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n scopeKind: scope.scopeKind,\n scopeLabel: scope.scopeLabel,\n runIds: scope.runIds,\n runResults,\n summary,\n findings,\n diagnostics,\n ruleExecutions,\n ...(scope.sessionWarnings?.length\n ? { sessionWarnings: [...scope.sessionWarnings] }\n : {}),\n };\n}\n","import {\n extractSessionWorkflowMetadata,\n sessionKeyForRun,\n} from \"./metadata.js\";\nimport { enrichSessionSummary } from \"./status.js\";\nimport type {\n BuildSessionIndexOptions,\n CriticalPathStep,\n HandoffEdge,\n RetryLink,\n SessionGroup,\n SessionIndex,\n SessionRunRecord,\n SessionSummary,\n SessionWarning,\n SessionWorkflowMetadata,\n} from \"./types.js\";\n\nfunction compareRuns(a: SessionRunRecord, b: SessionRunRecord): number {\n const aStart = a.startedAt ?? 0;\n const bStart = b.startedAt ?? 0;\n if (aStart !== bStart) return aStart - bStart;\n return a.runId.localeCompare(b.runId);\n}\n\nfunction buildGroups(\n runIds: string[],\n metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n): SessionGroup[] {\n const byGroup = new Map<string, SessionGroup>();\n\n for (const runId of runIds) {\n const groupId = metaByRunId.get(runId)?.groupId;\n if (!groupId) continue;\n const existing = byGroup.get(groupId);\n if (existing) {\n existing.runIds.push(runId);\n } else {\n byGroup.set(groupId, {\n groupId,\n parentGroupId: metaByRunId.get(runId)?.parentGroupId,\n runIds: [runId],\n });\n }\n }\n\n return [...byGroup.values()].map((group) => ({\n ...group,\n runIds: [...group.runIds].sort((a, b) => a.localeCompare(b)),\n }));\n}\n\nfunction buildHandoffs(\n runIds: string[],\n metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n warnings: SessionWarning[],\n sessionId: string,\n): HandoffEdge[] {\n const edges: HandoffEdge[] = [];\n const seen = new Set<string>();\n\n const pushEdge = (edge: HandoffEdge): void => {\n const key = `${edge.from}->${edge.to}:${edge.confidence}`;\n if (seen.has(key)) return;\n seen.add(key);\n edges.push(edge);\n };\n\n for (const runId of runIds) {\n const meta = metaByRunId.get(runId);\n if (!meta) continue;\n\n if (meta.handoffFrom && meta.handoffTo) {\n pushEdge({\n from: meta.handoffFrom,\n to: meta.handoffTo,\n source: \"manual\",\n confidence: \"explicit\",\n });\n continue;\n }\n\n if (meta.handoffFrom) {\n pushEdge({\n from: meta.handoffFrom,\n to: runId,\n source: \"manual\",\n confidence: \"explicit\",\n });\n }\n\n if (meta.handoffTo) {\n pushEdge({\n from: runId,\n to: meta.handoffTo,\n source: \"manual\",\n confidence: \"explicit\",\n });\n }\n\n if (\n meta.subAgentId &&\n meta.parentGroupId &&\n !meta.handoffFrom &&\n !meta.handoffTo\n ) {\n pushEdge({\n from: meta.parentGroupId,\n to: meta.subAgentId,\n source: \"inferred\",\n confidence: \"correlated\",\n });\n warnings.push({\n code: \"ambiguous-handoff-endpoints\",\n message:\n \"Handoff inferred from parentGroupId and subAgentId without explicit handoffFrom/handoffTo.\",\n runId,\n sessionId,\n });\n }\n }\n\n return edges.sort((a, b) => {\n const from = a.from.localeCompare(b.from);\n if (from !== 0) return from;\n return a.to.localeCompare(b.to);\n });\n}\n\nfunction buildRetries(\n runIds: string[],\n metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n warnings: SessionWarning[],\n sessionId: string,\n): RetryLink[] {\n const retries: RetryLink[] = [];\n\n for (const runId of runIds) {\n const meta = metaByRunId.get(runId);\n if (!meta) continue;\n\n if (meta.retryOf) {\n retries.push({\n runId,\n retryOf: meta.retryOf,\n attempt: meta.attempt,\n source: \"manual\",\n confidence: \"explicit\",\n });\n continue;\n }\n\n if (meta.attempt !== undefined && meta.attempt > 1) {\n retries.push({\n runId,\n attempt: meta.attempt,\n source: \"inferred\",\n confidence: \"correlated\",\n });\n warnings.push({\n code: \"ambiguous-retry-link\",\n message: \"attempt > 1 without retryOf; retry link is correlated only.\",\n runId,\n sessionId,\n });\n }\n }\n\n return retries.sort((a, b) => a.runId.localeCompare(b.runId));\n}\n\nfunction buildCriticalPath(\n runs: SessionRunRecord[],\n handoffs: HandoffEdge[],\n): CriticalPathStep[] {\n const runById = new Map(runs.map((run) => [run.runId, run]));\n const explicitTargets = new Set(\n handoffs\n .filter((edge) => edge.confidence === \"explicit\")\n .map((edge) => edge.to),\n );\n const explicitSources = new Set(\n handoffs\n .filter((edge) => edge.confidence === \"explicit\")\n .map((edge) => edge.from),\n );\n\n const ordered = [...runs].sort(compareRuns);\n const path: CriticalPathStep[] = [];\n const visited = new Set<string>();\n\n const pushRun = (\n run: SessionRunRecord,\n confidence: CriticalPathStep[\"confidence\"],\n source: CriticalPathStep[\"source\"],\n ): void => {\n if (visited.has(run.runId)) return;\n visited.add(run.runId);\n path.push({\n runId: run.runId,\n name: run.name,\n startedAt: run.startedAt,\n durationMs: run.durationMs,\n confidence,\n source,\n });\n };\n\n for (const edge of handoffs) {\n if (edge.confidence !== \"explicit\") continue;\n const fromRun = [...runById.values()].find(\n (run) =>\n run.runId === edge.from ||\n metaRunIdMatches(run, edge.from, runById),\n );\n const toRun = [...runById.values()].find(\n (run) =>\n run.runId === edge.to || metaRunIdMatches(run, edge.to, runById),\n );\n if (fromRun) pushRun(fromRun, \"explicit\", \"manual\");\n if (toRun) pushRun(toRun, \"explicit\", \"manual\");\n }\n\n for (const run of ordered) {\n if (visited.has(run.runId)) continue;\n const confidence =\n explicitTargets.has(run.runId) || explicitSources.has(run.runId)\n ? \"explicit\"\n : \"correlated\";\n pushRun(run, confidence, confidence === \"explicit\" ? \"manual\" : \"inferred\");\n }\n\n return path;\n}\n\nfunction metaRunIdMatches(\n run: SessionRunRecord,\n token: string,\n runById: Map<string, SessionRunRecord>,\n): boolean {\n const meta = extractSessionWorkflowMetadata(run.metadata);\n return (\n meta?.subAgentId === token ||\n meta?.groupId === token ||\n runById.has(token)\n );\n}\n\n/**\n * Builds a deterministic session index from local run records and metadata.\n * Does not read files or infer causality from timestamps alone.\n */\nexport function buildSessionIndex(\n inputRuns: readonly SessionRunRecord[],\n options: BuildSessionIndexOptions = {},\n): SessionIndex {\n const warnings: SessionWarning[] = [];\n const runs = [...inputRuns].sort(compareRuns);\n const metaByRunId = new Map<string, SessionWorkflowMetadata | undefined>();\n\n for (const run of runs) {\n metaByRunId.set(run.runId, extractSessionWorkflowMetadata(run.metadata));\n }\n\n const sessionsByKey = new Map<string, SessionRunRecord[]>();\n const unscopedRunIds: string[] = [];\n\n for (const run of runs) {\n const meta = metaByRunId.get(run.runId);\n const key = sessionKeyForRun(meta, {\n correlateByGroupId: options.correlateByGroupId === true,\n });\n if (!key) {\n unscopedRunIds.push(run.runId);\n continue;\n }\n const bucket = sessionsByKey.get(key) ?? [];\n bucket.push(run);\n sessionsByKey.set(key, bucket);\n }\n\n const sessions: SessionSummary[] = [...sessionsByKey.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([sessionId, sessionRuns]) => {\n const runIds = sessionRuns.map((run) => run.runId).sort();\n const handoffs = buildHandoffs(runIds, metaByRunId, warnings, sessionId);\n const retries = buildRetries(runIds, metaByRunId, warnings, sessionId);\n const groups = buildGroups(runIds, metaByRunId);\n const criticalPath = buildCriticalPath(sessionRuns, handoffs);\n\n const confidences = new Set(handoffs.map((edge) => edge.confidence));\n if (confidences.has(\"explicit\") && confidences.has(\"correlated\")) {\n warnings.push({\n code: \"mixed-confidence-group\",\n message: \"Session aggregates explicit and correlated handoff edges.\",\n sessionId,\n });\n }\n\n return enrichSessionSummary(\n {\n sessionId,\n runIds,\n groups,\n handoffs,\n retries,\n criticalPath,\n },\n runs,\n {\n nowMs: options.nowMs,\n staleThresholdMs: options.staleThresholdMs,\n },\n );\n });\n\n if (sessions.length === 0 && runs.length > 0) {\n warnings.push({\n code: \"missing-session-id\",\n message: \"No sessionId (or correlated groupId) found on input runs.\",\n });\n }\n\n warnings.sort((a, b) => {\n const code = a.code.localeCompare(b.code);\n if (code !== 0) return code;\n return (a.runId ?? \"\").localeCompare(b.runId ?? \"\");\n });\n\n return {\n runs,\n sessions,\n unscopedRunIds: unscopedRunIds.sort(),\n warnings,\n };\n}\n\nexport { extractSessionWorkflowMetadata, sessionKeyForRun } from \"./metadata.js\";\nexport { deriveSessionStatus, enrichSessionSummary } from \"./status.js\";\nexport {\n buildActivitySummary,\n renderActivitySummaryHuman,\n} from \"./activity.js\";\nexport type {\n ActivityEntry,\n ActivitySummary,\n BuildActivitySummaryOptions,\n BuildSessionIndexOptions,\n CriticalPathStep,\n EnrichSessionSummaryOptions,\n HandoffEdge,\n RetryLink,\n SessionCheckSummary,\n SessionConfidence,\n SessionEdgeSource,\n SessionGroup,\n SessionIndex,\n SessionLastError,\n SessionRunRecord,\n SessionStatus,\n SessionSummary,\n SessionWarning,\n SessionWorkflowMetadata,\n SessionWorkflowKey,\n} from \"./types.js\";\nexport { SESSION_WORKFLOW_KEYS } from \"./types.js\";\nexport { enrichSessionRunRecord, loadSessionRunRecords } from \"./load.js\";\nexport {\n filterMetasBySessionScope,\n traceMetasToSessionRunRecords,\n type SessionScopeOptions,\n type SessionScopeResult,\n} from \"./scope.js\";\nexport {\n groupSessionCohorts,\n type GroupSessionCohortsOptions,\n type SessionCohort,\n type SessionCohortKind,\n} from \"./cohort.js\";\nexport {\n aggregateSessionCheckResults,\n type TraceSessionCheckResult,\n} from \"./checks.js\";\n","import { createReadStream } from \"node:fs\";\nimport { createInterface } from \"node:readline\";\n\nimport { isTraceEvent } from \"./types.js\";\n\nconst KNOWN_EVENTS = new Set([\n \"run_started\",\n \"run_completed\",\n \"step_started\",\n \"step_completed\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction safeParse(line: string): unknown | undefined {\n try {\n return JSON.parse(line) as unknown;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Safety check for cleanup workflows: returns true only when the file appears to be an AgentInspect trace.\n * This should be conservative: false positives are more dangerous than false negatives.\n */\nexport async function isAgentInspectTrace(filePath: string): Promise<boolean> {\n try {\n const rl = createInterface({\n input: createReadStream(filePath, { encoding: \"utf8\" }),\n crlfDelay: Infinity,\n });\n\n let checked = 0;\n for await (const line of rl) {\n const trimmed = line.trim();\n if (trimmed === \"\") continue;\n const parsed = safeParse(trimmed);\n if (!parsed) continue;\n if (!isRecord(parsed)) continue;\n\n checked += 1;\n\n // Strong signal: a valid TraceEvent (schemaVersion 0.1 + known shape).\n if (isTraceEvent(parsed)) return true;\n\n // Secondary signal: recognizable event name + runId.\n const ev = parsed.event;\n const runId = parsed.runId;\n if (typeof ev === \"string\" && KNOWN_EVENTS.has(ev) && typeof runId === \"string\") {\n return true;\n }\n\n // If we found valid JSON objects but none look like AgentInspect, keep scanning a bit.\n if (checked >= 20) break;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n","import { parseDuration } from \"../utils/duration.js\";\nimport type { SessionIndex, SessionRunRecord } from \"../sessions/types.js\";\nimport type { BundleResolveOptions, BundleResolveResult } from \"./types.js\";\n\nfunction parseSinceCutoff(since: string): number {\n const trimmed = since.trim();\n if (trimmed === \"\") {\n throw new Error(\"--since requires a non-empty duration (e.g. 24h, 7d).\");\n }\n return Date.now() - parseDuration(trimmed);\n}\n\nfunction runActivityMs(run: SessionRunRecord): number | undefined {\n if (run.startedAt !== undefined && Number.isFinite(run.startedAt)) return run.startedAt;\n if (run.endedAt !== undefined && Number.isFinite(run.endedAt)) return run.endedAt;\n return undefined;\n}\n\nfunction runsInSinceWindow(\n runs: readonly SessionRunRecord[],\n since: string,\n): string[] {\n const cutoff = parseSinceCutoff(since);\n const ids: string[] = [];\n for (const run of runs) {\n const activity = runActivityMs(run);\n if (activity !== undefined && activity >= cutoff) {\n ids.push(run.runId);\n }\n }\n return ids.sort((a, b) => a.localeCompare(b));\n}\n\nfunction findSession(index: SessionIndex, sessionId: string) {\n return index.sessions.find((session) => session.sessionId === sessionId);\n}\n\n/**\n * Resolves which run ids belong in a bundle.\n *\n * @throws when target mode is missing, ambiguous, or yields zero runs.\n */\nexport function resolveBundleRunIds(\n index: SessionIndex,\n runs: readonly SessionRunRecord[],\n options: BundleResolveOptions,\n): BundleResolveResult {\n const runId = options.runId?.trim();\n const sessionId = options.sessionId?.trim();\n const since = options.since?.trim();\n\n const modes = [runId ? 1 : 0, sessionId ? 1 : 0, since ? 1 : 0].reduce((a, b) => a + b, 0);\n if (modes === 0) {\n throw new Error(\n \"bundle requires a run id, --session <sessionId>, or --since <duration>.\",\n );\n }\n if (modes > 1) {\n throw new Error(\n \"bundle accepts only one target: a run id, --session, or --since (not combined).\",\n );\n }\n\n if (runId) {\n const known = runs.some((run) => run.runId === runId);\n if (!known) {\n throw new Error(`Run \"${runId}\" was not found in the trace directory.`);\n }\n return { runIds: [runId] };\n }\n\n if (sessionId) {\n const session = findSession(index, sessionId);\n if (!session) {\n throw new Error(`Session \"${sessionId}\" was not found.`);\n }\n if (session.runIds.length === 0) {\n throw new Error(`Session \"${sessionId}\" has no runs to bundle.`);\n }\n return {\n runIds: [...session.runIds].sort((a, b) => a.localeCompare(b)),\n sessionId,\n };\n }\n\n const runIds = runsInSinceWindow(runs, since!);\n if (runIds.length === 0) {\n throw new Error(`No runs matched --since ${since}.`);\n }\n return { runIds, since };\n}\n","import type { BundleSafeStatus, BundleSafeStatusMetadata } from \"./types.js\";\n\nexport function aggregateBundleSafeStatus(statuses: readonly BundleSafeStatus[]): BundleSafeStatus {\n if (statuses.length === 0) return \"UNKNOWN\";\n if (statuses.some((status) => status === \"UNSAFE\")) return \"UNSAFE\";\n if (statuses.some((status) => status === \"UNKNOWN\")) return \"UNKNOWN\";\n if (statuses.some((status) => status === \"SAFE WITH WARNINGS\")) return \"SAFE WITH WARNINGS\";\n return \"SAFE\";\n}\n\nexport function toMetadataSafeStatus(status: BundleSafeStatus): BundleSafeStatusMetadata {\n if (status === \"SAFE WITH WARNINGS\") return \"SAFE_WITH_WARNINGS\";\n return status;\n}\n\nexport function bundleFailsOnSafety(\n status: BundleSafeStatus,\n allowUnsafe: boolean,\n): boolean {\n if (allowUnsafe) return false;\n return status === \"UNSAFE\" || status === \"UNKNOWN\";\n}\n","import { aggregateBundleSafeStatus, toMetadataSafeStatus } from \"./safety-status.js\";\nimport type {\n BundleCheckResults,\n BundleMetadata,\n BundlePlaceholderArtifact,\n BundleRedactionProfile,\n BundleResolveResult,\n} from \"./types.js\";\n\nconst BUNDLE_NOTE =\n \"Generated locally by AgentInspect. Bundles are derived copies for review — not compliance or security certification. Review before sharing.\";\n\nconst PLACEHOLDER_NOTE =\n \"No eval or performance artifacts were requested for this bundle.\";\n\nexport function buildBundleMetadata(parts: {\n agentInspectVersion: string;\n profile: BundleRedactionProfile;\n resolve: BundleResolveResult;\n checks: BundleCheckResults;\n files: string[];\n createdAt?: string;\n}): BundleMetadata {\n const aggregate = aggregateBundleSafeStatus(\n parts.checks.runs.map((run) => run.status),\n );\n return {\n createdAt: parts.createdAt ?? new Date().toISOString(),\n agentInspectVersion: parts.agentInspectVersion,\n redactionProfile: parts.profile,\n sourceTraceCount: parts.resolve.runIds.length,\n runIds: [...parts.resolve.runIds],\n safeStatus: toMetadataSafeStatus(aggregate),\n files: [...parts.files].sort((a, b) => a.localeCompare(b)),\n note: BUNDLE_NOTE,\n ...(parts.resolve.sessionId !== undefined ? { sessionId: parts.resolve.sessionId } : {}),\n ...(parts.resolve.since !== undefined ? { since: parts.resolve.since } : {}),\n };\n}\n\nexport function buildPlaceholderArtifact(): BundlePlaceholderArtifact {\n return {\n status: \"not_requested\",\n note: PLACEHOLDER_NOTE,\n };\n}\n","import type { BundleCheckResults, BundleMetadata, BundleRedactionReport } from \"./types.js\";\n\nfunction markdownTable(rows: readonly [string, string | number | undefined][]): string {\n const lines = [\"| Field | Value |\", \"| --- | --- |\"];\n for (const [key, value] of rows) {\n lines.push(`| ${key} | ${value ?? \"unknown\"} |`);\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Builds a human-readable bundle summary for `summary.md`.\n */\nexport function buildBundleSummaryMarkdown(parts: {\n metadata: BundleMetadata;\n checks: BundleCheckResults;\n redaction: BundleRedactionReport;\n}): string {\n const { metadata, checks, redaction } = parts;\n const lines: string[] = [\n \"# AgentInspect trace bundle\",\n \"\",\n metadata.note,\n \"\",\n \"## Overview\",\n \"\",\n markdownTable([\n [\"Created\", metadata.createdAt],\n [\"AgentInspect\", metadata.agentInspectVersion],\n [\"Redaction profile\", metadata.redactionProfile],\n [\"Safe status\", metadata.safeStatus],\n [\"Source traces\", metadata.sourceTraceCount],\n [\"Runs\", metadata.runIds.join(\", \")],\n ...(metadata.sessionId ? [[\"Session\", metadata.sessionId] as [string, string]] : []),\n ...(metadata.since ? [[\"Since\", metadata.since] as [string, string]] : []),\n ]),\n \"\",\n \"## Safety checks\",\n \"\",\n `Aggregate: **${checks.aggregateStatus}**`,\n \"\",\n ];\n\n for (const run of checks.runs) {\n const source =\n run.sourceStatus !== undefined && run.sourceStatus !== run.status\n ? `; source ${run.sourceStatus}`\n : \"\";\n lines.push(\n `- \\`${run.runId}\\`: artifact ${run.status}${source} (${run.findings} finding(s), ${run.errors} error(s), ${run.warnings} warning(s))`,\n );\n }\n\n lines.push(\"\", \"## Redaction\", \"\", `Total findings: ${redaction.totalFindings}`, \"\");\n for (const run of redaction.runs) {\n const detectors = run.detectors.length > 0 ? run.detectors.join(\", \") : \"none\";\n lines.push(`- \\`${run.runId}\\`: ${run.findings} finding(s); detectors: ${detectors}`);\n }\n\n lines.push(\n \"\",\n \"## Files\",\n \"\",\n ...metadata.files.map((file) => `- \\`${file}\\``),\n \"\",\n \"_Review every generated artifact before sharing outside your team._\",\n \"\",\n );\n\n return lines.join(\"\\n\");\n}\n","import path from \"node:path\";\n\n/**\n * Sanitizes a run id for bundle directory and asset filenames.\n * Strips path segments and replaces unsafe characters.\n */\nexport function sanitizeBundleRunId(runId: string): string {\n let safe =\n typeof runId === \"string\" && runId.trim() !== \"\" ? runId.trim() : \"run_unknown\";\n safe = path.basename(safe);\n safe = safe.replace(/[^a-zA-Z0-9._-]+/g, \"_\");\n if (safe === \"\" || safe === \".\" || safe === \"..\") {\n safe = \"run_unknown\";\n }\n return safe;\n}\n\n/**\n * Relative POSIX path for a run asset inside a bundle directory.\n */\nexport function bundleRunAssetRelativePath(runId: string, extension: string): string {\n const safe = sanitizeBundleRunId(runId);\n const ext = extension.startsWith(\".\") ? extension : `.${extension}`;\n return path.posix.join(\"assets\", \"runs\", `${safe}${ext}`);\n}\n\n/**\n * Ensures a relative bundle path resolves inside the output directory.\n */\nexport function assertBundlePathContained(\n outputDir: string,\n relativePath: string,\n): string {\n const base = path.resolve(outputDir);\n const resolved = path.resolve(base, relativePath);\n if (resolved !== base && !resolved.startsWith(base + path.sep)) {\n throw new Error(`Bundle path escapes output directory: ${relativePath}`);\n }\n return resolved;\n}\n\n/**\n * Normalizes bundle output path.\n * For directory/html modes, strips a trailing `.zip` suffix (folder-first).\n * Pass `preserveZipExtension: true` for `--format zip`.\n */\nexport function normalizeBundleOutputPath(\n out: string,\n options?: { preserveZipExtension?: boolean },\n): string {\n const trimmed = out.trim();\n if (trimmed === \"\") {\n throw new Error(\"--out requires a non-empty path.\");\n }\n const resolved = path.resolve(trimmed);\n if (\n options?.preserveZipExtension !== true &&\n resolved.toLowerCase().endsWith(\".zip\")\n ) {\n return resolved.slice(0, -4);\n }\n return resolved;\n}\n\n/**\n * Default bundle directory when --out is omitted.\n */\nexport function defaultBundleOutputPath(runIds: readonly string[]): string {\n const label =\n runIds.length === 1 ? sanitizeBundleRunId(runIds[0]!) : `multi-${runIds.length}`;\n const stamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n return path.resolve(`agent-inspect-bundle-${label}-${stamp}`);\n}\n","/** Portable Evidence v2 (`evidenceFormatVersion`) — independent of trace schema. */\n\nexport type EvidenceFormatVersion = \"1.0\";\n\nexport type EvidenceSafeStatus = \"SAFE\" | \"SAFE WITH WARNINGS\" | \"UNSAFE\" | \"UNKNOWN\";\n\nexport type EvidenceRedactionProfile = \"local\" | \"share\" | \"strict\";\n\nexport type EvidenceVerificationPolicy = \"development\" | \"local\" | \"share\" | \"strict\";\n\nexport type EvidenceFileRole =\n | \"report\"\n | \"redacted-trace\"\n | \"checks\"\n | \"redaction-report\"\n | \"summary\"\n | \"other\";\n\nexport interface EvidenceSourceHash {\n runId: string;\n algorithm: \"sha256\";\n hash: string;\n}\n\nexport interface EvidenceFileEntry {\n path: string;\n sha256: string;\n role?: EvidenceFileRole;\n}\n\nexport interface EvidenceManifest {\n evidenceFormatVersion: EvidenceFormatVersion;\n generator: {\n name: string;\n version: string;\n };\n createdAt?: string;\n source: {\n runIds: string[];\n traceSchemaVersions: string[];\n sourceHashes: EvidenceSourceHash[];\n };\n policy: {\n redactionProfile: EvidenceRedactionProfile;\n verificationPolicy: EvidenceVerificationPolicy;\n };\n assessment: {\n status: EvidenceSafeStatus;\n sourceStatus?: EvidenceSafeStatus;\n note?: string;\n };\n /**\n * Optional TraceFacts / logical-projection summary (6.14+).\n * Additive; older readers ignore unknown fields.\n */\n semantics?: EvidenceSemantics;\n files: EvidenceFileEntry[];\n}\n\n/**\n * Bounded semantic summary embedded in Evidence v2 (mirrors check parity summary).\n * Does not embed raw events or prompts.\n */\nexport interface EvidenceSemantics {\n projectionVersion?: string;\n rawEventCount?: number;\n logicalEventCount?: number;\n runningLogicalCount?: number;\n finishedToolCount?: number;\n finishedToolNames?: string[];\n pairedCount?: number;\n parentRemapCount?: number;\n contractStatus?: \"pass\" | \"fail\" | \"error\";\n /**\n * Bounded derived failure role counts (6.19+). IDs and error bodies omitted.\n *\n * @experimental\n */\n failureRoleCounts?: {\n transient: number;\n recovered: number;\n terminal: number;\n unknown: number;\n };\n}\n\nexport interface EvidencePackagedFile {\n /** Relative POSIX path inside the evidence/bundle directory. */\n path: string;\n /** Exact bytes that will be / were written. */\n content: string | Uint8Array;\n role?: EvidenceFileRole;\n}\n\nexport const EVIDENCE_FORMAT_VERSION: EvidenceFormatVersion = \"1.0\";\n\nexport const EVIDENCE_ASSESSMENT_NOTE =\n \"Best-effort local safety verification only; not a compliance certification.\";\n\nexport const EVIDENCE_MANIFEST_FILENAME = \"evidence.json\";\n","import { createHash } from \"node:crypto\";\n\nconst SHA256_RE = /^[a-f0-9]{64}$/i;\n\n/**\n * SHA-256 hex digest of exact bytes (UTF-8 when `data` is a string).\n */\nexport function sha256Hex(data: string | Uint8Array): string {\n const hash = createHash(\"sha256\");\n if (typeof data === \"string\") {\n hash.update(data, \"utf8\");\n } else {\n hash.update(data);\n }\n return hash.digest(\"hex\");\n}\n\nexport function isSha256Hex(value: string): boolean {\n return SHA256_RE.test(value);\n}\n\n/**\n * Constant-time-ish equality for hex digests (length-checked; not for secrets).\n */\nexport function sha256Equals(expected: string, actual: string): boolean {\n if (!isSha256Hex(expected) || !isSha256Hex(actual)) {\n return false;\n }\n const a = expected.toLowerCase();\n const b = actual.toLowerCase();\n if (a.length !== b.length) return false;\n let mismatch = 0;\n for (let i = 0; i < a.length; i += 1) {\n mismatch |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n return mismatch === 0;\n}\n","import path from \"node:path\";\n\n/**\n * Validates a relative evidence/bundle path: no absolute paths, no `..`, POSIX separators.\n * Returns the normalized POSIX relative path.\n */\nexport function assertEvidenceRelativePath(relativePath: string): string {\n if (typeof relativePath !== \"string\" || relativePath.trim() === \"\") {\n throw new Error(\"Evidence file path must be a non-empty relative path.\");\n }\n const trimmed = relativePath.trim().replaceAll(\"\\\\\", \"/\");\n if (path.isAbsolute(trimmed) || trimmed.startsWith(\"/\")) {\n throw new Error(`Evidence file path must be relative: ${relativePath}`);\n }\n const parts = trimmed.split(\"/\").filter((part) => part !== \"\");\n if (parts.length === 0) {\n throw new Error(`Evidence file path must be relative: ${relativePath}`);\n }\n for (const part of parts) {\n if (part === \".\" || part === \"..\") {\n throw new Error(`Evidence file path must not contain \".\" or \"..\": ${relativePath}`);\n }\n }\n return parts.join(\"/\");\n}\n","import { sha256Hex } from \"./hash.js\";\nimport { assertEvidenceRelativePath } from \"./paths.js\";\nimport {\n EVIDENCE_ASSESSMENT_NOTE,\n EVIDENCE_FORMAT_VERSION,\n EVIDENCE_MANIFEST_FILENAME,\n type EvidenceFileEntry,\n type EvidenceFileRole,\n type EvidenceManifest,\n type EvidencePackagedFile,\n type EvidenceRedactionProfile,\n type EvidenceSafeStatus,\n type EvidenceSourceHash,\n type EvidenceVerificationPolicy,\n} from \"./types.js\";\n\nfunction stable(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stable);\n if (value === null || typeof value !== \"object\") return value;\n const record = value as Record<string, unknown>;\n return Object.fromEntries(\n Object.keys(record)\n .sort((a, b) => a.localeCompare(b))\n .map((key) => [key, stable(record[key])]),\n );\n}\n\n/**\n * Deterministic JSON serialization used for evidence manifests (trailing newline).\n */\nexport function serializeEvidenceManifest(manifest: EvidenceManifest): string {\n return `${JSON.stringify(stable(manifest), null, 2)}\\n`;\n}\n\nexport function inferEvidenceFileRole(relativePath: string): EvidenceFileRole {\n const normalized = assertEvidenceRelativePath(relativePath);\n const base = normalized.includes(\"/\")\n ? normalized.slice(normalized.lastIndexOf(\"/\") + 1)\n : normalized;\n if (base === \"evidence.html\" || base === \"trace.html\" || base.endsWith(\".html\")) {\n return \"report\";\n }\n if (base === \"trace.jsonl\" || base.endsWith(\".jsonl\")) {\n return \"redacted-trace\";\n }\n if (base === \"check-results.json\") {\n return \"checks\";\n }\n if (base === \"redaction-report.json\") {\n return \"redaction-report\";\n }\n if (base === \"summary.md\") {\n return \"summary\";\n }\n return \"other\";\n}\n\n/**\n * Hash packaged file bytes into Evidence `files[]` entries (sorted by path).\n * Rejects `evidence.json` itself (manifest is not self-hashed).\n */\nexport function buildEvidenceFileEntries(\n files: readonly EvidencePackagedFile[],\n): EvidenceFileEntry[] {\n const byPath = new Map<string, EvidenceFileEntry>();\n for (const file of files) {\n const relativePath = assertEvidenceRelativePath(file.path);\n if (relativePath === EVIDENCE_MANIFEST_FILENAME) {\n throw new Error(\n `Do not include ${EVIDENCE_MANIFEST_FILENAME} in packaged file hashes (self-hash is undefined).`,\n );\n }\n if (byPath.has(relativePath)) {\n throw new Error(`Duplicate evidence file path: ${relativePath}`);\n }\n byPath.set(relativePath, {\n path: relativePath,\n sha256: sha256Hex(file.content),\n role: file.role ?? inferEvidenceFileRole(relativePath),\n });\n }\n return [...byPath.values()].sort((a, b) => a.path.localeCompare(b.path));\n}\n\nexport function buildEvidenceManifest(parts: {\n generatorVersion: string;\n generatorName?: string;\n runIds: readonly string[];\n traceSchemaVersions: readonly string[];\n sourceHashes: readonly EvidenceSourceHash[];\n redactionProfile: EvidenceRedactionProfile;\n verificationPolicy?: EvidenceVerificationPolicy;\n assessmentStatus: EvidenceSafeStatus;\n sourceStatus?: EvidenceSafeStatus;\n files: readonly EvidencePackagedFile[];\n createdAt?: string;\n note?: string;\n semantics?: EvidenceManifest[\"semantics\"];\n}): EvidenceManifest {\n const runIds = [...parts.runIds];\n if (runIds.length === 0) {\n throw new Error(\"Evidence manifest requires at least one run id.\");\n }\n for (const item of parts.sourceHashes) {\n if (!runIds.includes(item.runId)) {\n throw new Error(`sourceHashes runId \"${item.runId}\" is not listed in source.runIds.`);\n }\n if (item.algorithm !== \"sha256\") {\n throw new Error(`Unsupported source hash algorithm: ${item.algorithm}`);\n }\n }\n\n const assessment: EvidenceManifest[\"assessment\"] = {\n status: parts.assessmentStatus,\n note: parts.note ?? EVIDENCE_ASSESSMENT_NOTE,\n };\n if (parts.sourceStatus !== undefined) {\n assessment.sourceStatus = parts.sourceStatus;\n }\n\n return {\n evidenceFormatVersion: EVIDENCE_FORMAT_VERSION,\n generator: {\n name: parts.generatorName ?? \"agent-inspect\",\n version: parts.generatorVersion,\n },\n createdAt: parts.createdAt ?? new Date().toISOString(),\n source: {\n runIds,\n traceSchemaVersions: [...parts.traceSchemaVersions].sort((a, b) => a.localeCompare(b)),\n sourceHashes: [...parts.sourceHashes].sort((a, b) => a.runId.localeCompare(b.runId)),\n },\n policy: {\n redactionProfile: parts.redactionProfile,\n verificationPolicy: parts.verificationPolicy ?? parts.redactionProfile,\n },\n assessment,\n ...(parts.semantics !== undefined ? { semantics: { ...parts.semantics } } : {}),\n files: buildEvidenceFileEntries(parts.files),\n };\n}\n\n/**\n * Minimal structural validation for a parsed evidence manifest object.\n * Unknown fields are preserved by returning the cast value after checks.\n */\nexport function validateEvidenceManifest(value: unknown): EvidenceManifest {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"Evidence manifest must be a JSON object.\");\n }\n const record = value as Record<string, unknown>;\n if (record.evidenceFormatVersion !== EVIDENCE_FORMAT_VERSION) {\n throw new Error(\n `Unsupported evidenceFormatVersion: ${String(record.evidenceFormatVersion)}`,\n );\n }\n const generator = record.generator;\n if (\n generator === null ||\n typeof generator !== \"object\" ||\n Array.isArray(generator) ||\n typeof (generator as { name?: unknown }).name !== \"string\" ||\n typeof (generator as { version?: unknown }).version !== \"string\"\n ) {\n throw new Error(\"Evidence manifest requires generator.name and generator.version.\");\n }\n const source = record.source;\n if (source === null || typeof source !== \"object\" || Array.isArray(source)) {\n throw new Error(\"Evidence manifest requires source.\");\n }\n const sourceRecord = source as {\n runIds?: unknown;\n traceSchemaVersions?: unknown;\n sourceHashes?: unknown;\n };\n if (!Array.isArray(sourceRecord.runIds) || sourceRecord.runIds.length === 0) {\n throw new Error(\"Evidence manifest source.runIds must be a non-empty array.\");\n }\n if (!Array.isArray(sourceRecord.traceSchemaVersions)) {\n throw new Error(\"Evidence manifest source.traceSchemaVersions must be an array.\");\n }\n if (!Array.isArray(sourceRecord.sourceHashes)) {\n throw new Error(\"Evidence manifest source.sourceHashes must be an array.\");\n }\n const policy = record.policy;\n if (policy === null || typeof policy !== \"object\" || Array.isArray(policy)) {\n throw new Error(\"Evidence manifest requires policy.\");\n }\n const assessment = record.assessment;\n if (\n assessment === null ||\n typeof assessment !== \"object\" ||\n Array.isArray(assessment) ||\n typeof (assessment as { status?: unknown }).status !== \"string\"\n ) {\n throw new Error(\"Evidence manifest requires assessment.status.\");\n }\n if (!Array.isArray(record.files) || record.files.length === 0) {\n throw new Error(\"Evidence manifest files must be a non-empty array.\");\n }\n for (const file of record.files) {\n if (file === null || typeof file !== \"object\" || Array.isArray(file)) {\n throw new Error(\"Evidence manifest file entries must be objects.\");\n }\n const entry = file as { path?: unknown; sha256?: unknown };\n if (typeof entry.path !== \"string\") {\n throw new Error(\"Evidence file entry requires path.\");\n }\n assertEvidenceRelativePath(entry.path);\n if (typeof entry.sha256 !== \"string\" || !/^[a-f0-9]{64}$/i.test(entry.sha256)) {\n throw new Error(`Evidence file entry requires sha256 hex for ${entry.path}.`);\n }\n }\n return value as EvidenceManifest;\n}\n\nexport function parseEvidenceManifestJson(text: string): EvidenceManifest {\n let parsed: unknown;\n try {\n parsed = JSON.parse(text) as unknown;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Evidence manifest is not valid JSON: ${message}`);\n }\n return validateEvidenceManifest(parsed);\n}\n\n/**\n * Collect unique `schemaVersion` values from agent-inspect JSONL text.\n */\nexport function collectTraceSchemaVersions(jsonl: string): string[] {\n const versions = new Set<string>();\n for (const line of jsonl.split(/\\r?\\n/)) {\n const trimmed = line.trim();\n if (trimmed === \"\") continue;\n try {\n const row = JSON.parse(trimmed) as { schemaVersion?: unknown };\n if (typeof row.schemaVersion === \"string\" && row.schemaVersion.trim() !== \"\") {\n versions.add(row.schemaVersion.trim());\n }\n } catch {\n // skip malformed lines — hashing still covers the raw bytes separately\n }\n }\n return [...versions].sort((a, b) => a.localeCompare(b));\n}\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport { escapeHtml, flattenTree } from \"../exporters/helpers.js\";\n\nfunction renderTreeHtml(nodes: InspectNode[], ulClass = \"tree\"): string {\n if (nodes.length === 0) return \"\";\n const parts: string[] = [`<ul class=\"${ulClass}\">`];\n for (const n of nodes) {\n const ev = n.event;\n const status = ev.status ?? \"?\";\n const dur =\n ev.durationMs !== undefined && Number.isFinite(ev.durationMs)\n ? `${ev.durationMs}ms`\n : \"-\";\n const errClass = ev.status === \"error\" ? \" is-error\" : \"\";\n parts.push(`<li class=\"tree-node${errClass}\">`);\n parts.push(\n `<span class=\"nm\">${escapeHtml(ev.name)}</span> <span class=\"meta\">[${escapeHtml(ev.kind)}] ${escapeHtml(status)} (${escapeHtml(dur)})</span>`,\n );\n if (n.children.length > 0) {\n parts.push(renderTreeHtml(n.children, \"tree nested\"));\n }\n parts.push(\"</li>\");\n }\n parts.push(\"</ul>\");\n return parts.join(\"\");\n}\n\n/**\n * Execution-tree HTML fragment for the Evidence Tree view (already escaped).\n */\nexport function buildEvidenceTreeViewHtml(trees: readonly InspectRunTree[]): string {\n if (trees.length === 0) {\n return `<p class=\"muted\">No execution trees available.</p>`;\n }\n const parts: string[] = [];\n for (const tree of trees) {\n parts.push(`<article class=\"run-block\">`);\n parts.push(`<h3><code>${escapeHtml(tree.runId)}</code></h3>`);\n if (tree.name) {\n parts.push(`<p class=\"muted\">Name: ${escapeHtml(tree.name)}</p>`);\n }\n parts.push(\n `<p>Status: <strong>${escapeHtml(String(tree.status ?? \"unknown\"))}</strong>${\n tree.durationMs !== undefined ? ` · ${escapeHtml(String(tree.durationMs))}ms` : \"\"\n }</p>`,\n );\n parts.push(\n tree.children.length > 0\n ? renderTreeHtml(tree.children)\n : `<p class=\"muted\">No steps recorded.</p>`,\n );\n parts.push(`</article>`);\n }\n return parts.join(\"\\n\");\n}\n\nfunction timelineRows(tree: InspectRunTree): {\n name: string;\n kind: string;\n status: string;\n offsetMs: number;\n durationMs: number;\n isError: boolean;\n}[] {\n const flat = flattenTree(tree);\n const origin =\n tree.startedAt ??\n flat.reduce<number | undefined>((min, n) => {\n const t = n.event.timestamp;\n if (!Number.isFinite(t)) return min;\n return min === undefined ? t : Math.min(min, t);\n }, undefined) ??\n 0;\n return flat\n .filter((n) => n.event.kind !== \"RUN\")\n .map((n) => {\n const started = Number.isFinite(n.event.timestamp) ? n.event.timestamp : origin;\n const durationMs =\n n.event.durationMs !== undefined && Number.isFinite(n.event.durationMs)\n ? Math.max(0, n.event.durationMs)\n : 0;\n return {\n name: n.event.name,\n kind: n.event.kind,\n status: n.event.status ?? \"?\",\n offsetMs: Math.max(0, started - origin),\n durationMs,\n isError: n.event.status === \"error\",\n };\n })\n .sort((a, b) => a.offsetMs - b.offsetMs || a.name.localeCompare(b.name));\n}\n\n/**\n * Timeline / waterfall HTML fragment (escaped; no external assets).\n */\nexport function buildEvidenceTimelineViewHtml(trees: readonly InspectRunTree[]): string {\n if (trees.length === 0) {\n return `<p class=\"muted\">No timeline data available.</p>`;\n }\n const parts: string[] = [];\n for (const tree of trees) {\n const rows = timelineRows(tree);\n const maxEnd = rows.reduce(\n (max, row) => Math.max(max, row.offsetMs + Math.max(row.durationMs, 1)),\n 1,\n );\n parts.push(`<article class=\"run-block\">`);\n parts.push(`<h3><code>${escapeHtml(tree.runId)}</code></h3>`);\n if (rows.length === 0) {\n parts.push(`<p class=\"muted\">No step timings recorded.</p>`);\n } else {\n parts.push(`<div class=\"waterfall\" role=\"list\">`);\n for (const row of rows) {\n const left = (row.offsetMs / maxEnd) * 100;\n const width = Math.max(0.8, (Math.max(row.durationMs, 1) / maxEnd) * 100);\n const err = row.isError ? \" is-error\" : \"\";\n parts.push(\n `<div class=\"wf-row${err}\" role=\"listitem\"><div class=\"wf-label\"><span class=\"nm\">${escapeHtml(row.name)}</span> <span class=\"meta\">[${escapeHtml(row.kind)}] ${escapeHtml(row.status)} · ${escapeHtml(String(row.durationMs))}ms @+${escapeHtml(String(row.offsetMs))}ms</span></div><div class=\"wf-track\"><span class=\"wf-bar\" style=\"left:${left.toFixed(2)}%;width:${width.toFixed(2)}%\"></span></div></div>`,\n );\n }\n parts.push(`</div>`);\n }\n parts.push(`</article>`);\n }\n return parts.join(\"\\n\");\n}\n\nfunction findNodeByEventId(nodes: InspectNode[], eventId: string): InspectNode | undefined {\n for (const node of nodes) {\n if (node.event.eventId === eventId) return node;\n const child = findNodeByEventId(node.children, eventId);\n if (child) return child;\n }\n return undefined;\n}\n\nfunction buildAncestorChain(tree: InspectRunTree, failure: InspectNode): InspectNode[] {\n const chain: InspectNode[] = [failure];\n let parentId = failure.event.parentId;\n const guard = new Set<string>([failure.event.eventId]);\n while (parentId && !guard.has(parentId)) {\n guard.add(parentId);\n const parent = findNodeByEventId(tree.children, parentId);\n if (!parent) break;\n chain.unshift(parent);\n parentId = parent.event.parentId;\n }\n return chain;\n}\n\n/**\n * First causal failure view: earliest error by timestamp, with parent chain.\n * Does not invent relationships; if no parentId chain exists, shows the error alone.\n */\nexport function buildEvidenceCausalFailureViewHtml(\n trees: readonly InspectRunTree[],\n): string {\n if (trees.length === 0) {\n return `<p class=\"muted\">No runs available for causal analysis.</p>`;\n }\n const parts: string[] = [];\n for (const tree of trees) {\n parts.push(`<article class=\"run-block\">`);\n parts.push(`<h3><code>${escapeHtml(tree.runId)}</code></h3>`);\n const errors = flattenTree(tree)\n .filter((n) => n.event.status === \"error\" || n.event.kind === \"ERROR\")\n .sort((a, b) => a.event.timestamp - b.event.timestamp);\n if (errors.length === 0) {\n parts.push(\n `<p class=\"muted\">No error-status events found. Run status: <strong>${escapeHtml(String(tree.status ?? \"unknown\"))}</strong>.</p>`,\n );\n parts.push(`</article>`);\n continue;\n }\n const first = errors[0]!;\n const chain = buildAncestorChain(tree, first);\n parts.push(`<p>First error by timestamp:</p>`);\n parts.push(`<ol class=\"causal-chain\">`);\n for (const node of chain) {\n const isTip = node.event.eventId === first.event.eventId;\n const msg =\n typeof node.event.attributes?.message === \"string\"\n ? node.event.attributes.message\n : typeof node.event.attributes?.error === \"string\"\n ? node.event.attributes.error\n : undefined;\n parts.push(\n `<li class=\"${isTip ? \"causal-tip\" : \"\"}\"><span class=\"nm\">${escapeHtml(node.event.name)}</span> <span class=\"meta\">[${escapeHtml(node.event.kind)}] ${escapeHtml(node.event.status ?? \"?\")} · ${escapeHtml(node.event.eventId)}</span>${\n msg ? `<div class=\"causal-msg\">${escapeHtml(msg.slice(0, 400))}</div>` : \"\"\n }</li>`,\n );\n }\n parts.push(`</ol>`);\n if (errors.length > 1) {\n parts.push(\n `<p class=\"muted\">${escapeHtml(String(errors.length - 1))} additional error event(s) not shown in the primary chain.</p>`,\n );\n }\n parts.push(`</article>`);\n }\n return parts.join(\"\\n\");\n}\n\n/** Extra CSS for tree / timeline / causal panels (inlined into evidence shell). */\nexport const EVIDENCE_VIEW_CSS = `\nul.tree{list-style:none;padding-left:1rem;margin:.5rem 0}\nul.tree.nested{padding-left:1.25rem;border-left:1px solid var(--line);margin:.25rem 0}\n.tree-node.is-error .nm,.wf-row.is-error .nm,.causal-tip .nm{color:var(--unsafe)}\n.waterfall{display:flex;flex-direction:column;gap:.45rem;max-width:52rem}\n.wf-row{display:grid;grid-template-columns:minmax(10rem,18rem) 1fr;gap:.6rem;align-items:center}\n.wf-track{position:relative;height:.7rem;background:#e8e8e4;border-radius:.25rem;overflow:hidden}\n.wf-bar{position:absolute;top:0;bottom:0;background:var(--accent);border-radius:.25rem}\n.wf-row.is-error .wf-bar{background:var(--unsafe)}\n.causal-chain{max-width:44rem}\n.causal-msg{margin:.25rem 0 0;color:var(--muted);font-size:.92rem}\n.run-block{margin:0 0 1.25rem;padding-bottom:1rem;border-bottom:1px solid var(--line)}\n.run-block:last-child{border-bottom:0}\n@media (max-width:720px){\n .wf-row{grid-template-columns:1fr}\n}\n`.trim();\n","import { escapeHtml } from \"../exporters/helpers.js\";\n\nimport { EVIDENCE_VIEW_CSS } from \"./views.js\";\nimport type { EvidenceManifest, EvidenceSafeStatus } from \"./types.js\";\n\nexport const EVIDENCE_HTML_FILENAME = \"evidence.html\";\n\nconst EVIDENCE_HTML_NOTE =\n \"Generated locally by AgentInspect. Share-checked evidence for review — not a compliance or security certification.\";\n\n/** View ids reserved for later 6.10 chunks; shell renders stubs except summary. */\nexport const EVIDENCE_VIEW_IDS = [\n \"summary\",\n \"tree\",\n \"timeline\",\n \"causal\",\n \"tools-llm\",\n \"outcomes\",\n \"contracts\",\n \"circuit\",\n \"diff\",\n \"safety\",\n \"provenance\",\n] as const;\n\nexport type EvidenceViewId = (typeof EVIDENCE_VIEW_IDS)[number];\n\nexport interface EvidenceHtmlShellInput {\n title?: string;\n runIds: readonly string[];\n assessmentStatus: EvidenceSafeStatus;\n sourceStatus?: EvidenceSafeStatus;\n redactionProfile: string;\n verificationPolicy: string;\n generatorName: string;\n generatorVersion: string;\n createdAt?: string;\n evidenceFormatVersion?: string;\n /** Optional short summary markdown already safe for display (will be escaped). */\n summaryText?: string;\n /** Bounded check counts (no finding payloads / prompts). */\n checkSummary?: {\n aggregateStatus: EvidenceSafeStatus;\n runs: readonly {\n runId: string;\n status: EvidenceSafeStatus;\n sourceStatus?: EvidenceSafeStatus;\n errors: number;\n warnings: number;\n findings: number;\n }[];\n };\n /** Max chars for embedded JSON payload (default 64 KiB). */\n maxEmbeddedJsonChars?: number;\n /**\n * Pre-escaped HTML bodies for views. Missing ids keep the stub panel.\n * Callers must pass only trusted, escaped fragments (use evidence view builders).\n */\n viewBodies?: Partial<Record<EvidenceViewId, string>>;\n}\n\nfunction statusClass(status: string): string {\n if (status === \"SAFE\") return \"st-safe\";\n if (status === \"SAFE WITH WARNINGS\") return \"st-warn\";\n if (status === \"UNSAFE\") return \"st-unsafe\";\n return \"st-unknown\";\n}\n\nfunction viewLabel(id: EvidenceViewId): string {\n switch (id) {\n case \"summary\":\n return \"Summary\";\n case \"tree\":\n return \"Tree\";\n case \"timeline\":\n return \"Timeline\";\n case \"causal\":\n return \"Causal failure\";\n case \"tools-llm\":\n return \"Tools / LLM\";\n case \"outcomes\":\n return \"Outcomes\";\n case \"contracts\":\n return \"Contracts / checks\";\n case \"circuit\":\n return \"Circuit / guardrails\";\n case \"diff\":\n return \"Diff\";\n case \"safety\":\n return \"Safety / redaction\";\n case \"provenance\":\n return \"Provenance\";\n default: {\n const _exhaustive: never = id;\n return _exhaustive;\n }\n }\n}\n\n/**\n * Encode JSON for embedding in HTML without breaking out of a script/pre context.\n * Escapes `<` so `</script>` cannot appear in payload text.\n */\nexport function encodeEmbeddedEvidenceJson(value: unknown): string {\n return JSON.stringify(value).replace(/</g, \"\\\\u003c\").replace(/>/g, \"\\\\u003e\");\n}\n\nfunction buildEmbeddedPayload(input: EvidenceHtmlShellInput): Record<string, unknown> {\n return {\n evidenceFormatVersion: input.evidenceFormatVersion ?? \"1.0\",\n generator: {\n name: input.generatorName,\n version: input.generatorVersion,\n },\n createdAt: input.createdAt,\n runIds: [...input.runIds],\n assessment: {\n status: input.assessmentStatus,\n ...(input.sourceStatus !== undefined ? { sourceStatus: input.sourceStatus } : {}),\n },\n policy: {\n redactionProfile: input.redactionProfile,\n verificationPolicy: input.verificationPolicy,\n },\n checkSummary: input.checkSummary,\n };\n}\n\n/**\n * Build a self-contained offline `evidence.html` shell (no external assets/network).\n * View panels beyond Summary are stubs filled in later 6.10 chunks.\n */\nexport function buildEvidenceHtmlShell(input: EvidenceHtmlShellInput): string {\n if (input.runIds.length === 0) {\n throw new Error(\"Evidence HTML shell requires at least one run id.\");\n }\n\n const maxChars = input.maxEmbeddedJsonChars ?? 64 * 1024;\n let embedded = encodeEmbeddedEvidenceJson(buildEmbeddedPayload(input));\n if (embedded.length > maxChars) {\n embedded = encodeEmbeddedEvidenceJson({\n truncated: true,\n evidenceFormatVersion: input.evidenceFormatVersion ?? \"1.0\",\n runIds: [...input.runIds],\n assessment: { status: input.assessmentStatus },\n note: \"Embedded payload truncated to bound; open evidence.json / trace files for full detail.\",\n });\n }\n\n const title = escapeHtml(input.title ?? \"AgentInspect evidence\");\n const runList = input.runIds\n .map((id) => `<li><code>${escapeHtml(id)}</code></li>`)\n .join(\"\");\n const summaryBody =\n input.summaryText !== undefined && input.summaryText.trim() !== \"\"\n ? `<pre class=\"summary-md\">${escapeHtml(input.summaryText)}</pre>`\n : `<p class=\"muted\">Open <code>summary.md</code> in this bundle for the full text summary.</p>`;\n\n const checkRows =\n input.checkSummary?.runs\n .map(\n (run) =>\n `<tr><td><code>${escapeHtml(run.runId)}</code></td><td class=\"${statusClass(run.status)}\">${escapeHtml(run.status)}</td><td>${run.errors}</td><td>${run.warnings}</td><td>${run.findings}</td></tr>`,\n )\n .join(\"\") ?? \"\";\n\n const nav = EVIDENCE_VIEW_IDS.map(\n (id) =>\n `<a class=\"nav-link\" href=\"#view-${id}\" data-view=\"${id}\">${escapeHtml(viewLabel(id))}</a>`,\n ).join(\"\\n\");\n\n const stubPanels = EVIDENCE_VIEW_IDS.filter((id) => id !== \"summary\")\n .map((id) => {\n const body = input.viewBodies?.[id];\n if (body !== undefined && body.trim() !== \"\") {\n return ` <section id=\"view-${id}\" class=\"panel\" hidden>\n <h2>${escapeHtml(viewLabel(id))}</h2>\n ${body}\n </section>`;\n }\n return ` <section id=\"view-${id}\" class=\"panel\" hidden>\n <h2>${escapeHtml(viewLabel(id))}</h2>\n <p class=\"muted\">This view will be filled in a later AgentInspect 6.10 release. The shell is offline-ready.</p>\n </section>`;\n })\n .join(\"\\n\");\n\n return `<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'none'; style-src 'unsafe-inline'; script-src 'unsafe-inline'; img-src data:; base-uri 'none'; form-action 'none'; frame-ancestors 'none'\"/>\n<meta name=\"referrer\" content=\"no-referrer\"/>\n<title>${title}</title>\n<style>\n:root{--bg:#f7f7f5;--fg:#1a1a1a;--muted:#5c5c5c;--line:#d8d8d4;--accent:#0b5fff;--safe:#0a7a3e;--warn:#9a6700;--unsafe:#b42318;--unknown:#5c5c5c}\n*{box-sizing:border-box}\nbody{margin:0;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;background:var(--bg);color:var(--fg);line-height:1.5}\na{color:var(--accent)}\nheader{padding:1.25rem 1.5rem;border-bottom:1px solid var(--line);background:#fff}\nheader h1{margin:0 0 .35rem;font-size:1.35rem}\n.note{margin:0;color:var(--muted);font-size:.92rem;max-width:52rem}\n.layout{display:grid;grid-template-columns:14rem 1fr;min-height:70vh}\nnav{padding:1rem;border-right:1px solid var(--line);background:#fff}\nnav .nav-link{display:block;padding:.4rem .55rem;margin:0 0 .2rem;border-radius:.35rem;text-decoration:none;color:inherit}\nnav .nav-link:hover,nav .nav-link:focus{background:#eef3ff;outline:2px solid var(--accent);outline-offset:1px}\nmain{padding:1.25rem 1.5rem}\n.panel[hidden]{display:none}\n.badge{display:inline-block;padding:.15rem .55rem;border-radius:.3rem;font-size:.85rem;font-weight:600}\n.st-safe{color:var(--safe)}.st-warn{color:var(--warn)}.st-unsafe{color:var(--unsafe)}.st-unknown{color:var(--unknown)}\ntable{border-collapse:collapse;width:100%;max-width:48rem;background:#fff}\nth,td{border:1px solid var(--line);padding:.4rem .55rem;text-align:left;vertical-align:top}\nth{background:#f0f0ec}\n.summary-md,pre.data{white-space:pre-wrap;word-break:break-word;background:#fff;border:1px solid var(--line);padding:.75rem;max-width:52rem}\n.muted{color:var(--muted)}\nul.runs{margin:.4rem 0 1rem;padding-left:1.2rem}\n@media print{\n nav{display:none}\n .layout{display:block}\n .panel[hidden]{display:block!important;page-break-before:always}\n header{border:0}\n}\n@media (max-width:720px){\n .layout{grid-template-columns:1fr}\n nav{border-right:0;border-bottom:1px solid var(--line);display:flex;flex-wrap:wrap;gap:.25rem}\n}\n${EVIDENCE_VIEW_CSS}\n</style>\n</head>\n<body>\n<header>\n <h1>${title}</h1>\n <p class=\"note\">${escapeHtml(EVIDENCE_HTML_NOTE)}</p>\n</header>\n<div class=\"layout\">\n<nav aria-label=\"Evidence views\">\n${nav}\n</nav>\n<main id=\"main\">\n <section id=\"view-summary\" class=\"panel\" tabindex=\"-1\">\n <h2>Summary</h2>\n <p>Artifact status: <span class=\"badge ${statusClass(input.assessmentStatus)}\">${escapeHtml(input.assessmentStatus)}</span>\n ${\n input.sourceStatus !== undefined\n ? ` · Source status: <span class=\"badge ${statusClass(input.sourceStatus)}\">${escapeHtml(input.sourceStatus)}</span>`\n : \"\"\n }</p>\n <p>Profile: <code>${escapeHtml(input.redactionProfile)}</code> · Verification: <code>${escapeHtml(input.verificationPolicy)}</code></p>\n <p>Generator: <code>${escapeHtml(input.generatorName)}@${escapeHtml(input.generatorVersion)}</code>\n ${input.createdAt ? ` · Created: <code>${escapeHtml(input.createdAt)}</code>` : \"\"}</p>\n <h3>Runs</h3>\n <ul class=\"runs\">${runList}</ul>\n ${\n checkRows\n ? `<h3>Check summary</h3>\n <table>\n <thead><tr><th>runId</th><th>artifact</th><th>errors</th><th>warnings</th><th>findings</th></tr></thead>\n <tbody>${checkRows}</tbody>\n </table>`\n : \"\"\n }\n <h3>Text summary</h3>\n ${summaryBody}\n </section>\n${stubPanels}\n</main>\n</div>\n<script type=\"application/json\" id=\"ai-evidence-data\">${embedded}</script>\n<script>\n(function(){\n var links=document.querySelectorAll(\"nav .nav-link\");\n var panels=document.querySelectorAll(\"main .panel\");\n function show(id){\n for(var i=0;i<panels.length;i++){\n var p=panels[i];\n var on=p.id===\"view-\"+id;\n if(on){p.removeAttribute(\"hidden\");}else{p.setAttribute(\"hidden\",\"\");}\n }\n for(var j=0;j<links.length;j++){\n var a=links[j];\n if(a.getAttribute(\"data-view\")===id){a.setAttribute(\"aria-current\",\"page\");}\n else{a.removeAttribute(\"aria-current\");}\n }\n }\n for(var k=0;k<links.length;k++){\n links[k].addEventListener(\"click\",function(ev){\n var id=ev.currentTarget.getAttribute(\"data-view\");\n if(!id)return;\n ev.preventDefault();\n if(history.replaceState){history.replaceState(null,\"\",\"#view-\"+id);}\n show(id);\n var panel=document.getElementById(\"view-\"+id);\n if(panel)panel.focus();\n });\n }\n var hash=(location.hash||\"\").replace(/^#view-/,\"\");\n var initial=\"summary\";\n for(var n=0;n<links.length;n++){\n if(links[n].getAttribute(\"data-view\")===hash){initial=hash;break;}\n }\n show(initial);\n})();\n</script>\n</body>\n</html>\n`;\n}\n\n/**\n * Convenience: build shell fields from an EvidenceManifest (views still stubbed).\n */\nexport function buildEvidenceHtmlShellFromManifest(\n manifest: EvidenceManifest,\n extras?: Partial<\n Pick<EvidenceHtmlShellInput, \"summaryText\" | \"checkSummary\" | \"title\" | \"viewBodies\">\n >,\n): string {\n return buildEvidenceHtmlShell({\n title: extras?.title,\n runIds: manifest.source.runIds,\n assessmentStatus: manifest.assessment.status,\n sourceStatus: manifest.assessment.sourceStatus,\n redactionProfile: manifest.policy.redactionProfile,\n verificationPolicy: manifest.policy.verificationPolicy,\n generatorName: manifest.generator.name,\n generatorVersion: manifest.generator.version,\n createdAt: manifest.createdAt,\n evidenceFormatVersion: manifest.evidenceFormatVersion,\n summaryText: extras?.summaryText,\n checkSummary: extras?.checkSummary,\n viewBodies: extras?.viewBodies,\n });\n}\n","import { escapeHtml } from \"../exporters/helpers.js\";\nimport {\n extractOutcomesFromPersistedEvents,\n renderObservedOutcomesHtml,\n summarizeObservedOutcomes,\n} from \"../outcomes/index.js\";\nimport { persistedInspectEventsToTraceEvents } from \"../persisted/to-trace-event.js\";\nimport { diffTraceEvents, renderRunDiff } from \"../diff/index.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\n\nexport interface EvidenceCheckFindingSummary {\n runId: string;\n ruleId: string;\n severity: string;\n message: string;\n category?: string;\n detector?: string;\n confidence?: string;\n action?: string;\n}\n\nexport interface EvidenceContractsViewInput {\n aggregateStatus: string;\n runs: readonly {\n runId: string;\n status: string;\n sourceStatus?: string;\n errors: number;\n warnings: number;\n findings: number;\n }[];\n findingSummaries?: readonly EvidenceCheckFindingSummary[];\n}\n\nfunction boundMessage(message: string, max = 200): string {\n const trimmed = message.trim();\n if (trimmed.length <= max) return trimmed;\n return `${trimmed.slice(0, max)}…`;\n}\n\n/**\n * Contracts / checks HTML: aggregate status + bounded finding taxonomy (no evidence payloads).\n */\nexport function buildEvidenceContractsViewHtml(input: EvidenceContractsViewInput): string {\n const rows = input.runs\n .map(\n (run) =>\n `<tr><td><code>${escapeHtml(run.runId)}</code></td><td>${escapeHtml(run.status)}</td><td>${escapeHtml(run.sourceStatus ?? \"—\")}</td><td>${run.errors}</td><td>${run.warnings}</td><td>${run.findings}</td></tr>`,\n )\n .join(\"\");\n\n const findings = input.findingSummaries ?? [];\n const findingRows =\n findings.length === 0\n ? `<p class=\"muted\">No structured check findings recorded for the redacted artifact.</p>`\n : `<table>\n <thead><tr><th>runId</th><th>severity</th><th>rule</th><th>category</th><th>detector</th><th>message</th></tr></thead>\n <tbody>${findings\n .map(\n (f) =>\n `<tr><td><code>${escapeHtml(f.runId)}</code></td><td>${escapeHtml(f.severity)}</td><td><code>${escapeHtml(f.ruleId)}</code></td><td>${escapeHtml(f.category ?? \"—\")}</td><td>${escapeHtml(f.detector ?? \"—\")}</td><td>${escapeHtml(boundMessage(f.message))}</td></tr>`,\n )\n .join(\"\")}</tbody>\n</table>`;\n\n return `<p>Aggregate artifact status: <strong>${escapeHtml(input.aggregateStatus)}</strong></p>\n<table>\n <thead><tr><th>runId</th><th>artifact</th><th>source</th><th>errors</th><th>warnings</th><th>findings</th></tr></thead>\n <tbody>${rows}</tbody>\n</table>\n<h3>Finding summaries</h3>\n${findingRows}\n<p class=\"muted\">TraceContract / check details are best-effort local results — not a compliance certification.</p>`;\n}\n\n/**\n * Observed outcomes view from persisted inspect events (redacted artifact).\n */\nexport function buildEvidenceOutcomesViewHtml(\n runs: readonly { runId: string; events: readonly PersistedInspectEvent[] }[],\n): string {\n if (runs.length === 0) {\n return `<p class=\"muted\">No runs available for outcome extraction.</p>`;\n }\n const parts: string[] = [];\n for (const run of runs) {\n const forRun = run.events.filter((event) => event.runId === run.runId);\n const summary = summarizeObservedOutcomes(extractOutcomesFromPersistedEvents(forRun));\n parts.push(`<article class=\"run-block\">`);\n parts.push(`<h3><code>${escapeHtml(run.runId)}</code></h3>`);\n parts.push(renderObservedOutcomesHtml(summary));\n parts.push(`</article>`);\n }\n return parts.join(\"\\n\");\n}\n\n/**\n * Diff view: when two event sets are supplied, render a local run diff.\n * Otherwise show an empty-state explaining baseline/candidate is optional.\n */\nexport function buildEvidenceDiffViewHtml(parts?: {\n leftRunId: string;\n rightRunId: string;\n leftEvents: readonly PersistedInspectEvent[];\n rightEvents: readonly PersistedInspectEvent[];\n}): string {\n if (\n parts === undefined ||\n parts.leftEvents.length === 0 ||\n parts.rightEvents.length === 0\n ) {\n return `<p class=\"muted\">No baseline/candidate pair was supplied for this evidence bundle. Attach two runs (or a reporter baseline) to populate this view.</p>`;\n }\n\n try {\n const left = persistedInspectEventsToTraceEvents(\n parts.leftEvents.filter((e) => e.runId === parts.leftRunId),\n );\n const right = persistedInspectEventsToTraceEvents(\n parts.rightEvents.filter((e) => e.runId === parts.rightRunId),\n );\n if (left.length === 0 || right.length === 0) {\n return `<p class=\"muted\">Could not normalize both runs for diff (missing v0.1-compatible events).</p>`;\n }\n const result = diffTraceEvents(left, right);\n const text = renderRunDiff(result, { color: false, verbose: false });\n return `<p>Comparing <code>${escapeHtml(parts.leftRunId)}</code> → <code>${escapeHtml(parts.rightRunId)}</code></p>\n<pre class=\"summary-md\">${escapeHtml(text)}</pre>`;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return `<p class=\"muted\">Diff unavailable: ${escapeHtml(message)}</p>`;\n }\n}\n","import { escapeHtml, flattenTree } from \"../exporters/helpers.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { EvidenceCheckFindingSummary } from \"./views-contract.js\";\nimport type { EvidenceSafeStatus, EvidenceSourceHash } from \"./types.js\";\n\nexport interface EvidenceSafetyViewInput {\n artifactStatus: EvidenceSafeStatus | string;\n sourceStatus?: EvidenceSafeStatus | string;\n redactionProfile: string;\n verificationPolicy: string;\n redaction?: {\n totalFindings: number;\n runs: readonly { runId: string; findings: number; detectors: string[] }[];\n };\n findingSummaries?: readonly EvidenceCheckFindingSummary[];\n}\n\nexport interface EvidenceProvenanceViewInput {\n generatorName: string;\n generatorVersion: string;\n evidenceFormatVersion: string;\n createdAt?: string;\n runIds: readonly string[];\n traceSchemaVersions: readonly string[];\n sourceHashes: readonly EvidenceSourceHash[];\n packagedFiles: readonly { path: string; role?: string }[];\n note?: string;\n}\n\n/**\n * Safety / redaction view: artifact vs source status + detector summary (no raw secrets).\n */\nexport function buildEvidenceSafetyViewHtml(input: EvidenceSafetyViewInput): string {\n const findingRows =\n (input.findingSummaries ?? []).length === 0\n ? `<p class=\"muted\">No safety findings on the redacted artifact.</p>`\n : `<table>\n <thead><tr><th>runId</th><th>severity</th><th>category</th><th>detector</th><th>action</th><th>message</th></tr></thead>\n <tbody>${(input.findingSummaries ?? [])\n .map((f) => {\n const msg =\n f.message.length > 160 ? `${f.message.slice(0, 160)}…` : f.message;\n return `<tr><td><code>${escapeHtml(f.runId)}</code></td><td>${escapeHtml(f.severity)}</td><td>${escapeHtml(f.category ?? \"—\")}</td><td>${escapeHtml(f.detector ?? \"—\")}</td><td>${escapeHtml(f.action ?? \"—\")}</td><td>${escapeHtml(msg)}</td></tr>`;\n })\n .join(\"\")}</tbody>\n</table>`;\n\n const redactionBlock =\n input.redaction === undefined\n ? `<p class=\"muted\">No redaction report attached.</p>`\n : `<p>Total redaction findings: <strong>${input.redaction.totalFindings}</strong></p>\n<ul>${input.redaction.runs\n .map(\n (run) =>\n `<li><code>${escapeHtml(run.runId)}</code>: ${run.findings} finding(s); detectors: ${escapeHtml(run.detectors.join(\", \") || \"none\")}</li>`,\n )\n .join(\"\")}</ul>`;\n\n return `<p>Artifact status: <strong>${escapeHtml(String(input.artifactStatus))}</strong>\n ${\n input.sourceStatus !== undefined\n ? ` · Source status: <strong>${escapeHtml(String(input.sourceStatus))}</strong>`\n : \"\"\n }</p>\n<p>Redaction profile: <code>${escapeHtml(input.redactionProfile)}</code> · Verification: <code>${escapeHtml(input.verificationPolicy)}</code></p>\n<h3>Redaction</h3>\n${redactionBlock}\n<h3>Safety findings (artifact)</h3>\n${findingRows}\n<p class=\"muted\">Best-effort local verification only — not a compliance certification. Gate sharing on artifact status.</p>`;\n}\n\n/**\n * Provenance / mapping view: generator, schema versions, source hashes, packaged roles.\n */\nexport function buildEvidenceProvenanceViewHtml(input: EvidenceProvenanceViewInput): string {\n const hashes =\n input.sourceHashes.length === 0\n ? `<p class=\"muted\">No source hashes recorded.</p>`\n : `<table>\n <thead><tr><th>runId</th><th>algorithm</th><th>hash</th></tr></thead>\n <tbody>${input.sourceHashes\n .map(\n (h) =>\n `<tr><td><code>${escapeHtml(h.runId)}</code></td><td>${escapeHtml(h.algorithm)}</td><td><code>${escapeHtml(h.hash)}</code></td></tr>`,\n )\n .join(\"\")}</tbody>\n</table>`;\n\n const files =\n input.packagedFiles.length === 0\n ? `<p class=\"muted\">No packaged files listed.</p>`\n : `<ul>${input.packagedFiles\n .map(\n (f) =>\n `<li><code>${escapeHtml(f.path)}</code>${f.role ? ` <span class=\"meta\">(${escapeHtml(f.role)})</span>` : \"\"}</li>`,\n )\n .join(\"\")}</ul>`;\n\n return `<p>Generator: <code>${escapeHtml(input.generatorName)}@${escapeHtml(input.generatorVersion)}</code>\n · Evidence format: <code>${escapeHtml(input.evidenceFormatVersion)}</code>\n ${input.createdAt ? ` · Created: <code>${escapeHtml(input.createdAt)}</code>` : \"\"}</p>\n<p>Runs: ${input.runIds.map((id) => `<code>${escapeHtml(id)}</code>`).join(\", \")}</p>\n<p>Trace schema versions: ${\n input.traceSchemaVersions.length > 0\n ? input.traceSchemaVersions.map((v) => `<code>${escapeHtml(v)}</code>`).join(\", \")\n : \"<span class=\\\"muted\\\">unknown</span>\"\n }</p>\n<h3>Source hashes (pre-redaction input)</h3>\n${hashes}\n<h3>Packaged files</h3>\n${files}\n<p class=\"muted\">${escapeHtml(input.note ?? \"Reader/mapping losses are reported elsewhere when present; relationships are never invented without confidence policy.\")}</p>`;\n}\n\n/**\n * Tools / LLM metadata view: names, kinds, statuses, durations — no prompts/outputs.\n */\nexport function buildEvidenceToolsLlmViewHtml(trees: readonly InspectRunTree[]): string {\n if (trees.length === 0) {\n return `<p class=\"muted\">No runs available for tool/LLM metadata.</p>`;\n }\n const parts: string[] = [];\n for (const tree of trees) {\n const nodes = flattenTree(tree).filter(\n (n) => n.event.kind === \"TOOL\" || n.event.kind === \"LLM\" || n.event.kind === \"AGENT\",\n );\n parts.push(`<article class=\"run-block\">`);\n parts.push(`<h3><code>${escapeHtml(tree.runId)}</code></h3>`);\n if (nodes.length === 0) {\n parts.push(`<p class=\"muted\">No TOOL/LLM/AGENT events in this run.</p>`);\n } else {\n parts.push(`<table>\n <thead><tr><th>name</th><th>kind</th><th>status</th><th>durationMs</th></tr></thead>\n <tbody>${nodes\n .map((n) => {\n const dur =\n n.event.durationMs !== undefined && Number.isFinite(n.event.durationMs)\n ? String(n.event.durationMs)\n : \"—\";\n return `<tr><td>${escapeHtml(n.event.name)}</td><td>${escapeHtml(n.event.kind)}</td><td>${escapeHtml(n.event.status ?? \"?\")}</td><td>${escapeHtml(dur)}</td></tr>`;\n })\n .join(\"\")}</tbody>\n</table>`);\n }\n parts.push(`</article>`);\n }\n return parts.join(\"\\n\");\n}\n\n/**\n * Circuit / guardrails placeholder filled with conservative empty state unless findings supplied.\n */\nexport function buildEvidenceCircuitViewHtml(parts?: {\n findings?: readonly { runId: string; name: string; status: string; detail?: string }[];\n}): string {\n const findings = parts?.findings ?? [];\n if (findings.length === 0) {\n return `<p class=\"muted\">No circuit or guardrail findings were attached to this evidence bundle.</p>`;\n }\n return `<table>\n <thead><tr><th>runId</th><th>name</th><th>status</th><th>detail</th></tr></thead>\n <tbody>${findings\n .map(\n (f) =>\n `<tr><td><code>${escapeHtml(f.runId)}</code></td><td>${escapeHtml(f.name)}</td><td>${escapeHtml(f.status)}</td><td>${escapeHtml(f.detail ?? \"—\")}</td></tr>`,\n )\n .join(\"\")}</tbody>\n</table>`;\n}\n","import { assertEvidenceRelativePath } from \"./paths.js\";\n\nexport interface ZipEntry {\n path: string;\n content: string | Uint8Array;\n}\n\nconst CRC_TABLE = (() => {\n const table = new Uint32Array(256);\n for (let n = 0; n < 256; n += 1) {\n let c = n;\n for (let k = 0; k < 8; k += 1) {\n c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n }\n table[n] = c >>> 0;\n }\n return table;\n})();\n\nfunction crc32(data: Uint8Array): number {\n let crc = 0xffffffff;\n for (let i = 0; i < data.length; i += 1) {\n crc = CRC_TABLE[(crc ^ data[i]!) & 0xff]! ^ (crc >>> 8);\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n\nfunction toBytes(content: string | Uint8Array): Uint8Array {\n return typeof content === \"string\" ? Buffer.from(content, \"utf8\") : content;\n}\n\nfunction u16(value: number): Buffer {\n const buf = Buffer.alloc(2);\n buf.writeUInt16LE(value >>> 0, 0);\n return buf;\n}\n\nfunction u32(value: number): Buffer {\n const buf = Buffer.alloc(4);\n buf.writeUInt32LE(value >>> 0, 0);\n return buf;\n}\n\n/**\n * Build a minimal ZIP archive (STORE method) with traversal-safe relative paths.\n * No external dependencies — suitable for Evidence `--format zip`.\n */\nexport function buildZipArchive(entries: readonly ZipEntry[]): Buffer {\n if (entries.length === 0) {\n throw new Error(\"ZIP archive requires at least one entry.\");\n }\n\n const locals: Buffer[] = [];\n const centrals: Buffer[] = [];\n let offset = 0;\n\n const seen = new Set<string>();\n for (const entry of entries) {\n const name = assertEvidenceRelativePath(entry.path);\n if (seen.has(name)) {\n throw new Error(`Duplicate ZIP entry path: ${name}`);\n }\n seen.add(name);\n\n const nameBytes = Buffer.from(name, \"utf8\");\n const data = toBytes(entry.content);\n const checksum = crc32(data);\n const size = data.byteLength;\n\n const local = Buffer.concat([\n u32(0x04034b50),\n u16(20), // version needed\n u16(0), // flags\n u16(0), // method STORE\n u16(0), // time\n u16(0), // date\n u32(checksum),\n u32(size),\n u32(size),\n u16(nameBytes.length),\n u16(0), // extra length\n nameBytes,\n Buffer.from(data),\n ]);\n\n const central = Buffer.concat([\n u32(0x02014b50),\n u16(20), // version made by\n u16(20), // version needed\n u16(0),\n u16(0),\n u16(0),\n u16(0),\n u32(checksum),\n u32(size),\n u32(size),\n u16(nameBytes.length),\n u16(0),\n u16(0),\n u16(0),\n u16(0),\n u32(0),\n u32(offset),\n nameBytes,\n ]);\n\n locals.push(local);\n centrals.push(central);\n offset += local.length;\n }\n\n const centralDir = Buffer.concat(centrals);\n const end = Buffer.concat([\n u32(0x06054b50),\n u16(0),\n u16(0),\n u16(entries.length),\n u16(entries.length),\n u32(centralDir.length),\n u32(offset),\n u16(0),\n ]);\n\n return Buffer.concat([...locals, centralDir, end]);\n}\n","/**\n * Evidence integrity verification (bundle verify) — schema, presence, hashes.\n */\nimport { readdir, readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { sha256Equals, sha256Hex } from \"./hash.js\";\nimport { parseEvidenceManifestJson } from \"./manifest.js\";\nimport { assertEvidenceRelativePath } from \"./paths.js\";\nimport { EVIDENCE_MANIFEST_FILENAME, type EvidenceManifest } from \"./types.js\";\n\nexport type EvidenceVerifyStatus = \"pass\" | \"fail\";\n\nexport interface EvidenceVerifyIssue {\n code:\n | \"manifest_missing\"\n | \"manifest_invalid\"\n | \"file_missing\"\n | \"file_unexpected\"\n | \"hash_mismatch\"\n | \"assessment_missing\"\n | \"provenance_missing\"\n | \"path_unsafe\"\n | \"io_error\";\n severity: \"error\" | \"warning\";\n message: string;\n path?: string;\n}\n\nexport interface EvidenceVerifyResult {\n ok: boolean;\n status: EvidenceVerifyStatus;\n root: string;\n manifest?: EvidenceManifest;\n issues: EvidenceVerifyIssue[];\n checkedFiles: number;\n}\n\nexport interface EvidenceVerifyOptions {\n /** Unexpected files: default fail for share/strict-style verification. */\n unexpectedFiles?: \"fail\" | \"warn\" | \"ignore\";\n}\n\nasync function listFilesRecursive(root: string): Promise<string[]> {\n const out: string[] = [];\n async function walk(dir: string): Promise<void> {\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const abs = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n await walk(abs);\n } else if (entry.isFile()) {\n const rel = path.relative(root, abs).split(path.sep).join(\"/\");\n out.push(rel);\n }\n }\n }\n await walk(root);\n return out.sort((a, b) => a.localeCompare(b));\n}\n\n/**\n * Verify an Evidence v2 directory (contains `evidence.json`).\n * Does not extract ZIP archives — callers should unpack first when needed.\n */\nexport async function verifyEvidenceDirectory(\n rootPath: string,\n options: EvidenceVerifyOptions = {},\n): Promise<EvidenceVerifyResult> {\n const unexpectedMode = options.unexpectedFiles ?? \"fail\";\n const root = path.resolve(rootPath);\n const issues: EvidenceVerifyIssue[] = [];\n\n let rootStat;\n try {\n rootStat = await stat(root);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n ok: false,\n status: \"fail\",\n root,\n issues: [{ code: \"io_error\", severity: \"error\", message: `Cannot read path: ${message}` }],\n checkedFiles: 0,\n };\n }\n if (!rootStat.isDirectory()) {\n return {\n ok: false,\n status: \"fail\",\n root,\n issues: [\n {\n code: \"io_error\",\n severity: \"error\",\n message: \"Evidence verify expects a directory containing evidence.json (unpack ZIP first).\",\n },\n ],\n checkedFiles: 0,\n };\n }\n\n const manifestPath = path.join(root, EVIDENCE_MANIFEST_FILENAME);\n let manifestText: string;\n try {\n manifestText = await readFile(manifestPath, \"utf-8\");\n } catch {\n return {\n ok: false,\n status: \"fail\",\n root,\n issues: [\n {\n code: \"manifest_missing\",\n severity: \"error\",\n message: `Missing ${EVIDENCE_MANIFEST_FILENAME}`,\n path: EVIDENCE_MANIFEST_FILENAME,\n },\n ],\n checkedFiles: 0,\n };\n }\n\n let manifest: EvidenceManifest;\n try {\n manifest = parseEvidenceManifestJson(manifestText);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n ok: false,\n status: \"fail\",\n root,\n issues: [\n {\n code: \"manifest_invalid\",\n severity: \"error\",\n message,\n path: EVIDENCE_MANIFEST_FILENAME,\n },\n ],\n checkedFiles: 0,\n };\n }\n\n if (!manifest.assessment?.status) {\n issues.push({\n code: \"assessment_missing\",\n severity: \"error\",\n message: \"Manifest assessment.status is required.\",\n });\n }\n if (!manifest.generator?.name || !manifest.generator?.version) {\n issues.push({\n code: \"provenance_missing\",\n severity: \"error\",\n message: \"Manifest generator.name and generator.version are required.\",\n });\n }\n if (!manifest.source?.runIds?.length) {\n issues.push({\n code: \"provenance_missing\",\n severity: \"error\",\n message: \"Manifest source.runIds must be non-empty.\",\n });\n }\n\n const listed = new Set<string>();\n for (const file of manifest.files) {\n let rel: string;\n try {\n rel = assertEvidenceRelativePath(file.path);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n issues.push({\n code: \"path_unsafe\",\n severity: \"error\",\n message,\n path: file.path,\n });\n continue;\n }\n if (rel === EVIDENCE_MANIFEST_FILENAME) {\n issues.push({\n code: \"manifest_invalid\",\n severity: \"error\",\n message: `${EVIDENCE_MANIFEST_FILENAME} must not list itself in files[].`,\n path: rel,\n });\n continue;\n }\n listed.add(rel);\n const abs = path.join(root, ...rel.split(\"/\"));\n let bytes: Buffer;\n try {\n bytes = await readFile(abs);\n } catch {\n issues.push({\n code: \"file_missing\",\n severity: \"error\",\n message: `Listed file missing: ${rel}`,\n path: rel,\n });\n continue;\n }\n const actual = sha256Hex(bytes);\n if (!sha256Equals(file.sha256, actual)) {\n issues.push({\n code: \"hash_mismatch\",\n severity: \"error\",\n message: `SHA-256 mismatch for ${rel}`,\n path: rel,\n });\n }\n }\n\n let onDisk: string[] = [];\n try {\n onDisk = await listFilesRecursive(root);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n issues.push({ code: \"io_error\", severity: \"error\", message });\n }\n\n for (const rel of onDisk) {\n if (rel === EVIDENCE_MANIFEST_FILENAME) continue;\n if (listed.has(rel)) continue;\n if (unexpectedMode === \"ignore\") continue;\n issues.push({\n code: \"file_unexpected\",\n severity: unexpectedMode === \"warn\" ? \"warning\" : \"error\",\n message: `Unexpected file not listed in manifest: ${rel}`,\n path: rel,\n });\n }\n\n const hasError = issues.some((issue) => issue.severity === \"error\");\n return {\n ok: !hasError,\n status: hasError ? \"fail\" : \"pass\",\n root,\n manifest,\n issues,\n checkedFiles: listed.size,\n };\n}\n","/**\n * Helpers for CI Evidence v2 packages (same files as share-safe bundles).\n */\nimport { buildEvidenceHtmlShell } from \"./html-shell.js\";\nimport {\n buildEvidenceManifest,\n collectTraceSchemaVersions,\n serializeEvidenceManifest,\n} from \"./manifest.js\";\nimport { sha256Hex } from \"./hash.js\";\nimport {\n EVIDENCE_ASSESSMENT_NOTE,\n EVIDENCE_FORMAT_VERSION,\n EVIDENCE_MANIFEST_FILENAME,\n type EvidenceManifest,\n type EvidenceSafeStatus,\n} from \"./types.js\";\nimport { EVIDENCE_HTML_FILENAME } from \"./html-shell.js\";\n\nexport interface EvidenceCiPackageInput {\n generatorVersion: string;\n runIds: readonly string[];\n /** Pre-redaction source bytes keyed by run id (for sourceHashes). */\n sourceContents: ReadonlyMap<string, string> | Record<string, string>;\n /** Redacted combined JSONL written as trace.jsonl. */\n redactedTraceJsonl: string;\n redactionProfile: \"local\" | \"share\" | \"strict\";\n assessmentStatus: EvidenceSafeStatus;\n sourceStatus?: EvidenceSafeStatus;\n checkResultsJson: string;\n createdAt?: string;\n summaryText?: string;\n /** Optional TraceFacts/parity summary embedded in evidence.json (6.14+). */\n semantics?: EvidenceManifest[\"semantics\"];\n}\n\nexport interface EvidenceCiPackageFiles {\n \"evidence.html\": string;\n \"evidence.json\": string;\n \"check-results.json\": string;\n \"trace.jsonl\": string;\n manifest: EvidenceManifest;\n}\n\nfunction asMap(\n value: ReadonlyMap<string, string> | Record<string, string>,\n): Map<string, string> {\n if (value instanceof Map) return new Map(value);\n return new Map(Object.entries(value));\n}\n\n/**\n * Build the four standard CI evidence files (in memory) using Evidence v2 helpers.\n */\nexport function buildEvidenceCiPackage(input: EvidenceCiPackageInput): EvidenceCiPackageFiles {\n const sources = asMap(input.sourceContents);\n const sourceHashes = input.runIds.map((runId) => ({\n runId,\n algorithm: \"sha256\" as const,\n hash: sha256Hex(sources.get(runId) ?? \"\"),\n }));\n const schemaVersions = new Set<string>();\n for (const content of sources.values()) {\n for (const version of collectTraceSchemaVersions(content)) {\n schemaVersions.add(version);\n }\n }\n for (const version of collectTraceSchemaVersions(input.redactedTraceJsonl)) {\n schemaVersions.add(version);\n }\n\n const createdAt = input.createdAt ?? new Date().toISOString();\n const evidenceHtml = buildEvidenceHtmlShell({\n title: \"AgentInspect evidence\",\n runIds: input.runIds,\n assessmentStatus: input.assessmentStatus,\n sourceStatus: input.sourceStatus,\n redactionProfile: input.redactionProfile,\n verificationPolicy: input.redactionProfile,\n generatorName: \"agent-inspect\",\n generatorVersion: input.generatorVersion,\n createdAt,\n summaryText: input.summaryText,\n checkSummary: {\n aggregateStatus: input.assessmentStatus,\n runs: input.runIds.map((runId) => ({\n runId,\n status: input.assessmentStatus,\n sourceStatus: input.sourceStatus,\n errors: input.assessmentStatus === \"UNSAFE\" || input.assessmentStatus === \"UNKNOWN\" ? 1 : 0,\n warnings: input.assessmentStatus === \"SAFE WITH WARNINGS\" ? 1 : 0,\n findings: 0,\n })),\n },\n });\n\n const packaged = [\n { path: EVIDENCE_HTML_FILENAME, content: evidenceHtml },\n { path: \"check-results.json\", content: input.checkResultsJson },\n { path: \"trace.jsonl\", content: input.redactedTraceJsonl },\n ];\n\n const manifest = buildEvidenceManifest({\n generatorVersion: input.generatorVersion,\n runIds: input.runIds,\n traceSchemaVersions: [...schemaVersions].sort((a, b) => a.localeCompare(b)),\n sourceHashes,\n redactionProfile: input.redactionProfile,\n verificationPolicy: input.redactionProfile,\n assessmentStatus: input.assessmentStatus,\n sourceStatus: input.sourceStatus,\n files: packaged,\n createdAt,\n note: EVIDENCE_ASSESSMENT_NOTE,\n ...(input.semantics !== undefined ? { semantics: input.semantics } : {}),\n });\n\n return {\n \"evidence.html\": evidenceHtml,\n \"evidence.json\": serializeEvidenceManifest(manifest),\n \"check-results.json\": input.checkResultsJson,\n \"trace.jsonl\": input.redactedTraceJsonl,\n manifest,\n };\n}\n\nexport { EVIDENCE_FORMAT_VERSION, EVIDENCE_HTML_FILENAME, EVIDENCE_MANIFEST_FILENAME };\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, rulesEvaluated: 0 },\n findings: [],\n diagnostics: [],\n ruleExecutions: [],\n };\n const observationResult = validateExpectedObservations(suiteCase, read);\n\n const diagnostics = [\n ...checkResult.diagnostics.map((item) =>\n diagnostic(\n \"AI_SUITE_CASE_CHECK_FAILED\",\n item.message,\n item.severity,\n suiteCase.id,\n ),\n ),\n ...checkResult.findings\n .filter((finding) => finding.status === \"fail\")\n .map((finding) =>\n diagnostic(\n \"AI_SUITE_CASE_CHECK_FAILED\",\n finding.message,\n finding.severity,\n suiteCase.id,\n ),\n ),\n ...observationResult.diagnostics,\n ];\n\n const checkOk = checkResult.ok;\n const observationsOk = observationResult.ok;\n const ok = checkOk && observationsOk;\n const status = ok ? \"pass\" : checkResult.status === \"error\" ? \"error\" : \"fail\";\n\n return {\n id: suiteCase.id,\n status,\n tracePath: resolved.tracePath,\n ...(resolved.runId !== undefined ? { runId: resolved.runId } : {}),\n checkOk,\n observationsOk,\n diagnostics,\n ...(ok\n ? {}\n : {\n message:\n diagnostics.map((item) => item.message).join(\"; \") ||\n checkResult.findings.map((item) => item.message).join(\"; \"),\n }),\n };\n}\n\nexport async function runSuite(options: RunSuiteOptions = {}): Promise<SuiteRunResult> {\n const startedAt = new Date(options.nowMs ?? Date.now()).toISOString();\n const { config, configPath, configDir } = await loadSuiteConfig(options);\n const tracesDir = path.resolve(configDir, config.traces);\n\n const cases: SuiteCaseResult[] = [];\n const diagnostics: SuiteDiagnostic[] = [];\n\n for (const suiteCase of config.cases) {\n cases.push(\n await runSuiteCase(suiteCase, config, {\n configDir,\n tracesDir,\n }),\n );\n }\n\n const summary = {\n passed: cases.filter((item) => item.status === \"pass\").length,\n failed: cases.filter((item) => item.status === \"fail\").length,\n errors: cases.filter((item) => item.status === \"error\").length,\n skipped: cases.filter((item) => item.status === \"skipped\").length,\n };\n\n const finishedAt = new Date(options.nowMs ?? Date.now()).toISOString();\n const allSkipped = cases.length > 0 && summary.skipped === cases.length;\n const ok = summary.failed === 0 && summary.errors === 0 && !allSkipped;\n const status =\n summary.errors > 0\n ? \"error\"\n : allSkipped\n ? \"fail\"\n : summary.failed > 0 || !ok\n ? \"fail\"\n : \"pass\";\n\n return {\n ok,\n status,\n suiteName: config.name,\n configPath,\n tracesDir,\n startedAt,\n finishedAt,\n summary,\n cases,\n diagnostics,\n };\n}\n","import type { RenderSuiteReportOptions, SuiteRunResult } from \"./types.js\";\n\nfunction statusLabel(status: string): string {\n return status.toUpperCase();\n}\n\nexport function renderSuiteReportMarkdown(result: SuiteRunResult): string {\n const lines: string[] = [];\n lines.push(`# Suite: ${result.suiteName}`);\n lines.push(\"\");\n lines.push(`Status: **${statusLabel(result.status)}**`);\n lines.push(`Config: \\`${result.configPath}\\``);\n lines.push(`Traces: \\`${result.tracesDir}\\``);\n lines.push(`Started: ${result.startedAt}`);\n lines.push(`Finished: ${result.finishedAt}`);\n lines.push(\"\");\n lines.push(\"## Summary\");\n lines.push(`- Passed: ${result.summary.passed}`);\n lines.push(`- Failed: ${result.summary.failed}`);\n lines.push(`- Errors: ${result.summary.errors}`);\n lines.push(`- Skipped: ${result.summary.skipped}`);\n lines.push(\"\");\n lines.push(\"## Cases\");\n for (const suiteCase of result.cases) {\n lines.push(`### ${suiteCase.id} — ${statusLabel(suiteCase.status)}`);\n if (suiteCase.tracePath !== undefined) {\n lines.push(`- Trace: \\`${suiteCase.tracePath}\\``);\n }\n if (suiteCase.runId !== undefined) {\n lines.push(`- Run: \\`${suiteCase.runId}\\``);\n }\n if (suiteCase.message !== undefined && suiteCase.message.trim() !== \"\") {\n lines.push(`- ${suiteCase.message}`);\n }\n if (suiteCase.diagnostics.length > 0) {\n for (const item of suiteCase.diagnostics) {\n lines.push(`- [${item.severity}] ${item.message}`);\n }\n }\n lines.push(\"\");\n }\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderSuiteReport(\n result: SuiteRunResult,\n options: RenderSuiteReportOptions = {},\n): string {\n const format = options.format ?? \"markdown\";\n if (format === \"json\") {\n return JSON.stringify(result, null, 2);\n }\n return renderSuiteReportMarkdown(result);\n}\n","import type { SuiteConfig } from \"./types.js\";\n\nexport const SUITE_TEMPLATE_IDS = [\n \"customer-support-agent\",\n \"refund-agent\",\n \"sales-assistant\",\n \"browser-task-agent\",\n \"mcp-tool-agent\",\n \"workflow-agent\",\n \"rag-answer-agent\",\n \"human-approval-agent\",\n] as const;\n\nexport type SuiteTemplateId = (typeof SUITE_TEMPLATE_IDS)[number];\n\nfunction baseTemplate(name: string, cases: SuiteConfig[\"cases\"]): SuiteConfig {\n return {\n name,\n traces: \"./.agent-inspect\",\n cases,\n checks: {\n select: [\"run.status\", \"outcome.status\"],\n run: { maxDurationMs: 60_000 },\n },\n redactionProfile: \"local\",\n artifacts: { outputDir: \".agent-inspect/suite-runs\" },\n };\n}\n\nconst TEMPLATES: Record<SuiteTemplateId, SuiteConfig> = {\n \"customer-support-agent\": baseTemplate(\"customer-support-agent\", [\n {\n id: \"support-ticket\",\n runId: \"support-ticket\",\n requireTools: [\"searchDocs\"],\n forbidTools: [\"deleteAccount\"],\n expectedObservations: [\"answerReady\"],\n maxDurationMs: 45_000,\n },\n ]),\n \"refund-agent\": baseTemplate(\"refund-agent\", [\n {\n id: \"refund-flow\",\n runId: \"refund-flow\",\n requireTools: [\"searchDocs\"],\n forbidTools: [\"deleteAccount\"],\n expectedObservations: [\"policyShown\"],\n maxDurationMs: 30_000,\n },\n ]),\n \"sales-assistant\": baseTemplate(\"sales-assistant\", [\n {\n id: \"quote-request\",\n runId: \"quote-request\",\n requireTools: [\"lookupPricing\"],\n maxDurationMs: 30_000,\n },\n ]),\n \"browser-task-agent\": baseTemplate(\"browser-task-agent\", [\n {\n id: \"browser-nav\",\n runId: \"browser-nav\",\n requireTools: [\"browserNavigate\"],\n maxDurationMs: 120_000,\n },\n ]),\n \"mcp-tool-agent\": baseTemplate(\"mcp-tool-agent\", [\n {\n id: \"mcp-call\",\n runId: \"mcp-call\",\n requireTools: [\"mcp:tools/list\"],\n maxDurationMs: 30_000,\n },\n ]),\n \"workflow-agent\": baseTemplate(\"workflow-agent\", [\n {\n id: \"workflow-handoff\",\n runId: \"workflow-handoff\",\n requireTools: [\"handoff\"],\n maxDurationMs: 60_000,\n },\n ]),\n \"rag-answer-agent\": baseTemplate(\"rag-answer-agent\", [\n {\n id: \"rag-answer\",\n runId: \"rag-answer\",\n requireTools: [\"retrieve\", \"answer\"],\n expectedObservations: [\"citationShown\"],\n maxDurationMs: 45_000,\n },\n ]),\n \"human-approval-agent\": baseTemplate(\"human-approval-agent\", [\n {\n id: \"approval-gate\",\n runId: \"approval-gate\",\n expectedObservations: [\"approvalRequested\", \"approvalGranted\"],\n maxDurationMs: 60_000,\n },\n ]),\n};\n\nexport function listSuiteTemplates(): SuiteTemplateId[] {\n return [...SUITE_TEMPLATE_IDS];\n}\n\nexport function getSuiteTemplate(id: string): SuiteConfig | undefined {\n if (!(SUITE_TEMPLATE_IDS as readonly string[]).includes(id)) return undefined;\n return structuredClone(TEMPLATES[id as SuiteTemplateId]);\n}\n\nexport function resolveSuiteTemplate(id: string): SuiteConfig {\n const template = getSuiteTemplate(id);\n if (template === undefined) {\n throw new Error(\n `Unknown suite template \"${id}\". Available: ${SUITE_TEMPLATE_IDS.join(\", \")}`,\n );\n }\n return template;\n}\n","import type { TraceMetadataStatus } from \"../types.js\";\n\nexport type CohortMetricId =\n | \"errorRate\"\n | \"duration\"\n | \"toolChoice\"\n | \"toolOrdering\"\n | \"llmCallCount\"\n | \"tokenUsage\"\n | \"retryCount\"\n | \"observationFailure\"\n | \"guardrailFailure\"\n | \"circuitViolation\"\n | \"redactionWarning\";\n\nexport const COHORT_METRIC_IDS: readonly CohortMetricId[] = [\n \"errorRate\",\n \"duration\",\n \"toolChoice\",\n \"toolOrdering\",\n \"llmCallCount\",\n \"tokenUsage\",\n \"retryCount\",\n \"observationFailure\",\n \"guardrailFailure\",\n \"circuitViolation\",\n \"redactionWarning\",\n];\n\nexport interface CohortRunMetrics {\n runId: string;\n cohortLabel?: string;\n groupKey: string;\n status: TraceMetadataStatus;\n error: boolean;\n durationMs?: number;\n llmCallCount: number;\n tokenUsageTotal?: number;\n retryCount: number;\n observationFailures: number;\n guardrailFailures: number;\n circuitViolations: number;\n redactionWarnings: number;\n toolChoices: string[];\n toolOrdering: string[];\n}\n\nexport interface CohortAggregateMetrics {\n groupKey: string;\n cohortLabel?: string;\n runCount: number;\n errorRate: number;\n avgDurationMs?: number;\n p95DurationMs?: number;\n avgLlmCallCount: number;\n avgTokenUsage?: number;\n avgRetryCount: number;\n observationFailureRate: number;\n avgGuardrailFailures: number;\n avgCircuitViolations: number;\n avgRedactionWarnings: number;\n dominantToolChoice?: string;\n toolOrderingSignature?: string;\n}\n\nexport interface CohortMetricComparison {\n metric: CohortMetricId;\n baseline?: number | string;\n candidate?: number | string;\n delta?: number | string;\n regression: boolean;\n message: string;\n}\n\nexport interface CohortAnalysisResult {\n ok: boolean;\n traceDir: string;\n baseline?: string;\n candidate?: string;\n cohortKey: string;\n groupBy: string;\n metrics: CohortMetricId[];\n groups: CohortAggregateMetrics[];\n comparisons: CohortMetricComparison[];\n runs: CohortRunMetrics[];\n warnings: string[];\n}\n\nexport interface CohortToleranceOptions {\n /** Minimum runs per cohort label before comparisons are considered valid. */\n minSampleSize?: number;\n /** Allowed relative delta (0–1) before a metric comparison is a regression. */\n maxRelativeDelta?: number;\n}\n\nexport interface AnalyzeCohortOptions {\n traceDir: string;\n baseline?: string;\n candidate?: string;\n cohortKey?: string;\n groupBy?: string;\n metrics?: CohortMetricId[];\n tolerance?: CohortToleranceOptions;\n}\n\nexport interface RenderCohortReportOptions {\n format?: \"markdown\" | \"json\" | \"html\";\n}\n","import type {\n CohortAggregateMetrics,\n CohortMetricComparison,\n CohortMetricId,\n} from \"./types.js\";\n\nfunction compareNumber(\n metric: CohortMetricId,\n label: string,\n baseline?: number,\n candidate?: number,\n higherIsWorse = true,\n maxRelativeDelta?: number,\n): CohortMetricComparison | undefined {\n if (baseline === undefined && candidate === undefined) return undefined;\n const delta =\n baseline !== undefined && candidate !== undefined\n ? candidate - baseline\n : undefined;\n let regression =\n delta !== undefined &&\n ((higherIsWorse && delta > 0) || (!higherIsWorse && delta < 0));\n if (\n regression &&\n maxRelativeDelta !== undefined &&\n baseline !== undefined &&\n baseline !== 0 &&\n delta !== undefined\n ) {\n const relative = Math.abs(delta / baseline);\n if (relative <= maxRelativeDelta) regression = false;\n }\n return {\n metric,\n baseline,\n candidate,\n delta,\n regression,\n message: `${label}: baseline=${baseline ?? \"n/a\"} candidate=${candidate ?? \"n/a\"}${\n delta !== undefined ? ` (delta ${delta})` : \"\"\n }`,\n };\n}\n\nfunction pickAggregate(\n groups: readonly CohortAggregateMetrics[],\n cohortLabel: string,\n groupKey?: string,\n): CohortAggregateMetrics | undefined {\n return groups.find(\n (group) =>\n group.cohortLabel === cohortLabel &&\n (groupKey === undefined || group.groupKey === groupKey),\n );\n}\n\nexport function compareCohortAggregates(\n groups: readonly CohortAggregateMetrics[],\n options: {\n baseline: string;\n candidate: string;\n metrics: readonly CohortMetricId[];\n groupKey?: string;\n maxRelativeDelta?: number;\n },\n): CohortMetricComparison[] {\n const baselineAgg = pickAggregate(groups, options.baseline, options.groupKey);\n const candidateAgg = pickAggregate(groups, options.candidate, options.groupKey);\n const comparisons: CohortMetricComparison[] = [];\n const tolerance = options.maxRelativeDelta;\n\n for (const metric of options.metrics) {\n switch (metric) {\n case \"errorRate\": {\n const item = compareNumber(\n metric,\n \"Error rate\",\n baselineAgg?.errorRate,\n candidateAgg?.errorRate,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"duration\": {\n const item = compareNumber(\n metric,\n \"Average duration (ms)\",\n baselineAgg?.avgDurationMs,\n candidateAgg?.avgDurationMs,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"llmCallCount\": {\n const item = compareNumber(\n metric,\n \"Average LLM calls\",\n baselineAgg?.avgLlmCallCount,\n candidateAgg?.avgLlmCallCount,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"tokenUsage\": {\n const item = compareNumber(\n metric,\n \"Average token usage\",\n baselineAgg?.avgTokenUsage,\n candidateAgg?.avgTokenUsage,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"retryCount\": {\n const item = compareNumber(\n metric,\n \"Average retries\",\n baselineAgg?.avgRetryCount,\n candidateAgg?.avgRetryCount,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"observationFailure\": {\n const item = compareNumber(\n metric,\n \"Observation failure rate\",\n baselineAgg?.observationFailureRate,\n candidateAgg?.observationFailureRate,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"toolChoice\": {\n const baselineValue = baselineAgg?.dominantToolChoice;\n const candidateValue = candidateAgg?.dominantToolChoice;\n comparisons.push({\n metric,\n baseline: baselineValue,\n candidate: candidateValue,\n delta: baselineValue === candidateValue ? \"same\" : \"changed\",\n regression: baselineValue !== candidateValue,\n message: `Tool choice: baseline=${baselineValue ?? \"n/a\"} candidate=${candidateValue ?? \"n/a\"}`,\n });\n break;\n }\n case \"toolOrdering\": {\n const baselineValue = baselineAgg?.toolOrderingSignature;\n const candidateValue = candidateAgg?.toolOrderingSignature;\n comparisons.push({\n metric,\n baseline: baselineValue,\n candidate: candidateValue,\n delta: baselineValue === candidateValue ? \"same\" : \"changed\",\n regression: baselineValue !== candidateValue,\n message: `Tool ordering: baseline=${baselineValue ?? \"n/a\"} candidate=${candidateValue ?? \"n/a\"}`,\n });\n break;\n }\n case \"guardrailFailure\": {\n const item = compareNumber(\n metric,\n \"Guardrail failures\",\n baselineAgg?.avgGuardrailFailures,\n candidateAgg?.avgGuardrailFailures,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"circuitViolation\": {\n const item = compareNumber(\n metric,\n \"Circuit violations\",\n baselineAgg?.avgCircuitViolations,\n candidateAgg?.avgCircuitViolations,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"redactionWarning\": {\n const item = compareNumber(\n metric,\n \"Redaction warnings\",\n baselineAgg?.avgRedactionWarnings,\n candidateAgg?.avgRedactionWarnings,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n default:\n break;\n }\n }\n\n return comparisons;\n}\n","import { extractSessionWorkflowMetadata } from \"../sessions/metadata.js\";\nimport type { SessionRunRecord } from \"../sessions/types.js\";\n\nexport function parseCohortMetricList(value: string | undefined): string[] {\n if (value === undefined || value.trim() === \"\") return [];\n return value\n .split(\",\")\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n}\n\nexport function parseGroupBySpec(groupBy: string | undefined): {\n kind: \"model\" | \"session\" | \"group\" | \"metadata\";\n metadataKey?: string;\n} {\n const raw = (groupBy ?? \"model\").trim();\n if (raw === \"model\") return { kind: \"model\" };\n if (raw === \"session\") return { kind: \"session\" };\n if (raw === \"group\") return { kind: \"group\" };\n if (raw.startsWith(\"metadata.\")) {\n const metadataKey = raw.slice(\"metadata.\".length).trim();\n if (metadataKey === \"\") throw new Error(\"metadata group-by requires a key.\");\n return { kind: \"metadata\", metadataKey };\n }\n throw new Error(`Unsupported --group-by value: ${raw}`);\n}\n\nfunction metadataString(\n metadata: Record<string, unknown> | undefined,\n key: string,\n): string | undefined {\n const value = metadata?.[key];\n return typeof value === \"string\" && value.trim() !== \"\" ? value.trim() : undefined;\n}\n\nexport function resolveRunGroupKey(\n run: SessionRunRecord,\n groupBy: ReturnType<typeof parseGroupBySpec>,\n): string {\n const metadata = run.metadata ?? {};\n switch (groupBy.kind) {\n case \"model\":\n return metadataString(metadata, \"model\") ?? \"unknown\";\n case \"session\":\n return (\n extractSessionWorkflowMetadata(metadata)?.sessionId ??\n metadataString(metadata, \"sessionId\") ??\n \"__unscoped__\"\n );\n case \"group\":\n return (\n extractSessionWorkflowMetadata(metadata)?.groupId ??\n metadataString(metadata, \"groupId\") ??\n \"__unscoped__\"\n );\n case \"metadata\":\n return metadataString(metadata, groupBy.metadataKey!) ?? \"__missing__\";\n default:\n return \"unknown\";\n }\n}\n\nexport function resolveCohortLabel(\n run: SessionRunRecord,\n cohortKey: string,\n baseline?: string,\n candidate?: string,\n): string | undefined {\n const label = metadataString(run.metadata, cohortKey);\n if (label === undefined) return undefined;\n if (baseline !== undefined && label === baseline) return baseline;\n if (candidate !== undefined && label === candidate) return candidate;\n if (baseline === undefined && candidate === undefined) return label;\n return undefined;\n}\n\nexport function filterRunsForCohort(\n runs: readonly SessionRunRecord[],\n options: {\n cohortKey: string;\n baseline?: string;\n candidate?: string;\n },\n): { runs: SessionRunRecord[]; warnings: string[] } {\n const warnings: string[] = [];\n if (options.baseline === undefined && options.candidate === undefined) {\n return { runs: [...runs], warnings };\n }\n\n const selected: SessionRunRecord[] = [];\n for (const run of runs) {\n const label = resolveCohortLabel(\n run,\n options.cohortKey,\n options.baseline,\n options.candidate,\n );\n if (label !== undefined) selected.push(run);\n }\n\n if (selected.length === 0) {\n warnings.push(\n `No runs matched baseline/candidate labels on metadata.${options.cohortKey}.`,\n );\n }\n\n return { runs: selected, warnings };\n}\n","import { extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { buildRunSummary } from \"../trace-metadata.js\";\nimport { readTraceEventsFromFile } from \"../storage.js\";\nimport type { StepStartedEvent, TraceEvent } from \"../types.js\";\nimport type { CohortRunMetrics } from \"./types.js\";\n\nfunction asNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction toolSteps(events: readonly TraceEvent[]): { choices: string[]; ordering: string[] } {\n const ordering: string[] = [];\n const choices = new Set<string>();\n const sorted = [...events]\n .filter((event) => event.event === \"step_started\")\n .sort((a, b) => a.timestamp - b.timestamp);\n for (const event of sorted) {\n const step = event as StepStartedEvent;\n if (step.type !== \"tool\") continue;\n const name =\n typeof step.metadata?.toolName === \"string\"\n ? step.metadata.toolName\n : step.name;\n ordering.push(name);\n choices.add(name);\n }\n return { choices: [...choices].sort(), ordering };\n}\n\nexport async function computeCohortRunMetrics(input: {\n runId: string;\n filePath: string;\n metadata?: Record<string, unknown>;\n status?: CohortRunMetrics[\"status\"];\n durationMs?: number;\n groupKey: string;\n cohortLabel?: string;\n}): Promise<CohortRunMetrics> {\n const events = await readTraceEventsFromFile(input.filePath);\n const summary = buildRunSummary(events);\n const tools = toolSteps(events);\n const outcomes = extractOutcomesFromTraceEvents(events);\n const observationFailures = outcomes.filter((item) => item.status === \"failed\").length;\n\n const metadata = input.metadata ?? {};\n const retryCount =\n asNumber(metadata.attempt) !== undefined && asNumber(metadata.attempt)! > 1\n ? asNumber(metadata.attempt)! - 1\n : typeof metadata.retryOf === \"string\"\n ? 1\n : 0;\n\n return {\n runId: input.runId,\n ...(input.cohortLabel !== undefined ? { cohortLabel: input.cohortLabel } : {}),\n groupKey: input.groupKey,\n status: summary.status,\n error: summary.status === \"error\",\n durationMs: summary.durationMs ?? input.durationMs,\n llmCallCount: summary.llmSteps,\n tokenUsageTotal: summary.totalTokens?.total,\n retryCount,\n observationFailures,\n guardrailFailures: asNumber(metadata.guardrailFailures) ?? 0,\n circuitViolations: asNumber(metadata.circuitViolations) ?? 0,\n redactionWarnings: asNumber(metadata.redactionWarnings) ?? 0,\n toolChoices: tools.choices,\n toolOrdering: tools.ordering,\n };\n}\n\nfunction percentile(values: number[], p: number): number | undefined {\n if (values.length === 0) return undefined;\n const sorted = [...values].sort((a, b) => a - b);\n const idx = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n );\n return sorted[idx];\n}\n\nfunction dominantToolChoice(runs: readonly CohortRunMetrics[]): string | undefined {\n const counts = new Map<string, number>();\n for (const run of runs) {\n const signature = run.toolChoices.join(\",\");\n if (signature === \"\") continue;\n counts.set(signature, (counts.get(signature) ?? 0) + 1);\n }\n let best: string | undefined;\n let bestCount = 0;\n for (const [key, count] of counts) {\n if (count > bestCount) {\n best = key;\n bestCount = count;\n }\n }\n return best;\n}\n\nfunction orderingSignature(runs: readonly CohortRunMetrics[]): string | undefined {\n const counts = new Map<string, number>();\n for (const run of runs) {\n const signature = run.toolOrdering.join(\">\");\n if (signature === \"\") continue;\n counts.set(signature, (counts.get(signature) ?? 0) + 1);\n }\n let best: string | undefined;\n let bestCount = 0;\n for (const [key, count] of counts) {\n if (count > bestCount) {\n best = key;\n bestCount = count;\n }\n }\n return best;\n}\n\nexport function aggregateCohortMetrics(\n runs: readonly CohortRunMetrics[],\n groupKey: string,\n cohortLabel?: string,\n) {\n const durations = runs\n .map((run) => run.durationMs)\n .filter((value): value is number => typeof value === \"number\");\n const tokenValues = runs\n .map((run) => run.tokenUsageTotal)\n .filter((value): value is number => typeof value === \"number\");\n const errors = runs.filter((run) => run.error).length;\n const observationFailures = runs.reduce((sum, run) => sum + run.observationFailures, 0);\n\n return {\n groupKey,\n ...(cohortLabel !== undefined ? { cohortLabel } : {}),\n runCount: runs.length,\n errorRate: runs.length > 0 ? errors / runs.length : 0,\n avgDurationMs:\n durations.length > 0\n ? durations.reduce((sum, value) => sum + value, 0) / durations.length\n : undefined,\n p95DurationMs: percentile(durations, 95),\n avgLlmCallCount:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.llmCallCount, 0) / runs.length\n : 0,\n avgTokenUsage:\n tokenValues.length > 0\n ? tokenValues.reduce((sum, value) => sum + value, 0) / tokenValues.length\n : undefined,\n avgRetryCount:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.retryCount, 0) / runs.length\n : 0,\n observationFailureRate:\n runs.length > 0 ? observationFailures / runs.length : 0,\n avgGuardrailFailures:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.guardrailFailures, 0) / runs.length\n : 0,\n avgCircuitViolations:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.circuitViolations, 0) / runs.length\n : 0,\n avgRedactionWarnings:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.redactionWarnings, 0) / runs.length\n : 0,\n dominantToolChoice: dominantToolChoice(runs),\n toolOrderingSignature: orderingSignature(runs),\n };\n}\n","import type { SessionRunRecord } from \"../sessions/types.js\";\nimport { compareCohortAggregates } from \"./compare.js\";\nimport {\n filterRunsForCohort,\n parseGroupBySpec,\n resolveCohortLabel,\n resolveRunGroupKey,\n} from \"./grouping.js\";\nimport { aggregateCohortMetrics, computeCohortRunMetrics } from \"./metrics.js\";\nimport {\n COHORT_METRIC_IDS,\n type AnalyzeCohortOptions,\n type CohortAnalysisResult,\n type CohortMetricComparison,\n type CohortMetricId,\n} from \"./types.js\";\n\nconst DEFAULT_METRICS: CohortMetricId[] = [\n \"errorRate\",\n \"duration\",\n \"toolChoice\",\n \"observationFailure\",\n];\n\nfunction normalizeMetrics(metrics: CohortMetricId[] | undefined): CohortMetricId[] {\n if (metrics === undefined || metrics.length === 0) return [...DEFAULT_METRICS];\n const allowed = new Set(COHORT_METRIC_IDS);\n return metrics.filter((metric) => allowed.has(metric));\n}\n\nexport async function analyzeCohort(\n runsInput: readonly SessionRunRecord[],\n options: AnalyzeCohortOptions,\n): Promise<CohortAnalysisResult> {\n const cohortKey = options.cohortKey ?? \"cohort\";\n const groupBySpec = parseGroupBySpec(options.groupBy);\n const metrics = normalizeMetrics(options.metrics);\n const { runs: filteredRuns, warnings } = filterRunsForCohort(runsInput, {\n cohortKey,\n baseline: options.baseline,\n candidate: options.candidate,\n });\n\n const runMetrics = [];\n for (const run of filteredRuns) {\n if (run.filePath === undefined) continue;\n const cohortLabel = resolveCohortLabel(\n run,\n cohortKey,\n options.baseline,\n options.candidate,\n );\n runMetrics.push(\n await computeCohortRunMetrics({\n runId: run.runId,\n filePath: run.filePath,\n metadata: run.metadata,\n status: run.status,\n durationMs: run.durationMs,\n groupKey: resolveRunGroupKey(run, groupBySpec),\n cohortLabel,\n }),\n );\n }\n\n const groupMap = new Map<string, typeof runMetrics>();\n for (const run of runMetrics) {\n const key = `${run.cohortLabel ?? \"*\"}::${run.groupKey}`;\n const bucket = groupMap.get(key) ?? [];\n bucket.push(run);\n groupMap.set(key, bucket);\n }\n\n const groups = [...groupMap.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([, bucket]) =>\n aggregateCohortMetrics(\n bucket,\n bucket[0]!.groupKey,\n bucket[0]?.cohortLabel,\n ),\n );\n\n const comparisons =\n options.baseline !== undefined && options.candidate !== undefined\n ? (() => {\n const groupKeys = [\n ...new Set(groups.map((group) => group.groupKey)),\n ].sort((a, b) => a.localeCompare(b));\n const items: CohortMetricComparison[] = [];\n const minSample = options.tolerance?.minSampleSize ?? 1;\n for (const groupKey of groupKeys) {\n const baselineGroup = groups.find(\n (group) => group.groupKey === groupKey && group.cohortLabel === options.baseline,\n );\n const candidateGroup = groups.find(\n (group) => group.groupKey === groupKey && group.cohortLabel === options.candidate,\n );\n if (\n (baselineGroup && baselineGroup.runCount < minSample) ||\n (candidateGroup && candidateGroup.runCount < minSample)\n ) {\n warnings.push(\n `Insufficient sample for group ${groupKey}: need at least ${minSample} run(s) per cohort.`,\n );\n continue;\n }\n items.push(\n ...compareCohortAggregates(groups, {\n baseline: options.baseline,\n candidate: options.candidate,\n metrics,\n groupKey,\n maxRelativeDelta: options.tolerance?.maxRelativeDelta,\n }),\n );\n }\n return items;\n })()\n : [];\n\n const regression = comparisons.some((item) => item.regression);\n\n return {\n ok: !regression,\n traceDir: options.traceDir,\n ...(options.baseline !== undefined ? { baseline: options.baseline } : {}),\n ...(options.candidate !== undefined ? { candidate: options.candidate } : {}),\n cohortKey,\n groupBy: options.groupBy ?? \"model\",\n metrics,\n groups,\n comparisons,\n runs: runMetrics,\n warnings,\n };\n}\n","import { escapeHtml } from \"../exporters/helpers.js\";\nimport type { CohortAnalysisResult, RenderCohortReportOptions } from \"./types.js\";\n\nfunction formatRate(value: number | undefined): string {\n if (value === undefined) return \"n/a\";\n return `${(value * 100).toFixed(1)}%`;\n}\n\nexport function renderCohortSummaryMarkdown(result: CohortAnalysisResult): string {\n const lines: string[] = [];\n lines.push(\"# Cohort analysis\");\n lines.push(\"\");\n lines.push(`Trace directory: \\`${result.traceDir}\\``);\n lines.push(`Group by: \\`${result.groupBy}\\``);\n if (result.baseline !== undefined && result.candidate !== undefined) {\n lines.push(\n `Baseline/Candidate key: \\`${result.cohortKey}\\` (${result.baseline} vs ${result.candidate})`,\n );\n }\n lines.push(`Status: **${result.ok ? \"PASS\" : \"REGRESSION\"}**`);\n lines.push(\"\");\n\n if (result.warnings.length > 0) {\n lines.push(\"## Warnings\");\n for (const warning of result.warnings) lines.push(`- ${warning}`);\n lines.push(\"\");\n }\n\n lines.push(\"## Groups\");\n for (const group of result.groups) {\n lines.push(\n `### ${group.cohortLabel ?? \"all\"} / ${group.groupKey} (${group.runCount} runs)`,\n );\n lines.push(`- Error rate: ${formatRate(group.errorRate)}`);\n if (group.avgDurationMs !== undefined) {\n lines.push(`- Avg duration: ${Math.round(group.avgDurationMs)} ms`);\n }\n if (group.dominantToolChoice !== undefined) {\n lines.push(`- Dominant tools: ${group.dominantToolChoice}`);\n }\n lines.push(\n `- Observation failure rate: ${formatRate(group.observationFailureRate)}`,\n );\n lines.push(\"\");\n }\n\n if (result.comparisons.length > 0) {\n lines.push(\"## Comparisons\");\n for (const comparison of result.comparisons) {\n const flag = comparison.regression ? \" **REGRESSION**\" : \"\";\n lines.push(`- ${comparison.message}${flag}`);\n }\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderCohortReportHtml(result: CohortAnalysisResult): string {\n const rows = result.groups\n .map(\n (group) =>\n `<tr><td>${escapeHtml(group.cohortLabel ?? \"all\")}</td><td>${escapeHtml(group.groupKey)}</td><td>${group.runCount}</td><td>${escapeHtml(formatRate(group.errorRate))}</td><td>${group.avgDurationMs !== undefined ? Math.round(group.avgDurationMs) : \"n/a\"}</td></tr>`,\n )\n .join(\"\");\n\n const comparisons = result.comparisons\n .map(\n (item) =>\n `<li>${escapeHtml(item.message)}${item.regression ? \" <strong>REGRESSION</strong>\" : \"\"}</li>`,\n )\n .join(\"\");\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\" />\n <title>Cohort report</title>\n <style>\n body { font-family: system-ui, sans-serif; margin: 2rem; }\n table { border-collapse: collapse; width: 100%; }\n th, td { border: 1px solid #ddd; padding: 0.5rem; text-align: left; }\n th { background: #f6f6f6; }\n </style>\n</head>\n<body>\n <h1>Cohort analysis</h1>\n <p>Status: <strong>${result.ok ? \"PASS\" : \"REGRESSION\"}</strong></p>\n <p>Trace directory: <code>${escapeHtml(result.traceDir)}</code></p>\n <h2>Groups</h2>\n <table>\n <thead><tr><th>Cohort</th><th>Group</th><th>Runs</th><th>Error rate</th><th>Avg duration (ms)</th></tr></thead>\n <tbody>${rows}</tbody>\n </table>\n ${result.comparisons.length > 0 ? `<h2>Comparisons</h2><ul>${comparisons}</ul>` : \"\"}\n</body>\n</html>`;\n}\n\nexport function renderCohortReport(\n result: CohortAnalysisResult,\n options: RenderCohortReportOptions = {},\n): string {\n const format = options.format ?? \"markdown\";\n if (format === \"json\") return JSON.stringify(result, null, 2);\n if (format === \"html\") return renderCohortReportHtml(result);\n return renderCohortSummaryMarkdown(result);\n}\n","export function parseGateList(value: string | undefined): string[] {\n if (value === undefined || value.trim() === \"\") return [];\n return value\n .split(\",\")\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n}\n\nexport function parseGateNumber(\n value: string | undefined,\n label: string,\n options: { min?: number; max?: number } = {},\n): number | undefined {\n if (value === undefined || value.trim() === \"\") return undefined;\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) {\n throw new Error(`Invalid ${label}: ${value}`);\n }\n if (options.min !== undefined && parsed < options.min) {\n throw new Error(`${label} must be at least ${options.min}.`);\n }\n if (options.max !== undefined && parsed > options.max) {\n throw new Error(`${label} must be at most ${options.max}.`);\n }\n return parsed;\n}\n","import { extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { readTraceEventsFromFile } from \"../storage.js\";\nimport { computeCohortRunMetrics } from \"../cohort/metrics.js\";\nimport type { SessionRunRecord } from \"../sessions/types.js\";\nimport type { GateCheckResult, RunGateOptions } from \"./types.js\";\n\nfunction percentile(values: number[], p: number): number | undefined {\n if (values.length === 0) return undefined;\n const sorted = [...values].sort((a, b) => a - b);\n const idx = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n );\n return sorted[idx];\n}\n\nfunction hasThresholds(options: RunGateOptions): boolean {\n return (\n options.maxErrorRate !== undefined ||\n options.maxP95DurationMs !== undefined ||\n (options.forbidTools?.length ?? 0) > 0 ||\n (options.requireObservations?.length ?? 0) > 0\n );\n}\n\nexport function gateHasThresholds(options: RunGateOptions): boolean {\n return hasThresholds(options);\n}\n\nasync function loadRunMetrics(runs: readonly SessionRunRecord[]) {\n const metrics = [];\n for (const run of runs) {\n if (run.filePath === undefined) continue;\n metrics.push(\n await computeCohortRunMetrics({\n runId: run.runId,\n filePath: run.filePath,\n metadata: run.metadata,\n status: run.status,\n durationMs: run.durationMs,\n groupKey: \"all\",\n }),\n );\n }\n return metrics;\n}\n\nasync function observationStatus(\n filePath: string,\n name: string,\n): Promise<\"passed\" | \"failed\" | \"missing\"> {\n const events = await readTraceEventsFromFile(filePath);\n const outcomes = extractOutcomesFromTraceEvents(events);\n const match = outcomes.find((item) => item.name === name);\n if (!match) return \"missing\";\n return match.status === \"passed\" ? \"passed\" : \"failed\";\n}\n\nexport async function evaluateGateThresholds(\n runs: readonly SessionRunRecord[],\n options: RunGateOptions,\n): Promise<{ checks: GateCheckResult[]; readErrors: string[] }> {\n const checks: GateCheckResult[] = [];\n const readErrors: string[] = [];\n\n if (!hasThresholds(options)) {\n return { checks, readErrors };\n }\n\n if (runs.length === 0) {\n readErrors.push(\"No trace runs found in the gate directory.\");\n return { checks, readErrors };\n }\n\n let runMetrics;\n try {\n runMetrics = await loadRunMetrics(runs);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n readErrors.push(message);\n return { checks, readErrors };\n }\n\n if (options.maxErrorRate !== undefined) {\n const errors = runMetrics.filter((run) => run.error).length;\n const actual = runMetrics.length > 0 ? (errors / runMetrics.length) * 100 : 0;\n const ok = actual <= options.maxErrorRate;\n checks.push({\n id: \"maxErrorRate\",\n name: \"Max error rate\",\n ok,\n expected: options.maxErrorRate,\n actual: Math.round(actual * 10) / 10,\n message: ok\n ? `Error rate ${actual.toFixed(1)}% within limit ${options.maxErrorRate}%`\n : `Error rate ${actual.toFixed(1)}% exceeds limit ${options.maxErrorRate}%`,\n });\n }\n\n if (options.maxP95DurationMs !== undefined) {\n const durations = runMetrics\n .map((run) => run.durationMs)\n .filter((value): value is number => typeof value === \"number\");\n const actual = percentile(durations, 95);\n const ok = actual !== undefined && actual <= options.maxP95DurationMs;\n checks.push({\n id: \"maxP95Duration\",\n name: \"Max p95 duration (ms)\",\n ok,\n expected: options.maxP95DurationMs,\n actual: actual ?? \"n/a\",\n message:\n actual === undefined\n ? \"No duration samples available for p95 check.\"\n : ok\n ? `P95 duration ${Math.round(actual)} ms within limit ${options.maxP95DurationMs} ms`\n : `P95 duration ${Math.round(actual)} ms exceeds limit ${options.maxP95DurationMs} ms`,\n });\n }\n\n for (const tool of options.forbidTools ?? []) {\n let violated = false;\n for (const run of runMetrics) {\n const used =\n run.toolChoices.includes(tool) || run.toolOrdering.includes(tool);\n if (used) {\n violated = true;\n checks.push({\n id: \"forbidTool\",\n name: `Forbid tool: ${tool}`,\n ok: false,\n expected: `not used`,\n actual: \"used\",\n runId: run.runId,\n message: `Forbidden tool \"${tool}\" used in run ${run.runId}`,\n });\n }\n }\n if (!violated) {\n checks.push({\n id: \"forbidTool\",\n name: `Forbid tool: ${tool}`,\n ok: true,\n message: `Forbidden tool \"${tool}\" not used`,\n });\n }\n }\n\n for (const observation of options.requireObservations ?? []) {\n for (const run of runs) {\n if (run.filePath === undefined) continue;\n try {\n const status = await observationStatus(run.filePath, observation);\n const ok = status === \"passed\";\n checks.push({\n id: \"requireObservation\",\n name: `Require observation: ${observation}`,\n ok,\n expected: \"passed\",\n actual: status,\n runId: run.runId,\n message: ok\n ? `Observation \"${observation}\" passed in run ${run.runId}`\n : status === \"missing\"\n ? `Observation \"${observation}\" missing in run ${run.runId}`\n : `Observation \"${observation}\" failed in run ${run.runId}`,\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n readErrors.push(`Run ${run.runId}: ${message}`);\n }\n }\n }\n\n return { checks, readErrors };\n}\n\nexport function checksFromSuiteResult(\n suiteResult: import(\"../suite/types.js\").SuiteRunResult,\n): GateCheckResult[] {\n const checks: GateCheckResult[] = [\n {\n id: \"suite\",\n name: `Suite: ${suiteResult.suiteName}`,\n ok: suiteResult.ok,\n message: suiteResult.ok\n ? `Suite passed (${suiteResult.summary.passed} cases)`\n : `Suite failed (${suiteResult.summary.failed} failed, ${suiteResult.summary.errors} errors)`,\n },\n ];\n\n for (const suiteCase of suiteResult.cases) {\n if (suiteCase.status === \"pass\") continue;\n checks.push({\n id: \"suite\",\n name: `Case: ${suiteCase.id}`,\n ok: false,\n message: suiteCase.message ?? `Case status: ${suiteCase.status}`,\n });\n }\n\n return checks;\n}\n","import path from \"node:path\";\n\nimport { runSuite } from \"../suite/run.js\";\nimport type { GateCheckResult, GateExitCode, GateResult, RunGateOptions } from \"./types.js\";\nimport { checksFromSuiteResult, evaluateGateThresholds, gateHasThresholds } from \"./evaluate.js\";\n\nfunction resolveExitCode(input: {\n ok: boolean;\n configError: boolean;\n readError: boolean;\n}): GateExitCode {\n if (input.configError) return 2;\n if (input.readError) return 3;\n if (!input.ok) return 1;\n return 0;\n}\n\nfunction validateOptions(options: RunGateOptions): string[] {\n const errors: string[] = [];\n const hasSuite = options.suitePath !== undefined && options.suitePath.trim() !== \"\";\n const hasThresholds = gateHasThresholds(options);\n\n if (!hasSuite && !hasThresholds) {\n errors.push(\n \"No gate rules specified. Pass --suite or at least one threshold flag.\",\n );\n }\n\n if (hasThresholds && (options.traceDir === undefined || options.traceDir.trim() === \"\")) {\n if (!hasSuite) {\n errors.push(\"Threshold flags require --dir <trace-directory>.\");\n }\n }\n\n if (options.maxErrorRate !== undefined && options.maxErrorRate < 0) {\n errors.push(\"--max-error-rate must be a non-negative percentage.\");\n }\n if (options.maxErrorRate !== undefined && options.maxErrorRate > 100) {\n errors.push(\"--max-error-rate must be at most 100.\");\n }\n\n if (options.maxP95DurationMs !== undefined && options.maxP95DurationMs < 0) {\n errors.push(\"--max-p95-duration must be a non-negative millisecond value.\");\n }\n\n return errors;\n}\n\nfunction isConfigLoadError(error: unknown): boolean {\n if (!(error instanceof Error)) return false;\n const ext = path.extname(error.message);\n if (error.message.includes(\"Unsupported suite config extension\")) return true;\n if (error.message.includes(\"TypeScript suite configs require\")) return true;\n if (error.message.includes(\"No suite config found\")) return true;\n if (error.message.includes(\"AI_SUITE_CONFIG\")) return true;\n if (ext === \".ts\" || ext === \".mts\" || ext === \".cts\") return true;\n return \"diagnostics\" in error;\n}\n\nexport async function runGate(\n runs: readonly import(\"../sessions/types.js\").SessionRunRecord[],\n options: RunGateOptions,\n): Promise<GateResult> {\n const diagnostics: string[] = [];\n const checks: GateCheckResult[] = [];\n\n const validationErrors = validateOptions(options);\n if (validationErrors.length > 0) {\n return {\n ok: false,\n exitCode: 2,\n runCount: 0,\n checks,\n diagnostics: validationErrors,\n };\n }\n\n let traceDir = options.traceDir?.trim();\n let suiteResult: GateResult[\"suiteResult\"];\n\n if (options.suitePath !== undefined && options.suitePath.trim() !== \"\") {\n try {\n suiteResult = await runSuite({\n configPath: options.suitePath,\n cwd: options.cwd,\n });\n traceDir = traceDir ?? suiteResult.tracesDir;\n checks.push(...checksFromSuiteResult(suiteResult));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n diagnostics.push(message);\n return {\n ok: false,\n exitCode: isConfigLoadError(error) ? 2 : 3,\n traceDir,\n suitePath: options.suitePath,\n runCount: 0,\n checks,\n diagnostics,\n };\n }\n }\n\n if (gateHasThresholds(options)) {\n const thresholdDir = traceDir;\n if (thresholdDir === undefined || thresholdDir.trim() === \"\") {\n return {\n ok: false,\n exitCode: 2,\n traceDir,\n suitePath: options.suitePath,\n runCount: runs.length,\n checks,\n diagnostics: [\"Threshold evaluation requires a trace directory.\"],\n ...(suiteResult !== undefined ? { suiteResult } : {}),\n };\n }\n\n const thresholdRuns = runs.length > 0 ? runs : [];\n const { checks: thresholdChecks, readErrors } = await evaluateGateThresholds(\n thresholdRuns,\n options,\n );\n checks.push(...thresholdChecks);\n diagnostics.push(...readErrors);\n\n if (readErrors.length > 0) {\n const ok = checks.length > 0 && checks.every((item) => item.ok);\n return {\n ok,\n exitCode: resolveExitCode({\n ok,\n configError: false,\n readError: true,\n }),\n traceDir: thresholdDir,\n suitePath: options.suitePath,\n runCount: thresholdRuns.length,\n checks,\n diagnostics,\n ...(suiteResult !== undefined ? { suiteResult } : {}),\n };\n }\n }\n\n const ok = checks.length > 0 && checks.every((item) => item.ok);\n return {\n ok,\n exitCode: resolveExitCode({ ok, configError: false, readError: false }),\n traceDir,\n suitePath: options.suitePath,\n runCount: runs.length,\n checks,\n diagnostics,\n ...(suiteResult !== undefined ? { suiteResult } : {}),\n };\n}\n","import { escapeHtml } from \"../exporters/helpers.js\";\nimport type { GateResult, RenderGateReportOptions } from \"./types.js\";\n\nfunction escapeXml(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nexport function renderGateSummaryMarkdown(result: GateResult): string {\n const lines: string[] = [];\n lines.push(\"# AgentInspect gate\");\n lines.push(\"\");\n lines.push(`Status: **${result.ok ? \"PASS\" : \"FAIL\"}** (exit ${result.exitCode})`);\n if (result.traceDir !== undefined) {\n lines.push(`Trace directory: \\`${result.traceDir}\\``);\n }\n if (result.suitePath !== undefined) {\n lines.push(`Suite config: \\`${result.suitePath}\\``);\n }\n lines.push(`Runs evaluated: ${result.runCount}`);\n lines.push(\"\");\n\n if (result.diagnostics.length > 0) {\n lines.push(\"## Diagnostics\");\n for (const item of result.diagnostics) lines.push(`- ${item}`);\n lines.push(\"\");\n }\n\n lines.push(\"## Checks\");\n for (const check of result.checks) {\n const flag = check.ok ? \"PASS\" : \"FAIL\";\n lines.push(`- [${flag}] ${check.name}: ${check.message}`);\n }\n lines.push(\"\");\n\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderGateGithubStepSummary(result: GateResult): string {\n const lines: string[] = [];\n lines.push(`## AgentInspect gate: ${result.ok ? \"PASS\" : \"FAIL\"}`);\n lines.push(\"\");\n lines.push(\"| Check | Status | Details |\");\n lines.push(\"| --- | --- | --- |\");\n for (const check of result.checks) {\n lines.push(\n `| ${check.name} | ${check.ok ? \"pass\" : \"fail\"} | ${check.message.replace(/\\|/g, \"/\")} |`,\n );\n }\n if (result.diagnostics.length > 0) {\n lines.push(\"\");\n lines.push(\"**Diagnostics**\");\n for (const item of result.diagnostics) lines.push(`- ${item}`);\n }\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderGateReportHtml(result: GateResult): string {\n const rows = result.checks\n .map(\n (check) =>\n `<tr><td>${escapeHtml(check.name)}</td><td>${check.ok ? \"PASS\" : \"FAIL\"}</td><td>${escapeHtml(check.message)}</td></tr>`,\n )\n .join(\"\");\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\" />\n <title>Gate report</title>\n <style>\n body { font-family: system-ui, sans-serif; margin: 2rem; }\n table { border-collapse: collapse; width: 100%; }\n th, td { border: 1px solid #ddd; padding: 0.5rem; text-align: left; }\n th { background: #f6f6f6; }\n </style>\n</head>\n<body>\n <h1>AgentInspect gate</h1>\n <p>Status: <strong>${result.ok ? \"PASS\" : \"FAIL\"}</strong> (exit ${result.exitCode})</p>\n <h2>Checks</h2>\n <table>\n <thead><tr><th>Check</th><th>Status</th><th>Details</th></tr></thead>\n <tbody>${rows}</tbody>\n </table>\n</body>\n</html>`;\n}\n\nexport function renderGateJUnit(result: GateResult): string {\n const failures = result.checks.filter((check) => !check.ok).length;\n const tests = result.checks.length;\n const cases = result.checks\n .map((check) => {\n if (check.ok) {\n return ` <testcase name=\"${escapeXml(check.name)}\" classname=\"gate\" />`;\n }\n return ` <testcase name=\"${escapeXml(check.name)}\" classname=\"gate\">\n <failure message=\"${escapeXml(check.message)}\">${escapeXml(check.message)}</failure>\n </testcase>`;\n })\n .join(\"\\n\");\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites tests=\"${tests}\" failures=\"${failures}\" errors=\"0\" time=\"0\">\n <testsuite name=\"agent-inspect-gate\" tests=\"${tests}\" failures=\"${failures}\" errors=\"0\" time=\"0\">\n${cases}\n </testsuite>\n</testsuites>`;\n}\n\n/**\n * Compact GitHub Actions workflow-command annotations for failed checks.\n * File/line are omitted when the gate has no source locations (typical for\n * trajectory thresholds).\n */\nexport function renderGateGithubAnnotations(result: GateResult): string {\n return result.checks\n .filter((check) => !check.ok)\n .map((check) => {\n const message = check.message.replace(/\\r?\\n/g, \" \").replace(/%/g, \"%25\");\n return `::error title=${check.name}::${message}`;\n })\n .join(\"\\n\");\n}\n\nexport function renderGateReport(\n result: GateResult,\n options: RenderGateReportOptions = {},\n): string {\n const format = options.format ?? \"markdown\";\n if (format === \"json\") return JSON.stringify(result, null, 2);\n if (format === \"json-compact\") {\n return JSON.stringify({\n ok: result.ok,\n exitCode: result.exitCode,\n failed: result.checks.filter((check) => !check.ok).map((check) => check.name),\n checks: result.checks.map((check) => ({\n name: check.name,\n ok: check.ok,\n message: check.message,\n })),\n });\n }\n if (format === \"html\") return renderGateReportHtml(result);\n if (format === \"junit\") return renderGateJUnit(result);\n if (format === \"github\") return renderGateGithubStepSummary(result);\n if (format === \"github-annotations\") return renderGateGithubAnnotations(result);\n return renderGateSummaryMarkdown(result);\n}\n","/**\n * Optional omitted-payload digest commitment helpers (6.22; preflight bound in 6.25.1).\n *\n * A digest proves bytes were observed/omitted; it is not redaction, authorization,\n * or a secret-management feature. AgentInspect does not hold HMAC keys.\n *\n * @experimental Available through `agent-inspect/advanced`.\n */\n\nimport { createHash } from \"node:crypto\";\n\nexport type OmittedPayloadAlgorithm = \"sha256\";\n\n/**\n * Bounded commitment recorded when payload bytes are intentionally omitted.\n *\n * @experimental\n */\nexport interface OmittedPayloadCommitment {\n algorithm: OmittedPayloadAlgorithm;\n digest: string;\n byteLength: number;\n contentType?: string;\n shape?: string;\n capturePolicy: \"omitted\" | \"preview-only\" | \"digest-only\";\n}\n\n/** Maximum input size accepted for digest commitment (1 MiB). */\nexport const OMITTED_PAYLOAD_MAX_DIGEST_INPUT_BYTES = 1024 * 1024;\n\n/**\n * Preflight byte length without allocating a full Buffer copy for oversized input.\n */\nexport function omittedPayloadByteLength(payload: string | Uint8Array): number {\n if (typeof payload === \"string\") {\n return Buffer.byteLength(payload, \"utf8\");\n }\n return payload.byteLength;\n}\n\n/**\n * Build a SHA-256 digest commitment for omitted payload bytes.\n * Throws if input exceeds the 1 MiB bound (checked before copying oversized strings).\n */\nexport function createOmittedPayloadCommitment(\n payload: string | Uint8Array,\n options: {\n contentType?: string;\n shape?: string;\n capturePolicy?: OmittedPayloadCommitment[\"capturePolicy\"];\n } = {},\n): OmittedPayloadCommitment {\n const byteLength = omittedPayloadByteLength(payload);\n if (byteLength > OMITTED_PAYLOAD_MAX_DIGEST_INPUT_BYTES) {\n throw new RangeError(\n `Omitted payload exceeds ${OMITTED_PAYLOAD_MAX_DIGEST_INPUT_BYTES} byte digest bound.`,\n );\n }\n // Strings: only allocate after preflight. Uint8Array: hash without Buffer.from copy.\n const digest =\n typeof payload === \"string\"\n ? createHash(\"sha256\").update(Buffer.from(payload, \"utf8\")).digest(\"hex\")\n : createHash(\"sha256\").update(payload).digest(\"hex\");\n return {\n algorithm: \"sha256\",\n digest,\n byteLength,\n ...(options.contentType !== undefined ? { contentType: options.contentType } : {}),\n ...(options.shape !== undefined ? { shape: options.shape } : {}),\n capturePolicy: options.capturePolicy ?? \"digest-only\",\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/adapters/preview-capture.ts","../src/causal-failure.ts","../src/explain.ts","../src/search.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/evidence/types.ts","../src/evidence/hash.ts","../src/evidence/paths.ts","../src/evidence/manifest.ts","../src/evidence/contract-binding.ts","../src/evidence/views.ts","../src/evidence/html-shell.ts","../src/evidence/views-contract.ts","../src/evidence/views-safety.ts","../src/evidence/zip.ts","../src/evidence/verify.ts","../src/evidence/ci.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/suite/templates.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","../src/safety/omitted-payload.ts"],"names":["observationStatus","warn","activityMs","path","packaged","diagnostic","access","readFile","percentile","hasThresholds","ok","createHash"],"mappings":"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","file":"advanced.mjs","sourcesContent":["/**\n * Shared bounded-preview capture used by the official framework adapters.\n *\n * Adapters own framework field selection; this module owns the parts that must\n * behave identically everywhere: safe serialization, `maxPreviewChars` bounds,\n * key/profile redaction before the value reaches an event, and stable\n * diagnostics when a requested field cannot be sourced.\n *\n * Previews are bounded and key-redacted, not sanitized. Review exports before\n * sharing.\n *\n * @experimental Adapter-facing helper; shape may change while the official\n * adapters remain experimental.\n */\nimport { Redactor } from \"../logs/redactor.js\";\nimport { resolveRedactionProfile } from \"../redaction-profiles.js\";\nimport type { RedactionRule } from \"../types/log-config.js\";\nimport type { RedactionProfile } from \"../types.js\";\n\n/** Default bound for adapter preview fields (characters). */\nexport const DEFAULT_ADAPTER_MAX_PREVIEW_CHARS = 200;\n\n/**\n * Capture policy shared by the official adapters.\n *\n * `metadata-only` is the default everywhere and never persists framework\n * payload content. `preview` opts into bounded, redacted previews.\n */\nexport type AdapterCaptureMode = \"metadata-only\" | \"preview\";\n\n/** Stable diagnostic codes emitted by shared preview capture. */\nexport const ADAPTER_CAPTURE_DIAGNOSTIC_CODES = [\n \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n \"AI_CAPTURE_PREVIEW_TRUNCATED\",\n \"AI_CAPTURE_PREVIEW_REDACTED\",\n] as const;\n\nexport type AdapterCaptureDiagnosticCode =\n (typeof ADAPTER_CAPTURE_DIAGNOSTIC_CODES)[number];\n\n/** One bounded diagnostic. Never contains preview content or filesystem paths. */\nexport interface AdapterCaptureDiagnostic {\n readonly code: AdapterCaptureDiagnosticCode;\n readonly message: string;\n /** Persisted attribute name the diagnostic refers to (e.g. `inputPreview`). */\n readonly field: string;\n readonly capture: AdapterCaptureMode;\n}\n\n/** Optional consumer hook for adapter capture diagnostics. */\nexport type AdapterDiagnosticListener = (\n diagnostic: AdapterCaptureDiagnostic,\n) => void;\n\n/** Preview capture options accepted by every official adapter. */\nexport interface AdapterPreviewCaptureOptions {\n /** Defaults to `metadata-only`. */\n capture?: AdapterCaptureMode;\n /** Redaction profile applied to preview values before they reach an event. */\n redactionProfile?: RedactionProfile;\n /** Upper bound for each serialized preview field. */\n maxPreviewChars?: number;\n /** Extra adapter-supplied redaction rules. */\n redact?: RedactionRule[];\n /** Receives bounded capture diagnostics. Listener failures are swallowed. */\n onDiagnostic?: AdapterDiagnosticListener;\n}\n\n/** Bounded capture counters for adapter `getDiagnostics()` surfaces. */\nexport interface AdapterCaptureDiagnostics {\n readonly capture: AdapterCaptureMode;\n readonly redactionProfile: RedactionProfile;\n readonly maxPreviewChars: number;\n readonly previewFieldsCaptured: number;\n readonly previewFieldsUnavailable: number;\n readonly previewFieldsTruncated: number;\n readonly previewFieldsRedacted: number;\n readonly lastDiagnosticCode?: AdapterCaptureDiagnosticCode;\n readonly lastDiagnosticMessage?: string;\n}\n\n/** Shared preview capture handle owned by one adapter instance. */\nexport interface AdapterPreviewCapture {\n /** Effective capture mode (adapters no longer downgrade `preview`). */\n readonly capture: AdapterCaptureMode;\n readonly previewEnabled: boolean;\n readonly maxPreviewChars: number;\n readonly redactionProfile: RedactionProfile;\n /** Normalizes a logical field to a persisted `*Preview` attribute name. */\n previewFieldName(field: string): string;\n /**\n * Returns a bounded, redacted preview string, or `undefined` when capture is\n * metadata-only or the field could not be sourced.\n */\n capturePreviewField(field: string, value: unknown): string | undefined;\n /** Writes every available preview onto `target` and returns it. */\n applyPreviewFields(\n target: Record<string, unknown>,\n fields: Record<string, unknown>,\n ): Record<string, unknown>;\n getDiagnostics(): AdapterCaptureDiagnostics;\n}\n\n/**\n * JSON-ish serialization that tolerates cycles, bigints, and throwing getters,\n * bounded to `maxChars`. Returns `undefined` for a non-positive bound or a\n * value JSON cannot represent.\n */\nexport function serializeAdapterPreview(\n value: unknown,\n maxChars: number,\n): string | undefined {\n if (!Number.isFinite(maxChars) || maxChars <= 0) return undefined;\n const serialized = serializePreviewValue(value);\n if (serialized === undefined) return undefined;\n return boundPreviewString(serialized, Math.floor(maxChars)).text;\n}\n\n/**\n * Resolves the effective preview bound. Profile caps apply so a `share` or\n * `strict` profile cannot be widened by a larger adapter option.\n */\nexport function resolveAdapterMaxPreviewChars(\n value: unknown,\n profile: RedactionProfile = \"local\",\n): number {\n const requested =\n typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? Math.floor(value)\n : DEFAULT_ADAPTER_MAX_PREVIEW_CHARS;\n const cap = resolveRedactionProfile(profile).maxPreviewLengthCap;\n return cap === undefined ? requested : Math.min(requested, cap);\n}\n\n/** Creates the shared preview capture handle for one adapter instance. */\nexport function createAdapterPreviewCapture(\n options: AdapterPreviewCaptureOptions = {},\n): AdapterPreviewCapture {\n const capture: AdapterCaptureMode =\n options.capture === \"preview\" ? \"preview\" : \"metadata-only\";\n const redactionProfile: RedactionProfile = options.redactionProfile ?? \"local\";\n const maxPreviewChars = resolveAdapterMaxPreviewChars(\n options.maxPreviewChars,\n redactionProfile,\n );\n const redactor = new Redactor({\n rules: options.redact,\n extraKeys: resolveRedactionProfile(redactionProfile).extraKeys,\n });\n\n const counters = {\n previewFieldsCaptured: 0,\n previewFieldsUnavailable: 0,\n previewFieldsTruncated: 0,\n previewFieldsRedacted: 0,\n };\n let lastDiagnosticCode: AdapterCaptureDiagnosticCode | undefined;\n let lastDiagnosticMessage: string | undefined;\n\n const emit = (\n code: AdapterCaptureDiagnosticCode,\n field: string,\n message: string,\n ): void => {\n lastDiagnosticCode = code;\n lastDiagnosticMessage = `${code}: ${message}`;\n try {\n options.onDiagnostic?.({ code, message, field, capture });\n } catch {\n // Consumer diagnostics must never throw into instrumented code.\n }\n };\n\n const previewFieldName = (field: string): string =>\n /preview$/i.test(field) ? field : `${field}Preview`;\n\n const capturePreviewField = (\n field: string,\n value: unknown,\n ): string | undefined => {\n if (capture !== \"preview\" || maxPreviewChars <= 0) return undefined;\n const name = previewFieldName(field);\n\n try {\n if (value === undefined) {\n counters.previewFieldsUnavailable += 1;\n emit(\n \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n name,\n `${name} was requested but this framework callback did not expose the field`,\n );\n return undefined;\n }\n\n // Normalize before redaction so cycles and hostile getters cannot reach\n // the key-based redactor, which walks plain structures only.\n const plain = toPlainPreviewValue(value);\n if (plain === UNSERIALIZABLE) {\n counters.previewFieldsUnavailable += 1;\n emit(\n \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n name,\n `${name} could not be serialized into a bounded preview`,\n );\n return undefined;\n }\n\n const serialized = serializePreviewValue(redactor.redactValue(name, plain));\n if (serialized === undefined) {\n counters.previewFieldsUnavailable += 1;\n emit(\n \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n name,\n `${name} could not be serialized into a bounded preview`,\n );\n return undefined;\n }\n\n if (containsRedactionMarker(serialized)) {\n counters.previewFieldsRedacted += 1;\n emit(\n \"AI_CAPTURE_PREVIEW_REDACTED\",\n name,\n `${name} matched the ${redactionProfile} redaction profile before persistence`,\n );\n }\n\n const bounded = boundPreviewString(serialized, maxPreviewChars);\n if (bounded.truncated) {\n counters.previewFieldsTruncated += 1;\n emit(\n \"AI_CAPTURE_PREVIEW_TRUNCATED\",\n name,\n `${name} was truncated to maxPreviewChars=${maxPreviewChars}`,\n );\n }\n\n counters.previewFieldsCaptured += 1;\n return bounded.text;\n } catch {\n counters.previewFieldsUnavailable += 1;\n emit(\n \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n name,\n `${name} could not be read from this framework callback`,\n );\n return undefined;\n }\n };\n\n return {\n capture,\n previewEnabled: capture === \"preview\",\n maxPreviewChars,\n redactionProfile,\n previewFieldName,\n capturePreviewField,\n applyPreviewFields(target, fields) {\n if (capture !== \"preview\") return target;\n for (const [field, value] of Object.entries(fields)) {\n const preview = capturePreviewField(field, value);\n if (preview !== undefined) target[previewFieldName(field)] = preview;\n }\n return target;\n },\n getDiagnostics() {\n return {\n capture,\n redactionProfile,\n maxPreviewChars,\n ...counters,\n ...(lastDiagnosticCode === undefined ? {} : { lastDiagnosticCode }),\n ...(lastDiagnosticMessage === undefined\n ? {}\n : { lastDiagnosticMessage }),\n };\n },\n };\n}\n\n/** Sentinel for a value JSON cannot represent at all. */\nconst UNSERIALIZABLE = Symbol(\"agent-inspect.preview.unserializable\");\n\nfunction toPlainPreviewValue(value: unknown): unknown {\n const json = serializePreviewValue(value);\n if (json === undefined) return UNSERIALIZABLE;\n try {\n return JSON.parse(json) as unknown;\n } catch {\n // `serializePreviewValue` fell back to `String(value)`.\n return json;\n }\n}\n\nfunction containsRedactionMarker(serialized: string): boolean {\n return serialized.includes(\"[REDACTED]\") || serialized.includes(\"[HASH:\");\n}\n\nfunction serializePreviewValue(value: unknown): string | undefined {\n try {\n const seen = new WeakSet<object>();\n return JSON.stringify(value, (_key, entry) => {\n if (typeof entry === \"bigint\") return entry.toString();\n if (typeof entry === \"function\" || typeof entry === \"symbol\") {\n return undefined;\n }\n if (typeof entry === \"object\" && entry !== null) {\n if (seen.has(entry)) return \"[Circular]\";\n seen.add(entry);\n }\n return entry;\n });\n } catch {\n try {\n return String(value);\n } catch {\n return undefined;\n }\n }\n}\n\nfunction boundPreviewString(\n value: string,\n maxChars: number,\n): { text: string; truncated: boolean } {\n if (value.length <= maxChars) return { text: value, truncated: false };\n return { text: `${value.slice(0, maxChars)}…`, truncated: true };\n}\n","/**\n * Conservative first-causal-failure analysis (v6.11+).\n *\n * @experimental Available through `agent-inspect/advanced`.\n */\nimport { extractOutcomesFromTraceEvents } from \"./outcomes/extract.js\";\nimport { buildRunTimeline } from \"./timeline.js\";\nimport type { StepCompletedEvent, StepStartedEvent, TraceEvent } from \"./types.js\";\n\nexport type CausalFailureKind =\n | \"explicit_error_event\"\n | \"failed_observed_outcome\"\n | \"contract_failure\"\n | \"failed_ancestor_or_child\"\n | \"none\";\n\nexport interface CausalContractFindingInput {\n ruleId: string;\n status: \"fail\" | \"pass\" | \"warning\" | string;\n /** Linked event/step ids from check evidence. */\n evidenceIds?: string[];\n message?: string;\n}\n\nexport interface FirstCausalFailure {\n kind: CausalFailureKind;\n /** Stable evidence ids (stepId / outcomeId / event-linked ids). No raw paths. */\n evidenceIds: string[];\n rationale: string;\n /** 1–4 when matched; 0 when none. */\n orderIndex: 0 | 1 | 2 | 3 | 4;\n runId?: string;\n primary?: {\n stepId?: string;\n outcomeId?: string;\n ruleId?: string;\n name?: string;\n };\n relationship?: {\n role: \"self\" | \"ancestor\" | \"child\";\n relatedIds: string[];\n };\n engine: \"conservative-causal-v1\";\n}\n\nexport interface FindFirstCausalFailureOptions {\n /** Optional contract/check failures (step 3). Omitted → skip contract stage. */\n contractFindings?: readonly CausalContractFindingInput[];\n}\n\nfunction runIdFromEvents(events: readonly TraceEvent[]): string | undefined {\n for (const event of events) {\n if (\"runId\" in event && typeof event.runId === \"string\") return event.runId;\n }\n return undefined;\n}\n\nfunction noneResult(runId: string | undefined, rationale: string): FirstCausalFailure {\n return {\n kind: \"none\",\n evidenceIds: [],\n rationale,\n orderIndex: 0,\n runId,\n engine: \"conservative-causal-v1\",\n };\n}\n\n/**\n * Find the first causal failure using the locked conservative order.\n * Does not infer from timing correlation alone.\n */\nexport function findFirstCausalFailure(\n events: readonly TraceEvent[],\n options: FindFirstCausalFailureOptions = {},\n): FirstCausalFailure {\n const runId = runIdFromEvents(events);\n\n // 1. Explicit failed/error event (timeline isError / step_completed error / run error)\n const timeline = buildRunTimeline(events);\n const firstError = timeline.entries.find((entry) => entry.isError);\n if (firstError) {\n return {\n kind: \"explicit_error_event\",\n evidenceIds: [firstError.stepId],\n rationale:\n \"First timeline step with status error (explicit failure; no timing-only inference).\",\n orderIndex: 1,\n runId: timeline.runId || runId,\n primary: {\n stepId: firstError.stepId,\n name: firstError.name,\n },\n relationship: { role: \"self\", relatedIds: [] },\n engine: \"conservative-causal-v1\",\n };\n }\n\n const runCompletedError = events.find(\n (event): event is Extract<TraceEvent, { event: \"run_completed\" }> =>\n event.event === \"run_completed\" && event.status === \"error\",\n );\n if (runCompletedError) {\n return {\n kind: \"explicit_error_event\",\n evidenceIds: [runCompletedError.runId],\n rationale: \"Run completed with status error and no earlier errored step.\",\n orderIndex: 1,\n runId: runCompletedError.runId,\n primary: { name: \"run\", stepId: runCompletedError.runId },\n relationship: { role: \"self\", relatedIds: [] },\n engine: \"conservative-causal-v1\",\n };\n }\n\n // 2. Failed observed outcome\n const outcomes = extractOutcomesFromTraceEvents(events);\n const failedOutcome = outcomes.find((outcome) => outcome.status === \"failed\");\n if (failedOutcome) {\n const evidenceIds = [failedOutcome.outcomeId];\n if (failedOutcome.parentId) evidenceIds.push(failedOutcome.parentId);\n return {\n kind: \"failed_observed_outcome\",\n evidenceIds,\n rationale: \"First observed outcome with status failed.\",\n orderIndex: 2,\n runId: failedOutcome.runId || runId,\n primary: {\n outcomeId: failedOutcome.outcomeId,\n stepId: failedOutcome.parentId,\n name: failedOutcome.name,\n },\n relationship: failedOutcome.parentId\n ? { role: \"child\", relatedIds: [failedOutcome.parentId] }\n : { role: \"self\", relatedIds: [] },\n engine: \"conservative-causal-v1\",\n };\n }\n\n // 3. Contract failure linked to an event\n const contractFail = (options.contractFindings ?? []).find(\n (finding) => finding.status === \"fail\" && (finding.evidenceIds?.length ?? 0) > 0,\n );\n if (contractFail) {\n const evidenceIds = [...(contractFail.evidenceIds ?? [])];\n return {\n kind: \"contract_failure\",\n evidenceIds,\n rationale:\n contractFail.message ??\n `Contract rule ${contractFail.ruleId} failed with linked evidence ids.`,\n orderIndex: 3,\n runId,\n primary: {\n ruleId: contractFail.ruleId,\n stepId: evidenceIds[0],\n name: contractFail.ruleId,\n },\n relationship: { role: \"self\", relatedIds: [] },\n engine: \"conservative-causal-v1\",\n };\n }\n\n // 4. Nearest failed ancestor/child — only when we have structural parent links\n // among completed steps that somehow weren't marked isError (defensive) or\n // when a success parent wraps a failed child already handled above.\n // If no explicit error steps exist, look for parent/child pairs where a child\n // completed with error relative to a parent (already covered by step 1).\n // Here: if any step has a parent that also completed with error, prefer the\n // child tip — but step 1 would have caught any error step. So this stage\n // only fires when contractFindings lacked event links but we can still find\n // parent/child error adjacency from raw events that timeline missed.\n const completed = events.filter(\n (event): event is StepCompletedEvent => event.event === \"step_completed\",\n );\n const started = events.filter(\n (event): event is StepStartedEvent => event.event === \"step_started\",\n );\n const parentByStep = new Map<string, string | undefined>();\n for (const start of started) {\n parentByStep.set(start.stepId, start.parentId);\n }\n const errorSteps = completed.filter((event) => event.status === \"error\");\n if (errorSteps.length > 0) {\n // Prefer deepest error (has parent that is also error or any parent)\n const sorted = [...errorSteps].sort((a, b) => {\n const depth = (id: string): number => {\n let d = 0;\n let cur: string | undefined = id;\n const seen = new Set<string>();\n while (cur && parentByStep.has(cur) && !seen.has(cur)) {\n seen.add(cur);\n const parent = parentByStep.get(cur);\n if (!parent) break;\n d += 1;\n cur = parent;\n }\n return d;\n };\n return depth(b.stepId) - depth(a.stepId);\n });\n const tip = sorted[0]!;\n const parentId = parentByStep.get(tip.stepId);\n const relatedIds = parentId ? [parentId] : [];\n return {\n kind: \"failed_ancestor_or_child\",\n evidenceIds: [tip.stepId, ...relatedIds],\n rationale: parentId\n ? \"Deepest explicit error step with parent link (nearest ancestor relationship).\"\n : \"Explicit error step used as structural tip (no parent id).\",\n orderIndex: 4,\n runId: tip.runId || runId,\n primary: { stepId: tip.stepId, name: started.find((s) => s.stepId === tip.stepId)?.name },\n relationship: {\n role: parentId ? \"child\" : \"self\",\n relatedIds,\n },\n engine: \"conservative-causal-v1\",\n };\n }\n\n // 5. No timing-only inference\n return noneResult(\n runId,\n \"No explicit error event, failed outcome, or linked contract failure; refusing timing-only inference.\",\n );\n}\n","import { Redactor } from \"./logs/redactor.js\";\nimport { resolveRedactionProfile } from \"./redaction-profiles.js\";\nimport type { RedactionProfile } from \"./types.js\";\nimport type { InspectNode, InspectRunTree } from \"./types/inspect-event.js\";\n\nexport type ExplainMode = \"dry-run\" | \"local\";\n\nexport interface ExplainFact {\n id: string;\n label: string;\n value: unknown;\n source: \"trace\";\n confidence: \"observed\";\n}\n\nexport interface ExplainInference {\n id: string;\n label: string;\n text: string;\n evidence: string[];\n confidence: \"deterministic\";\n}\n\nexport interface ExplainResult {\n mode: ExplainMode;\n runId: string;\n name?: string;\n status?: string;\n redactionProfile: RedactionProfile;\n facts: ExplainFact[];\n inferences: ExplainInference[];\n notes: string[];\n}\n\nexport interface ExplainOptions {\n mode?: ExplainMode;\n redactionProfile?: RedactionProfile;\n}\n\ninterface FlatNode {\n node: InspectNode;\n index: number;\n}\n\n/**\n * Maps the reader run-tree status vocabulary (\"ok\"/\"error\"/\"running\") to the\n * user-facing status vocabulary that list/view/stats report (\"success\"/...),\n * so explain agrees with the other commands for the same run.\n */\nfunction toDisplayStatus(status: InspectRunTree[\"status\"] | undefined): string {\n if (status === \"ok\") return \"success\";\n if (status === \"error\") return \"error\";\n if (status === \"running\") return \"running\";\n return \"unknown\";\n}\n\nfunction flatten(nodes: InspectNode[], out: FlatNode[] = []): FlatNode[] {\n for (const node of nodes) {\n out.push({ node, index: out.length + 1 });\n flatten(node.children, out);\n }\n return out;\n}\n\nfunction redactValue(\n redactor: Redactor,\n key: string,\n value: unknown,\n): unknown {\n return redactor.redactValue(key, value);\n}\n\nfunction fact(\n id: string,\n label: string,\n value: unknown,\n redactor: Redactor,\n): ExplainFact {\n return {\n id,\n label,\n value: redactValue(redactor, id.split(\".\").at(-1) ?? id, value),\n source: \"trace\",\n confidence: \"observed\",\n };\n}\n\nfunction topKinds(run: InspectRunTree): string[] {\n return Object.entries(run.metadata.kinds)\n .filter(([, count]) => count > 0)\n .sort((a, b) => {\n if (b[1] !== a[1]) return b[1] - a[1];\n return a[0].localeCompare(b[0]);\n })\n .slice(0, 5)\n .map(([kind, count]) => `${kind}:${count}`);\n}\n\nfunction countErrorNodes(nodes: FlatNode[]): number {\n return nodes.filter((entry) => entry.node.event.status === \"error\").length;\n}\n\nfunction slowestNode(nodes: FlatNode[]): FlatNode | undefined {\n return nodes\n .filter(\n (entry) =>\n entry.node.event.durationMs !== undefined &&\n // The RUN boundary spans the whole run, so its duration always dominates\n // and shadows every real step. Rank actual work nodes only, matching the\n // stats slowest-step ranking, which never counts the run envelope.\n entry.node.event.kind !== \"RUN\",\n )\n .sort((a, b) => {\n const delta = (b.node.event.durationMs ?? 0) - (a.node.event.durationMs ?? 0);\n return delta !== 0 ? delta : a.index - b.index;\n })[0];\n}\n\nfunction attributeFacts(nodes: FlatNode[], redactor: Redactor): ExplainFact[] {\n const facts: ExplainFact[] = [];\n for (const entry of nodes) {\n const attrs = entry.node.event.attributes;\n if (attrs === undefined) continue;\n for (const key of Object.keys(attrs).sort()) {\n facts.push({\n id: `node.${entry.index}.attributes.${key}`,\n label: `${entry.node.event.name} attribute ${key}`,\n value: redactValue(redactor, key, attrs[key]),\n source: \"trace\",\n confidence: \"observed\",\n });\n if (facts.length >= 8) return facts;\n }\n }\n return facts;\n}\n\nfunction buildFacts(run: InspectRunTree, redactor: Redactor): ExplainFact[] {\n const nodes = flatten(run.children);\n const facts = [\n fact(\"run.id\", \"Run id\", run.runId, redactor),\n fact(\"run.name\", \"Run name\", run.name ?? run.runId, redactor),\n fact(\"run.status\", \"Run status\", toDisplayStatus(run.status), redactor),\n fact(\"run.totalEvents\", \"Total events\", run.metadata.totalEvents, redactor),\n fact(\"run.stepCount\", \"Top-level step count\", run.children.length, redactor),\n fact(\"run.nodeCount\", \"Total node count\", nodes.length, redactor),\n fact(\"run.errorNodeCount\", \"Error node count\", countErrorNodes(nodes), redactor),\n fact(\"run.kinds\", \"Observed kind mix\", topKinds(run), redactor),\n ];\n if (run.durationMs !== undefined) {\n facts.push(fact(\"run.durationMs\", \"Run duration milliseconds\", run.durationMs, redactor));\n }\n const slowest = slowestNode(nodes);\n if (slowest !== undefined) {\n facts.push(\n fact(\"run.slowestNode\", \"Slowest observed node\", {\n name: slowest.node.event.name,\n kind: slowest.node.event.kind,\n durationMs: slowest.node.event.durationMs,\n }, redactor),\n );\n }\n facts.push(...attributeFacts(nodes, redactor));\n return facts;\n}\n\nfunction buildInferences(run: InspectRunTree, facts: ExplainFact[]): ExplainInference[] {\n const inferences: ExplainInference[] = [];\n const errorFact = facts.find((item) => item.id === \"run.errorNodeCount\");\n const kindFact = facts.find((item) => item.id === \"run.kinds\");\n const durationFact = facts.find((item) => item.id === \"run.durationMs\");\n const errorNodeCount =\n typeof errorFact?.value === \"number\" ? errorFact.value : 0;\n\n if (run.status === \"error\" || errorNodeCount > 0) {\n inferences.push({\n id: \"outcome.error\",\n label: \"Outcome\",\n text: \"The run recorded an error status or at least one error node.\",\n evidence: [\"run.status\", \"run.errorNodeCount\"],\n confidence: \"deterministic\",\n });\n } else if (run.status === \"ok\") {\n inferences.push({\n id: \"outcome.success\",\n label: \"Outcome\",\n text: \"The run completed without observed error nodes.\",\n evidence: [\"run.status\", \"run.errorNodeCount\"],\n confidence: \"deterministic\",\n });\n }\n\n if (kindFact !== undefined) {\n inferences.push({\n id: \"shape.kind-mix\",\n label: \"Trace shape\",\n text: \"The explanation is based on the observed event kind mix, not generated content.\",\n evidence: [kindFact.id],\n confidence: \"deterministic\",\n });\n }\n\n if (durationFact !== undefined) {\n inferences.push({\n id: \"timing.duration\",\n label: \"Timing\",\n text: \"Timing claims are limited to persisted duration fields in the trace.\",\n evidence: [durationFact.id],\n confidence: \"deterministic\",\n });\n }\n\n return inferences;\n}\n\n/**\n * Build a local, deterministic explanation payload from a reader-selected run.\n *\n * This helper performs no network I/O and does not call a model provider.\n */\nexport function buildLocalExplanation(\n run: InspectRunTree,\n options: ExplainOptions = {},\n): ExplainResult {\n const redactionProfile = options.redactionProfile ?? \"local\";\n const resolved = resolveRedactionProfile(redactionProfile);\n const redactor = new Redactor({ extraKeys: resolved.extraKeys });\n const mode = options.mode ?? \"local\";\n const facts = buildFacts(run, redactor);\n return {\n mode,\n runId: String(redactValue(redactor, \"runId\", run.runId)),\n ...(run.name !== undefined ? { name: String(redactValue(redactor, \"name\", run.name)) } : {}),\n ...(run.status !== undefined ? { status: toDisplayStatus(run.status) } : {}),\n redactionProfile,\n facts,\n inferences: mode === \"dry-run\" ? [] : buildInferences(run, facts),\n notes: [\n \"Generated locally without provider or network calls.\",\n \"Facts are observed from normalized trace data; inferences are deterministic labels.\",\n ],\n };\n}\n","import type { StepCompletedEvent, StepStartedEvent, TraceEvent } from \"./types.js\";\nimport { extractMetadata } from \"./trace-metadata.js\";\nimport { filterTraces as filterTraceMetas } from \"./trace-filter.js\";\nimport { readTraceEventsFromFile } from \"./storage.js\";\nimport type { TraceMetadata, StepType } from \"./types.js\";\nimport { parseDuration } from \"./utils/duration.js\";\nimport {\n extractOutcomesFromTraceEvents,\n parseObservationFilter,\n} from \"./outcomes/index.js\";\n\nexport interface TraceSearchOptions {\n traceDir: string;\n since?: string;\n status?: \"success\" | \"error\" | \"running\" | \"unknown\";\n kind?: string;\n type?: string;\n name?: string;\n tool?: string;\n duration?: string;\n limit?: number;\n session?: string;\n correlateGroup?: boolean;\n observation?: string;\n}\n\nexport interface TraceSearchResult {\n runId: string;\n runName?: string;\n runStatus: string;\n stepId?: string;\n stepName?: string;\n stepType?: string;\n timestamp?: number;\n durationMs?: number;\n matchReason: string;\n matchedFields: string[];\n filePath: string;\n sessionId?: string;\n}\n\nexport interface ParsedDurationFilter {\n op: \">\" | \">=\" | \"<\" | \"<=\";\n ms: number;\n}\n\nexport function parseDurationFilter(expr: string): ParsedDurationFilter {\n const raw = expr.trim();\n const m = raw.match(/^(>=|<=|>|<)\\s*(.+)$/);\n if (!m) {\n throw new Error(\n `Invalid --duration \"${expr}\". Use forms like >5s, >=500ms, <2m.`,\n );\n }\n const op = m[1] as ParsedDurationFilter[\"op\"];\n const ms = parseDuration(m[2].trim());\n return { op, ms };\n}\n\nfunction durationMatches(\n valueMs: number | undefined,\n filter: ParsedDurationFilter,\n): boolean {\n if (valueMs === undefined || !Number.isFinite(valueMs)) return false;\n switch (filter.op) {\n case \">\":\n return valueMs > filter.ms;\n case \">=\":\n return valueMs >= filter.ms;\n case \"<\":\n return valueMs < filter.ms;\n case \"<=\":\n return valueMs <= filter.ms;\n default:\n return false;\n }\n}\n\nfunction normalizeStepTypeFilter(kind?: string, type?: string): string | undefined {\n const v = (kind ?? type)?.trim().toLowerCase();\n return v && v !== \"\" ? v : undefined;\n}\n\nfunction nameMatches(hay: string, needle: string): boolean {\n return hay.toLowerCase().includes(needle.toLowerCase());\n}\n\nexport async function searchTraces(\n metas: TraceMetadata[],\n options: TraceSearchOptions,\n): Promise<TraceSearchResult[]> {\n let filtered = filterTraceMetas(metas, { since: options.since });\n const stepTypeFilter = normalizeStepTypeFilter(options.kind, options.type);\n const nameQuery = options.name?.trim();\n const toolQuery = options.tool?.trim();\n let durationFilter: ParsedDurationFilter | undefined;\n if (options.duration) {\n durationFilter = parseDurationFilter(options.duration);\n }\n const limit = options.limit ?? 50;\n const sessionId = options.session?.trim();\n const observationStatus = parseObservationFilter(options.observation);\n\n const hasContentFilter = Boolean(\n options.status ||\n stepTypeFilter ||\n nameQuery ||\n toolQuery ||\n durationFilter ||\n observationStatus,\n );\n\n const results: TraceSearchResult[] = [];\n const sessionLabel = sessionId && sessionId !== \"\" ? sessionId : undefined;\n\n if (!hasContentFilter) {\n for (const m of filtered) {\n results.push({\n runId: m.runId,\n runName: m.name,\n runStatus: m.status,\n timestamp: m.startedAt,\n durationMs: m.durationMs,\n matchReason: sessionLabel\n ? `trace in session ${sessionLabel}`\n : \"trace in directory\",\n matchedFields: sessionLabel ? [\"run\", \"session\"] : [\"run\"],\n filePath: m.filePath,\n ...(sessionLabel ? { sessionId: sessionLabel } : {}),\n });\n }\n results.sort((a, b) => {\n const ta = a.timestamp ?? 0;\n const tb = b.timestamp ?? 0;\n if (ta !== tb) return tb - ta;\n return a.runId.localeCompare(b.runId);\n });\n return results.slice(0, limit);\n }\n\n for (const m of filtered) {\n if (options.status && m.status !== options.status) continue;\n\n let events: TraceEvent[] = [];\n try {\n events = await readTraceEventsFromFile(m.filePath);\n } catch {\n continue;\n }\n if (events.length === 0) continue;\n\n const runMatches = matchRunLevel(m, {\n stepTypeFilter,\n nameQuery,\n toolQuery,\n durationFilter,\n statusFilter: options.status,\n });\n results.push(...runMatches);\n\n const stepMatches = matchStepLevel(m, events, {\n stepTypeFilter,\n nameQuery,\n toolQuery,\n durationFilter,\n statusFilter: options.status,\n });\n results.push(...stepMatches);\n\n if (observationStatus) {\n const outcomes = extractOutcomesFromTraceEvents(events);\n const matched = outcomes.filter((outcome) => outcome.status === observationStatus);\n for (const outcome of matched) {\n results.push({\n runId: m.runId,\n runName: m.name,\n runStatus: m.status,\n stepName: outcome.name,\n timestamp: outcome.observedAt,\n matchReason: `observation status=${outcome.status}`,\n matchedFields: [\"outcome.status\", \"outcome.name\"],\n filePath: m.filePath,\n });\n }\n }\n }\n\n results.sort((a, b) => {\n const ta = a.timestamp ?? 0;\n const tb = b.timestamp ?? 0;\n // Newest-first so --limit keeps the most recent matches.\n if (ta !== tb) return tb - ta;\n const runCmp = a.runId.localeCompare(b.runId);\n if (runCmp !== 0) return runCmp;\n return (a.stepName ?? \"\").localeCompare(b.stepName ?? \"\");\n });\n\n return results.slice(0, limit);\n}\n\nfunction matchRunLevel(\n m: TraceMetadata,\n opts: {\n stepTypeFilter?: string;\n nameQuery?: string;\n toolQuery?: string;\n durationFilter?: ParsedDurationFilter;\n statusFilter?: string;\n },\n): TraceSearchResult[] {\n // Step-oriented filters are handled only by matchStepLevel.\n if (opts.stepTypeFilter || opts.toolQuery) return [];\n\n // Structured run filters are conjunctive: every supplied filter must match.\n // Previously status/name/duration were OR'd via field accumulation, so\n // `--name missing --status error` could still emit a status-only run hit (#323).\n if (opts.statusFilter && m.status !== opts.statusFilter) return [];\n if (opts.nameQuery && !nameMatches(m.name ?? m.runId, opts.nameQuery)) {\n return [];\n }\n if (\n opts.durationFilter &&\n !durationMatches(m.durationMs, opts.durationFilter)\n ) {\n return [];\n }\n\n const fields: string[] = [];\n if (opts.statusFilter) fields.push(\"run.status\");\n if (opts.nameQuery) fields.push(\"run.name\");\n if (opts.durationFilter) fields.push(\"run.durationMs\");\n if (fields.length === 0) return [];\n\n return [\n {\n runId: m.runId,\n runName: m.name,\n runStatus: m.status,\n timestamp: m.startedAt,\n durationMs: m.durationMs,\n matchReason: `run match: ${fields.join(\", \")}`,\n matchedFields: fields,\n filePath: m.filePath,\n },\n ];\n}\n\nfunction matchStepLevel(\n m: TraceMetadata,\n events: TraceEvent[],\n opts: {\n stepTypeFilter?: string;\n nameQuery?: string;\n toolQuery?: string;\n durationFilter?: ParsedDurationFilter;\n statusFilter?: string;\n },\n): TraceSearchResult[] {\n const out: TraceSearchResult[] = [];\n const started = new Map<string, StepStartedEvent>();\n\n for (const e of events) {\n if (e.event === \"step_started\") {\n started.set((e as StepStartedEvent).stepId, e as StepStartedEvent);\n }\n }\n\n for (const e of events) {\n if (e.event !== \"step_completed\") continue;\n const c = e as StepCompletedEvent;\n const s = started.get(c.stepId);\n if (!s) continue;\n\n const fields: string[] = [];\n const stepType = s.type as StepType;\n\n if (opts.stepTypeFilter && stepType !== opts.stepTypeFilter) {\n continue;\n }\n\n const hasStepFilters =\n opts.stepTypeFilter ||\n opts.nameQuery ||\n opts.toolQuery ||\n opts.durationFilter ||\n opts.statusFilter === \"error\" ||\n opts.statusFilter === \"success\";\n\n if (!hasStepFilters) continue;\n\n if (opts.statusFilter === \"error\" && c.status === \"error\") {\n fields.push(\"step.status\");\n } else if (opts.statusFilter === \"success\" && c.status === \"success\") {\n fields.push(\"step.status\");\n } else if (opts.statusFilter === \"error\" || opts.statusFilter === \"success\") {\n continue;\n }\n\n if (opts.nameQuery) {\n if (!nameMatches(s.name, opts.nameQuery)) continue;\n fields.push(\"step.name\");\n }\n if (opts.toolQuery) {\n const toolName =\n typeof s.metadata?.toolName === \"string\"\n ? s.metadata.toolName\n : s.name;\n if (!nameMatches(toolName, opts.toolQuery)) continue;\n fields.push(\"step.tool\");\n }\n if (opts.durationFilter) {\n if (!durationMatches(c.durationMs, opts.durationFilter)) continue;\n fields.push(\"step.durationMs\");\n }\n if (opts.stepTypeFilter) {\n fields.push(\"step.type\");\n }\n\n if (fields.length === 0) continue;\n\n out.push({\n runId: m.runId,\n runName: m.name,\n runStatus: m.status,\n stepId: c.stepId,\n stepName: s.name,\n stepType,\n timestamp: s.startTime ?? s.timestamp,\n durationMs: c.durationMs,\n matchReason: `step match: ${fields.join(\", \")}`,\n matchedFields: fields,\n filePath: m.filePath,\n });\n }\n\n return out;\n}\n\nexport async function loadTraceMetadataList(\n _traceDir: string,\n fileNames: string[],\n getPath: (fileName: string) => string,\n): Promise<TraceMetadata[]> {\n const metas: TraceMetadata[] = [];\n for (const fileName of fileNames) {\n try {\n const filePath = getPath(fileName);\n const meta = await extractMetadata(filePath);\n metas.push(meta);\n } catch {\n /* skip */\n }\n }\n return metas;\n}\n","import { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type {\n EnrichSessionSummaryOptions,\n SessionCheckSummary,\n SessionLastError,\n SessionRunRecord,\n SessionStatus,\n SessionSummary,\n} from \"./types.js\";\n\nconst DEFAULT_STALE_THRESHOLD_MS = 86_400_000;\n\nconst EXPLICIT_STATUS_PRIORITY: Record<string, number> = {\n error: 5,\n waiting_input: 4,\n idle: 3,\n stale: 2,\n completed: 1,\n};\n\nconst EXPLICIT_SESSION_STATUSES = new Set<string>([\n \"running\",\n \"waiting_input\",\n \"idle\",\n \"completed\",\n \"error\",\n \"stale\",\n \"unknown\",\n]);\n\nfunction isExplicitSessionStatus(value: unknown): value is SessionStatus {\n return typeof value === \"string\" && EXPLICIT_SESSION_STATUSES.has(value);\n}\n\nfunction activityMs(run: SessionRunRecord): number {\n return run.endedAt ?? run.startedAt ?? 0;\n}\n\nfunction latestActivityMs(runs: readonly SessionRunRecord[]): number {\n let latest = 0;\n for (const run of runs) {\n const ms = activityMs(run);\n if (ms > latest) latest = ms;\n }\n return latest;\n}\n\nfunction earliestStart(runs: readonly SessionRunRecord[]): number | undefined {\n let earliest: number | undefined;\n for (const run of runs) {\n if (run.startedAt === undefined) continue;\n if (earliest === undefined || run.startedAt < earliest) {\n earliest = run.startedAt;\n }\n }\n return earliest;\n}\n\nfunction latestEndWhenAllEnded(runs: readonly SessionRunRecord[]): number | undefined {\n if (runs.length === 0) return undefined;\n let latest: number | undefined;\n for (const run of runs) {\n if (run.endedAt === undefined) return undefined;\n if (latest === undefined || run.endedAt > latest) latest = run.endedAt;\n }\n return latest;\n}\n\nfunction pickExplicitStatus(runs: readonly SessionRunRecord[]): SessionStatus | undefined {\n let best: SessionStatus | undefined;\n let bestPriority = 0;\n for (const run of runs) {\n const raw = run.metadata?.sessionStatus;\n if (!isExplicitSessionStatus(raw)) continue;\n const priority = EXPLICIT_STATUS_PRIORITY[raw] ?? 0;\n if (priority > bestPriority) {\n bestPriority = priority;\n best = raw;\n }\n }\n return best;\n}\n\nfunction deriveLastError(runs: readonly SessionRunRecord[]): SessionLastError | undefined {\n const errorRuns = runs\n .filter((run) => run.status === \"error\")\n .sort((a, b) => activityMs(b) - activityMs(a));\n const latest = errorRuns[0];\n if (!latest) return undefined;\n\n const meta = latest.metadata ?? {};\n const message =\n typeof meta.errorMessage === \"string\" && meta.errorMessage.trim() !== \"\"\n ? meta.errorMessage.trim()\n : (latest.name ?? latest.runId);\n const code =\n typeof meta.errorCode === \"string\" && meta.errorCode.trim() !== \"\"\n ? meta.errorCode.trim()\n : undefined;\n\n return { runId: latest.runId, message, code };\n}\n\nfunction deriveCheckSummary(\n runs: readonly SessionRunRecord[],\n): SessionCheckSummary | undefined {\n let pass = 0;\n let fail = 0;\n let warn = 0;\n let found = false;\n\n for (const run of runs) {\n const summary = run.metadata?.checkSummary;\n if (!summary || typeof summary !== \"object\") continue;\n const record = summary as Record<string, unknown>;\n if (typeof record.pass === \"number\") {\n pass += record.pass;\n found = true;\n }\n if (typeof record.fail === \"number\") {\n fail += record.fail;\n found = true;\n }\n if (typeof record.warn === \"number\") {\n warn += record.warn;\n found = true;\n }\n }\n\n return found ? { pass, fail, warn } : undefined;\n}\n\nfunction deriveObservationSummary(runs: readonly SessionRunRecord[]): string | undefined {\n for (const run of [...runs].sort((a, b) => activityMs(b) - activityMs(a))) {\n const value = run.metadata?.observationSummary;\n if (typeof value === \"string\" && value.trim() !== \"\") {\n return value.trim();\n }\n }\n return undefined;\n}\n\n/** Derives session status from run records per the v4.2 RFC (no timestamp-only causality). */\nexport function deriveSessionStatus(\n runs: readonly SessionRunRecord[],\n options: EnrichSessionSummaryOptions = {},\n): SessionStatus {\n if (runs.length === 0) return \"unknown\";\n\n if (runs.some((run) => run.status === \"running\")) return \"running\";\n\n const explicit = pickExplicitStatus(runs);\n if (explicit && explicit !== \"running\") return explicit;\n\n if (runs.some((run) => run.status === \"error\")) return \"error\";\n\n if (runs.every((run) => run.status === \"success\")) return \"completed\";\n\n const nowMs = options.nowMs ?? Date.now();\n const staleThresholdMs = options.staleThresholdMs ?? DEFAULT_STALE_THRESHOLD_MS;\n const lastMs = latestActivityMs(runs);\n if (lastMs > 0 && nowMs - lastMs > staleThresholdMs) return \"stale\";\n\n return \"unknown\";\n}\n\n/**\n * Enriches a session summary with v4.2 derived fields (status, timing, errors).\n * Pure function; does not read trace files.\n */\nexport function enrichSessionSummary(\n summary: Omit<\n SessionSummary,\n | \"status\"\n | \"lastActivity\"\n | \"retryCount\"\n | \"startedAt\"\n | \"endedAt\"\n | \"durationMs\"\n | \"correlationId\"\n | \"jobId\"\n | \"workflowId\"\n | \"lastError\"\n | \"observationSummary\"\n | \"checkSummary\"\n >,\n runs: readonly SessionRunRecord[],\n options: EnrichSessionSummaryOptions = {},\n): SessionSummary {\n const sessionRuns = runs\n .filter((run) => summary.runIds.includes(run.runId))\n .sort((a, b) => a.runId.localeCompare(b.runId));\n\n const startedAt = earliestStart(sessionRuns);\n const endedAt = latestEndWhenAllEnded(sessionRuns);\n const durationMs =\n startedAt !== undefined && endedAt !== undefined ? endedAt - startedAt : undefined;\n\n let correlationId: string | undefined;\n let jobId: string | undefined;\n let workflowId: string | undefined;\n for (const run of sessionRuns) {\n const meta = extractSessionWorkflowMetadata(run.metadata);\n if (!correlationId && meta?.correlationId) correlationId = meta.correlationId;\n if (!jobId && meta?.jobId) jobId = meta.jobId;\n if (!workflowId && meta?.workflowName) workflowId = meta.workflowName;\n else if (!workflowId && meta?.workflowStep) workflowId = meta.workflowStep;\n }\n\n const lastMs = latestActivityMs(sessionRuns);\n const lastActivity =\n lastMs > 0 ? new Date(lastMs).toISOString() : new Date(0).toISOString();\n\n const retryCount = summary.retries.filter(\n (retry) => retry.retryOf !== undefined || (retry.attempt ?? 0) > 1,\n ).length;\n\n return {\n ...summary,\n status: deriveSessionStatus(sessionRuns, options),\n startedAt,\n endedAt,\n durationMs,\n correlationId,\n jobId,\n workflowId,\n lastError: deriveLastError(sessionRuns),\n lastActivity,\n retryCount,\n observationSummary: deriveObservationSummary(sessionRuns),\n checkSummary: deriveCheckSummary(sessionRuns),\n };\n}\n","import type {\n ActivityEntry,\n ActivitySummary,\n BuildActivitySummaryOptions,\n SessionIndex,\n SessionStatus,\n SessionSummary,\n} from \"./types.js\";\n\nfunction statusLine(session: SessionSummary): string {\n const name =\n session.workflowId ??\n session.correlationId ??\n session.sessionId;\n const status = session.status;\n if (session.lastError) {\n return `${name} session ${session.sessionId} failed at ${session.lastError.message}`;\n }\n if (session.observationSummary) {\n return `${name} session ${session.sessionId} ${status} with observation warning`;\n }\n return `${name} session ${session.sessionId} ${status}`;\n}\n\nfunction parseSinceMs(since: string | undefined, nowMs: number): number {\n if (!since || since.trim() === \"\") return nowMs - 7 * 86_400_000;\n const trimmed = since.trim().toLowerCase();\n const match = /^(\\d+)([smhd])$/.exec(trimmed);\n if (!match) return nowMs - 7 * 86_400_000;\n const amount = Number.parseInt(match[1]!, 10);\n const unit = match[2];\n const mult =\n unit === \"s\" ? 1000 : unit === \"m\" ? 60_000 : unit === \"h\" ? 3_600_000 : 86_400_000;\n return nowMs - amount * mult;\n}\n\nfunction isFailed(status: SessionStatus): boolean {\n return status === \"error\";\n}\n\nfunction isStale(status: SessionStatus): boolean {\n return status === \"stale\";\n}\n\nfunction guardrailWarnings(session: SessionSummary): number {\n const summary = session.checkSummary;\n if (!summary) return 0;\n return summary.warn;\n}\n\n/**\n * Builds a deterministic activity summary from a session index (v4.2).\n * Read-only; does not mutate traces or invent relationships.\n */\nexport function buildActivitySummary(\n index: SessionIndex,\n options: BuildActivitySummaryOptions = {},\n): ActivitySummary {\n const nowMs = options.nowMs ?? Date.now();\n const sinceMs = parseSinceMs(options.since, nowMs);\n const sinceIso = new Date(sinceMs).toISOString();\n const limit =\n Number.isInteger(options.limit) && options.limit! > 0 ? options.limit! : 20;\n\n const inWindow = index.sessions.filter((session) => {\n const activityMs = Date.parse(session.lastActivity);\n return Number.isFinite(activityMs) && activityMs >= sinceMs;\n });\n\n const entries: ActivityEntry[] = [...inWindow]\n .sort((a, b) => Date.parse(b.lastActivity) - Date.parse(a.lastActivity))\n .slice(0, limit)\n .map((session) => ({\n sessionId: session.sessionId,\n status: session.status,\n summary: statusLine(session),\n lastActivity: session.lastActivity,\n runCount: session.runIds.length,\n }));\n\n let failed = 0;\n let stale = 0;\n let guardrailWarningTotal = 0;\n for (const session of inWindow) {\n if (isFailed(session.status)) failed += 1;\n if (isStale(session.status)) stale += 1;\n guardrailWarningTotal += guardrailWarnings(session);\n }\n\n return {\n since: sinceIso,\n sessions: inWindow.length,\n failed,\n stale,\n guardrailWarnings: guardrailWarningTotal,\n entries,\n };\n}\n\n/** Renders a human activity summary for terminal output. */\nexport function renderActivitySummaryHuman(\n summary: ActivitySummary,\n options?: { nowMs?: number },\n): string {\n const lines: string[] = [];\n const nowMs = options?.nowMs ?? Date.now();\n const todayStart = new Date(nowMs);\n todayStart.setHours(0, 0, 0, 0);\n const todayMs = todayStart.getTime();\n\n const today = summary.entries.filter(\n (entry) => Date.parse(entry.lastActivity) >= todayMs,\n );\n if (today.length > 0) {\n lines.push(\"Today\");\n for (const entry of today) {\n lines.push(` ${entry.summary}`);\n }\n lines.push(\"\");\n }\n\n lines.push(`Since ${summary.since}`);\n lines.push(` ${summary.sessions} sessions`);\n lines.push(` ${summary.failed} failed`);\n lines.push(` ${summary.stale} stale`);\n lines.push(` ${summary.guardrailWarnings} guardrail warnings`);\n\n return lines.join(\"\\n\");\n}\n","import type { TraceMetadataStatus } from \"../types.js\";\n\n/** Known session/workflow metadata keys (v2.4 RFC). */\nexport const SESSION_WORKFLOW_KEYS = [\n \"sessionId\",\n \"conversationId\",\n \"groupId\",\n \"parentGroupId\",\n \"attempt\",\n \"retryOf\",\n \"retryReason\",\n \"handoffFrom\",\n \"handoffTo\",\n \"subAgentId\",\n \"subAgentName\",\n \"jobId\",\n \"queueName\",\n \"workflowName\",\n \"workflowStep\",\n \"toolCallId\",\n \"mcpToolCallId\",\n \"linkedStepId\",\n \"operationId\",\n \"attemptId\",\n \"attemptNumber\",\n \"fallbackOf\",\n \"idempotencyKey\",\n \"correlationId\",\n \"requestId\",\n \"decisionId\",\n] as const;\n\nexport type SessionWorkflowKey = (typeof SESSION_WORKFLOW_KEYS)[number];\n\nexport type SessionConfidence = \"explicit\" | \"correlated\" | \"heuristic\" | \"unknown\";\n\nexport type SessionEdgeSource =\n | \"manual\"\n | \"adapter\"\n | \"json-log\"\n | \"log4js\"\n | \"mcp-client\"\n | \"inferred\";\n\nexport interface SessionWorkflowMetadata {\n sessionId?: string;\n conversationId?: string;\n groupId?: string;\n parentGroupId?: string;\n attempt?: number;\n retryOf?: string;\n retryReason?: string;\n handoffFrom?: string;\n handoffTo?: string;\n subAgentId?: string;\n subAgentName?: string;\n jobId?: string;\n queueName?: string;\n workflowName?: string;\n workflowStep?: string;\n toolCallId?: string;\n mcpToolCallId?: string;\n linkedStepId?: string;\n operationId?: string;\n attemptId?: string;\n attemptNumber?: number;\n fallbackOf?: string;\n idempotencyKey?: string;\n correlationId?: string;\n requestId?: string;\n decisionId?: string;\n}\n\nexport interface SessionRunRecord {\n runId: string;\n name?: string;\n status?: TraceMetadataStatus;\n startedAt?: number;\n endedAt?: number;\n durationMs?: number;\n filePath?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface SessionWarning {\n code: string;\n message: string;\n runId?: string;\n sessionId?: string;\n}\n\nexport interface HandoffEdge {\n from: string;\n to: string;\n source: SessionEdgeSource;\n confidence: SessionConfidence;\n}\n\nexport interface RetryLink {\n runId: string;\n retryOf?: string;\n attempt?: number;\n source: SessionEdgeSource;\n confidence: SessionConfidence;\n}\n\nexport interface SessionGroup {\n groupId: string;\n parentGroupId?: string;\n runIds: string[];\n}\n\nexport interface CriticalPathStep {\n runId: string;\n name?: string;\n startedAt?: number;\n durationMs?: number;\n source: SessionEdgeSource;\n confidence: SessionConfidence;\n}\n\n/** Session lifecycle status (v4.2 RFC). */\nexport type SessionStatus =\n | \"running\"\n | \"waiting_input\"\n | \"idle\"\n | \"completed\"\n | \"error\"\n | \"stale\"\n | \"unknown\";\n\nexport interface SessionLastError {\n runId: string;\n message: string;\n code?: string;\n}\n\nexport interface SessionCheckSummary {\n pass: number;\n fail: number;\n warn: number;\n}\n\nexport interface EnrichSessionSummaryOptions {\n /** Reference clock for staleness (default Date.now()). */\n nowMs?: number;\n /** Inactivity threshold before marking a session stale (default 24h). */\n staleThresholdMs?: number;\n}\n\nexport interface ActivityEntry {\n sessionId: string;\n status: SessionStatus;\n summary: string;\n lastActivity: string;\n runCount: number;\n}\n\nexport interface ActivitySummary {\n since: string;\n sessions: number;\n failed: number;\n stale: number;\n guardrailWarnings: number;\n entries: ActivityEntry[];\n}\n\nexport interface BuildActivitySummaryOptions {\n /** Duration window (e.g. 7d, 24h). Default 7d. */\n since?: string;\n /** Reference clock (default Date.now()). */\n nowMs?: number;\n /** Max entries returned (default 20). */\n limit?: number;\n}\n\nexport interface SessionSummary {\n sessionId: string;\n runIds: string[];\n groups: SessionGroup[];\n handoffs: HandoffEdge[];\n retries: RetryLink[];\n criticalPath: CriticalPathStep[];\n /** Derived session status (v4.2+). */\n status: SessionStatus;\n /** Earliest run start time in the session. */\n startedAt?: number;\n /** Latest run end time when all runs have ended. */\n endedAt?: number;\n /** endedAt - startedAt when both are present. */\n durationMs?: number;\n correlationId?: string;\n jobId?: string;\n workflowId?: string;\n lastError?: SessionLastError;\n /** ISO-8601 timestamp of the most recent run activity. */\n lastActivity: string;\n retryCount: number;\n observationSummary?: string;\n checkSummary?: SessionCheckSummary;\n}\n\nexport interface SessionIndex {\n runs: SessionRunRecord[];\n sessions: SessionSummary[];\n unscopedRunIds: string[];\n warnings: SessionWarning[];\n}\n\nexport interface BuildSessionIndexOptions {\n /** When true, group runs that share only `groupId` under a synthetic session key. */\n correlateByGroupId?: boolean;\n /** Reference clock for session staleness (v4.2+). */\n nowMs?: number;\n /** Inactivity threshold before marking a session stale (v4.2+, default 24h). */\n staleThresholdMs?: number;\n}\n","import { readTraceEventsFromFile } from \"../storage.js\";\nimport type { TraceMetadata } from \"../types.js\";\nimport type { SessionRunRecord } from \"./types.js\";\n\n/** Enriches trace metadata with run_started metadata for session indexing. */\nexport async function enrichSessionRunRecord(\n meta: TraceMetadata,\n): Promise<SessionRunRecord> {\n let metadata: Record<string, unknown> | undefined;\n try {\n const events = await readTraceEventsFromFile(meta.filePath);\n for (const event of events) {\n if (event.event !== \"run_started\") continue;\n if (event.metadata && typeof event.metadata === \"object\") {\n metadata = event.metadata as Record<string, unknown>;\n }\n break;\n }\n } catch {\n /* skip */\n }\n\n return {\n runId: meta.runId,\n name: meta.name,\n status: meta.status,\n startedAt: meta.startedAt,\n endedAt: meta.endedAt,\n durationMs: meta.durationMs,\n filePath: meta.filePath,\n metadata,\n };\n}\n\n/** Builds session run records from extracted trace metadata rows. */\nexport async function loadSessionRunRecords(\n metas: readonly TraceMetadata[],\n): Promise<SessionRunRecord[]> {\n const out: SessionRunRecord[] = [];\n for (const meta of metas) {\n out.push(await enrichSessionRunRecord(meta));\n }\n return out;\n}\n","import type { TraceMetadata } from \"../types.js\";\nimport { buildSessionIndex } from \"./index.js\";\nimport { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type { SessionRunRecord, SessionWarning } from \"./types.js\";\n\nexport interface SessionScopeOptions {\n sessionId?: string;\n groupId?: string;\n correlateByGroupId?: boolean;\n}\n\nexport interface SessionScopeResult {\n metas: TraceMetadata[];\n scopeLabel: string;\n scopeKind: \"session\" | \"group\";\n runIds: string[];\n warnings: SessionWarning[];\n notFound: boolean;\n}\n\nfunction metaToSessionRunRecord(meta: TraceMetadata): SessionRunRecord {\n return {\n runId: meta.runId,\n name: meta.name,\n status: meta.status,\n startedAt: meta.startedAt,\n endedAt: meta.endedAt,\n durationMs: meta.durationMs,\n filePath: meta.filePath,\n metadata: undefined,\n };\n}\n\n/** Filters trace metadata rows to runs in a session or group scope. */\nexport function filterMetasBySessionScope(\n metas: readonly TraceMetadata[],\n records: readonly SessionRunRecord[],\n options: SessionScopeOptions,\n): SessionScopeResult {\n const sessionId = options.sessionId?.trim();\n const groupId = options.groupId?.trim();\n const warnings: SessionWarning[] = [];\n\n if (sessionId) {\n const index = buildSessionIndex(records, {\n correlateByGroupId: options.correlateByGroupId === true,\n });\n warnings.push(...index.warnings);\n const session = index.sessions.find((item) => item.sessionId === sessionId);\n if (!session) {\n return {\n metas: [],\n scopeLabel: sessionId,\n scopeKind: \"session\",\n runIds: [],\n warnings,\n notFound: true,\n };\n }\n const runIdSet = new Set(session.runIds);\n const filtered = metas.filter((meta) => runIdSet.has(meta.runId));\n return {\n metas: filtered,\n scopeLabel: sessionId,\n scopeKind: \"session\",\n runIds: session.runIds,\n warnings,\n notFound: false,\n };\n }\n\n if (groupId) {\n const runIds = records\n .filter((run) => extractSessionWorkflowMetadata(run.metadata)?.groupId === groupId)\n .map((run) => run.runId)\n .sort();\n if (runIds.length === 0) {\n return {\n metas: [],\n scopeLabel: groupId,\n scopeKind: \"group\",\n runIds: [],\n warnings,\n notFound: true,\n };\n }\n const runIdSet = new Set(runIds);\n return {\n metas: metas.filter((meta) => runIdSet.has(meta.runId)),\n scopeLabel: groupId,\n scopeKind: \"group\",\n runIds,\n warnings,\n notFound: false,\n };\n }\n\n return {\n metas: [...metas],\n scopeLabel: \"\",\n scopeKind: \"session\",\n runIds: [],\n warnings,\n notFound: false,\n };\n}\n\n/** Lightweight metadata rows for scope resolution when run_started metadata is absent. */\nexport function traceMetasToSessionRunRecords(\n metas: readonly TraceMetadata[],\n): SessionRunRecord[] {\n return metas.map(metaToSessionRunRecord);\n}\n","import { buildSessionIndex } from \"./index.js\";\nimport { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type { BuildSessionIndexOptions, SessionRunRecord } from \"./types.js\";\n\nexport type SessionCohortKind = \"session\" | \"group\";\n\nexport interface SessionCohort {\n key: string;\n kind: SessionCohortKind;\n runIds: string[];\n}\n\nexport interface GroupSessionCohortsOptions extends BuildSessionIndexOptions {\n groupBy?: \"session\" | \"group\";\n}\n\n/**\n * Groups runs into session or group cohort buckets for local search/check aggregation.\n * Deterministic; does not infer causality from timestamps.\n */\nexport function groupSessionCohorts(\n runs: readonly SessionRunRecord[],\n options: GroupSessionCohortsOptions = {},\n): SessionCohort[] {\n const groupBy = options.groupBy ?? \"session\";\n const cohorts: SessionCohort[] = [];\n\n if (groupBy === \"session\") {\n const index = buildSessionIndex(runs, options);\n for (const session of index.sessions) {\n cohorts.push({\n key: session.sessionId,\n kind: \"session\",\n runIds: [...session.runIds],\n });\n }\n if (index.unscopedRunIds.length > 0) {\n cohorts.push({\n key: \"__unscoped__\",\n kind: \"session\",\n runIds: [...index.unscopedRunIds],\n });\n }\n return cohorts.sort((a, b) => a.key.localeCompare(b.key));\n }\n\n const byGroup = new Map<string, string[]>();\n const unscoped: string[] = [];\n\n for (const run of runs) {\n const groupId = extractSessionWorkflowMetadata(run.metadata)?.groupId;\n if (!groupId) {\n unscoped.push(run.runId);\n continue;\n }\n const bucket = byGroup.get(groupId) ?? [];\n bucket.push(run.runId);\n byGroup.set(groupId, bucket);\n }\n\n for (const [key, runIds] of [...byGroup.entries()].sort(([a], [b]) =>\n a.localeCompare(b),\n )) {\n cohorts.push({\n key,\n kind: \"group\",\n runIds: runIds.sort(),\n });\n }\n\n if (unscoped.length > 0) {\n cohorts.push({\n key: \"__unscoped__\",\n kind: \"group\",\n runIds: unscoped.sort(),\n });\n }\n\n return cohorts;\n}\n","import type {\n TraceCheckDiagnostic,\n TraceCheckFinding,\n TraceCheckResult,\n TraceCheckRuleExecution,\n TraceCheckStatus,\n TraceCheckSummary,\n} from \"../checks/index.js\";\nimport type { SessionWarning } from \"./types.js\";\n\nexport interface TraceSessionCheckResult extends TraceCheckResult {\n scopeKind: \"session\" | \"group\";\n scopeLabel: string;\n runIds: string[];\n runResults: Array<{ runId: string; status: TraceCheckStatus }>;\n sessionWarnings?: SessionWarning[];\n}\n\nfunction emptySummary(): TraceCheckSummary {\n return { passed: 0, failed: 0, warnings: 0, errors: 0, rulesEvaluated: 0 };\n}\n\nfunction mergeSummary(\n target: TraceCheckSummary,\n source: TraceCheckSummary,\n): TraceCheckSummary {\n return {\n passed: target.passed + source.passed,\n failed: target.failed + source.failed,\n warnings: target.warnings + source.warnings,\n errors: target.errors + source.errors,\n rulesEvaluated: target.rulesEvaluated + source.rulesEvaluated,\n };\n}\n\nfunction sessionDiagnostic(\n code: \"AI_CHECK_INVALID_ARGUMENTS\" | \"AI_CHECK_TRACE_UNREADABLE\",\n message: string,\n): TraceCheckDiagnostic {\n return { code, message, severity: \"error\" };\n}\n\n/** Aggregates per-run check results for a session or group scope. */\nexport function aggregateSessionCheckResults(\n perRun: readonly TraceCheckResult[],\n scope: {\n scopeKind: \"session\" | \"group\";\n scopeLabel: string;\n runIds: string[];\n sessionWarnings?: SessionWarning[];\n notFound?: boolean;\n empty?: boolean;\n },\n): TraceSessionCheckResult {\n if (scope.notFound) {\n return {\n ok: false,\n status: \"error\",\n format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n scopeKind: scope.scopeKind,\n scopeLabel: scope.scopeLabel,\n runIds: [],\n runResults: [],\n summary: { ...emptySummary(), errors: 1 },\n findings: [],\n diagnostics: [\n sessionDiagnostic(\n \"AI_CHECK_INVALID_ARGUMENTS\",\n `${scope.scopeKind} not found: ${scope.scopeLabel}`,\n ),\n ],\n ruleExecutions: [],\n ...(scope.sessionWarnings?.length\n ? { sessionWarnings: [...scope.sessionWarnings] }\n : {}),\n };\n }\n\n if (scope.empty || perRun.length === 0) {\n return {\n ok: false,\n status: \"error\",\n format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n scopeKind: scope.scopeKind,\n scopeLabel: scope.scopeLabel,\n runIds: scope.runIds,\n runResults: [],\n summary: { ...emptySummary(), errors: 1 },\n findings: [],\n diagnostics: [\n sessionDiagnostic(\n \"AI_CHECK_TRACE_UNREADABLE\",\n `No readable traces in ${scope.scopeKind}: ${scope.scopeLabel}`,\n ),\n ],\n ruleExecutions: [],\n ...(scope.sessionWarnings?.length\n ? { sessionWarnings: [...scope.sessionWarnings] }\n : {}),\n };\n }\n\n let summary = emptySummary();\n const findings: TraceCheckFinding[] = [];\n const diagnostics: TraceCheckDiagnostic[] = [];\n const ruleExecutions: TraceCheckRuleExecution[] = [];\n const runResults: Array<{ runId: string; status: TraceCheckStatus }> = [];\n\n for (const result of perRun) {\n summary = mergeSummary(summary, result.summary);\n findings.push(...result.findings);\n diagnostics.push(...result.diagnostics);\n ruleExecutions.push(...(result.ruleExecutions ?? []));\n if (result.runId) {\n runResults.push({ runId: result.runId, status: result.status });\n }\n }\n\n runResults.sort((a, b) => a.runId.localeCompare(b.runId));\n findings.sort((a, b) => {\n const runCmp = (a.evidence[0]?.runId ?? \"\").localeCompare(\n b.evidence[0]?.runId ?? \"\",\n );\n if (runCmp !== 0) return runCmp;\n return a.ruleId.localeCompare(b.ruleId);\n });\n ruleExecutions.sort((a, b) => {\n const runCmp = (a.runId ?? \"\").localeCompare(b.runId ?? \"\");\n if (runCmp !== 0) return runCmp;\n return a.ruleId.localeCompare(b.ruleId);\n });\n\n const hasErrors = diagnostics.some((item) => item.severity === \"error\");\n const status: TraceCheckStatus = hasErrors\n ? \"error\"\n : summary.failed > 0\n ? \"fail\"\n : \"pass\";\n\n return {\n ok: status === \"pass\",\n status,\n format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n scopeKind: scope.scopeKind,\n scopeLabel: scope.scopeLabel,\n runIds: scope.runIds,\n runResults,\n summary,\n findings,\n diagnostics,\n ruleExecutions,\n ...(scope.sessionWarnings?.length\n ? { sessionWarnings: [...scope.sessionWarnings] }\n : {}),\n };\n}\n","import {\n extractSessionWorkflowMetadata,\n sessionKeyForRun,\n} from \"./metadata.js\";\nimport { enrichSessionSummary } from \"./status.js\";\nimport type {\n BuildSessionIndexOptions,\n CriticalPathStep,\n HandoffEdge,\n RetryLink,\n SessionGroup,\n SessionIndex,\n SessionRunRecord,\n SessionSummary,\n SessionWarning,\n SessionWorkflowMetadata,\n} from \"./types.js\";\n\nfunction compareRuns(a: SessionRunRecord, b: SessionRunRecord): number {\n const aStart = a.startedAt ?? 0;\n const bStart = b.startedAt ?? 0;\n if (aStart !== bStart) return aStart - bStart;\n return a.runId.localeCompare(b.runId);\n}\n\nfunction buildGroups(\n runIds: string[],\n metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n): SessionGroup[] {\n const byGroup = new Map<string, SessionGroup>();\n\n for (const runId of runIds) {\n const groupId = metaByRunId.get(runId)?.groupId;\n if (!groupId) continue;\n const existing = byGroup.get(groupId);\n if (existing) {\n existing.runIds.push(runId);\n } else {\n byGroup.set(groupId, {\n groupId,\n parentGroupId: metaByRunId.get(runId)?.parentGroupId,\n runIds: [runId],\n });\n }\n }\n\n return [...byGroup.values()].map((group) => ({\n ...group,\n runIds: [...group.runIds].sort((a, b) => a.localeCompare(b)),\n }));\n}\n\nfunction buildHandoffs(\n runIds: string[],\n metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n warnings: SessionWarning[],\n sessionId: string,\n): HandoffEdge[] {\n const edges: HandoffEdge[] = [];\n const seen = new Set<string>();\n\n const pushEdge = (edge: HandoffEdge): void => {\n const key = `${edge.from}->${edge.to}:${edge.confidence}`;\n if (seen.has(key)) return;\n seen.add(key);\n edges.push(edge);\n };\n\n for (const runId of runIds) {\n const meta = metaByRunId.get(runId);\n if (!meta) continue;\n\n if (meta.handoffFrom && meta.handoffTo) {\n pushEdge({\n from: meta.handoffFrom,\n to: meta.handoffTo,\n source: \"manual\",\n confidence: \"explicit\",\n });\n continue;\n }\n\n if (meta.handoffFrom) {\n pushEdge({\n from: meta.handoffFrom,\n to: runId,\n source: \"manual\",\n confidence: \"explicit\",\n });\n }\n\n if (meta.handoffTo) {\n pushEdge({\n from: runId,\n to: meta.handoffTo,\n source: \"manual\",\n confidence: \"explicit\",\n });\n }\n\n if (\n meta.subAgentId &&\n meta.parentGroupId &&\n !meta.handoffFrom &&\n !meta.handoffTo\n ) {\n pushEdge({\n from: meta.parentGroupId,\n to: meta.subAgentId,\n source: \"inferred\",\n confidence: \"correlated\",\n });\n warnings.push({\n code: \"ambiguous-handoff-endpoints\",\n message:\n \"Handoff inferred from parentGroupId and subAgentId without explicit handoffFrom/handoffTo.\",\n runId,\n sessionId,\n });\n }\n }\n\n return edges.sort((a, b) => {\n const from = a.from.localeCompare(b.from);\n if (from !== 0) return from;\n return a.to.localeCompare(b.to);\n });\n}\n\nfunction buildRetries(\n runIds: string[],\n metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n warnings: SessionWarning[],\n sessionId: string,\n): RetryLink[] {\n const retries: RetryLink[] = [];\n\n for (const runId of runIds) {\n const meta = metaByRunId.get(runId);\n if (!meta) continue;\n\n if (meta.retryOf) {\n retries.push({\n runId,\n retryOf: meta.retryOf,\n attempt: meta.attempt,\n source: \"manual\",\n confidence: \"explicit\",\n });\n continue;\n }\n\n if (meta.attempt !== undefined && meta.attempt > 1) {\n retries.push({\n runId,\n attempt: meta.attempt,\n source: \"inferred\",\n confidence: \"correlated\",\n });\n warnings.push({\n code: \"ambiguous-retry-link\",\n message: \"attempt > 1 without retryOf; retry link is correlated only.\",\n runId,\n sessionId,\n });\n }\n }\n\n return retries.sort((a, b) => a.runId.localeCompare(b.runId));\n}\n\nfunction buildCriticalPath(\n runs: SessionRunRecord[],\n handoffs: HandoffEdge[],\n): CriticalPathStep[] {\n const runById = new Map(runs.map((run) => [run.runId, run]));\n const explicitTargets = new Set(\n handoffs\n .filter((edge) => edge.confidence === \"explicit\")\n .map((edge) => edge.to),\n );\n const explicitSources = new Set(\n handoffs\n .filter((edge) => edge.confidence === \"explicit\")\n .map((edge) => edge.from),\n );\n\n const ordered = [...runs].sort(compareRuns);\n const path: CriticalPathStep[] = [];\n const visited = new Set<string>();\n\n const pushRun = (\n run: SessionRunRecord,\n confidence: CriticalPathStep[\"confidence\"],\n source: CriticalPathStep[\"source\"],\n ): void => {\n if (visited.has(run.runId)) return;\n visited.add(run.runId);\n path.push({\n runId: run.runId,\n name: run.name,\n startedAt: run.startedAt,\n durationMs: run.durationMs,\n confidence,\n source,\n });\n };\n\n for (const edge of handoffs) {\n if (edge.confidence !== \"explicit\") continue;\n const fromRun = [...runById.values()].find(\n (run) =>\n run.runId === edge.from ||\n metaRunIdMatches(run, edge.from, runById),\n );\n const toRun = [...runById.values()].find(\n (run) =>\n run.runId === edge.to || metaRunIdMatches(run, edge.to, runById),\n );\n if (fromRun) pushRun(fromRun, \"explicit\", \"manual\");\n if (toRun) pushRun(toRun, \"explicit\", \"manual\");\n }\n\n for (const run of ordered) {\n if (visited.has(run.runId)) continue;\n const confidence =\n explicitTargets.has(run.runId) || explicitSources.has(run.runId)\n ? \"explicit\"\n : \"correlated\";\n pushRun(run, confidence, confidence === \"explicit\" ? \"manual\" : \"inferred\");\n }\n\n return path;\n}\n\nfunction metaRunIdMatches(\n run: SessionRunRecord,\n token: string,\n runById: Map<string, SessionRunRecord>,\n): boolean {\n const meta = extractSessionWorkflowMetadata(run.metadata);\n return (\n meta?.subAgentId === token ||\n meta?.groupId === token ||\n runById.has(token)\n );\n}\n\n/**\n * Builds a deterministic session index from local run records and metadata.\n * Does not read files or infer causality from timestamps alone.\n */\nexport function buildSessionIndex(\n inputRuns: readonly SessionRunRecord[],\n options: BuildSessionIndexOptions = {},\n): SessionIndex {\n const warnings: SessionWarning[] = [];\n const runs = [...inputRuns].sort(compareRuns);\n const metaByRunId = new Map<string, SessionWorkflowMetadata | undefined>();\n\n for (const run of runs) {\n metaByRunId.set(run.runId, extractSessionWorkflowMetadata(run.metadata));\n }\n\n const sessionsByKey = new Map<string, SessionRunRecord[]>();\n const unscopedRunIds: string[] = [];\n\n for (const run of runs) {\n const meta = metaByRunId.get(run.runId);\n const key = sessionKeyForRun(meta, {\n correlateByGroupId: options.correlateByGroupId === true,\n });\n if (!key) {\n unscopedRunIds.push(run.runId);\n continue;\n }\n const bucket = sessionsByKey.get(key) ?? [];\n bucket.push(run);\n sessionsByKey.set(key, bucket);\n }\n\n const sessions: SessionSummary[] = [...sessionsByKey.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([sessionId, sessionRuns]) => {\n const runIds = sessionRuns.map((run) => run.runId).sort();\n const handoffs = buildHandoffs(runIds, metaByRunId, warnings, sessionId);\n const retries = buildRetries(runIds, metaByRunId, warnings, sessionId);\n const groups = buildGroups(runIds, metaByRunId);\n const criticalPath = buildCriticalPath(sessionRuns, handoffs);\n\n const confidences = new Set(handoffs.map((edge) => edge.confidence));\n if (confidences.has(\"explicit\") && confidences.has(\"correlated\")) {\n warnings.push({\n code: \"mixed-confidence-group\",\n message: \"Session aggregates explicit and correlated handoff edges.\",\n sessionId,\n });\n }\n\n return enrichSessionSummary(\n {\n sessionId,\n runIds,\n groups,\n handoffs,\n retries,\n criticalPath,\n },\n runs,\n {\n nowMs: options.nowMs,\n staleThresholdMs: options.staleThresholdMs,\n },\n );\n });\n\n if (sessions.length === 0 && runs.length > 0) {\n warnings.push({\n code: \"missing-session-id\",\n message: \"No sessionId (or correlated groupId) found on input runs.\",\n });\n }\n\n warnings.sort((a, b) => {\n const code = a.code.localeCompare(b.code);\n if (code !== 0) return code;\n return (a.runId ?? \"\").localeCompare(b.runId ?? \"\");\n });\n\n return {\n runs,\n sessions,\n unscopedRunIds: unscopedRunIds.sort(),\n warnings,\n };\n}\n\nexport { extractSessionWorkflowMetadata, sessionKeyForRun } from \"./metadata.js\";\nexport { deriveSessionStatus, enrichSessionSummary } from \"./status.js\";\nexport {\n buildActivitySummary,\n renderActivitySummaryHuman,\n} from \"./activity.js\";\nexport type {\n ActivityEntry,\n ActivitySummary,\n BuildActivitySummaryOptions,\n BuildSessionIndexOptions,\n CriticalPathStep,\n EnrichSessionSummaryOptions,\n HandoffEdge,\n RetryLink,\n SessionCheckSummary,\n SessionConfidence,\n SessionEdgeSource,\n SessionGroup,\n SessionIndex,\n SessionLastError,\n SessionRunRecord,\n SessionStatus,\n SessionSummary,\n SessionWarning,\n SessionWorkflowMetadata,\n SessionWorkflowKey,\n} from \"./types.js\";\nexport { SESSION_WORKFLOW_KEYS } from \"./types.js\";\nexport { enrichSessionRunRecord, loadSessionRunRecords } from \"./load.js\";\nexport {\n filterMetasBySessionScope,\n traceMetasToSessionRunRecords,\n type SessionScopeOptions,\n type SessionScopeResult,\n} from \"./scope.js\";\nexport {\n groupSessionCohorts,\n type GroupSessionCohortsOptions,\n type SessionCohort,\n type SessionCohortKind,\n} from \"./cohort.js\";\nexport {\n aggregateSessionCheckResults,\n type TraceSessionCheckResult,\n} from \"./checks.js\";\n","import { createReadStream } from \"node:fs\";\nimport { createInterface } from \"node:readline\";\n\nimport { isTraceEvent } from \"./types.js\";\n\nconst KNOWN_EVENTS = new Set([\n \"run_started\",\n \"run_completed\",\n \"step_started\",\n \"step_completed\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction safeParse(line: string): unknown | undefined {\n try {\n return JSON.parse(line) as unknown;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Safety check for cleanup workflows: returns true only when the file appears to be an AgentInspect trace.\n * This should be conservative: false positives are more dangerous than false negatives.\n */\nexport async function isAgentInspectTrace(filePath: string): Promise<boolean> {\n try {\n const rl = createInterface({\n input: createReadStream(filePath, { encoding: \"utf8\" }),\n crlfDelay: Infinity,\n });\n\n let checked = 0;\n for await (const line of rl) {\n const trimmed = line.trim();\n if (trimmed === \"\") continue;\n const parsed = safeParse(trimmed);\n if (!parsed) continue;\n if (!isRecord(parsed)) continue;\n\n checked += 1;\n\n // Strong signal: a valid TraceEvent (schemaVersion 0.1 + known shape).\n if (isTraceEvent(parsed)) return true;\n\n // Secondary signal: recognizable event name + runId.\n const ev = parsed.event;\n const runId = parsed.runId;\n if (typeof ev === \"string\" && KNOWN_EVENTS.has(ev) && typeof runId === \"string\") {\n return true;\n }\n\n // If we found valid JSON objects but none look like AgentInspect, keep scanning a bit.\n if (checked >= 20) break;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n","import { parseDuration } from \"../utils/duration.js\";\nimport type { SessionIndex, SessionRunRecord } from \"../sessions/types.js\";\nimport type { BundleResolveOptions, BundleResolveResult } from \"./types.js\";\n\nfunction parseSinceCutoff(since: string): number {\n const trimmed = since.trim();\n if (trimmed === \"\") {\n throw new Error(\"--since requires a non-empty duration (e.g. 24h, 7d).\");\n }\n return Date.now() - parseDuration(trimmed);\n}\n\nfunction runActivityMs(run: SessionRunRecord): number | undefined {\n if (run.startedAt !== undefined && Number.isFinite(run.startedAt)) return run.startedAt;\n if (run.endedAt !== undefined && Number.isFinite(run.endedAt)) return run.endedAt;\n return undefined;\n}\n\nfunction runsInSinceWindow(\n runs: readonly SessionRunRecord[],\n since: string,\n): string[] {\n const cutoff = parseSinceCutoff(since);\n const ids: string[] = [];\n for (const run of runs) {\n const activity = runActivityMs(run);\n if (activity !== undefined && activity >= cutoff) {\n ids.push(run.runId);\n }\n }\n return ids.sort((a, b) => a.localeCompare(b));\n}\n\nfunction findSession(index: SessionIndex, sessionId: string) {\n return index.sessions.find((session) => session.sessionId === sessionId);\n}\n\n/**\n * Resolves which run ids belong in a bundle.\n *\n * @throws when target mode is missing, ambiguous, or yields zero runs.\n */\nexport function resolveBundleRunIds(\n index: SessionIndex,\n runs: readonly SessionRunRecord[],\n options: BundleResolveOptions,\n): BundleResolveResult {\n const runId = options.runId?.trim();\n const sessionId = options.sessionId?.trim();\n const since = options.since?.trim();\n\n const modes = [runId ? 1 : 0, sessionId ? 1 : 0, since ? 1 : 0].reduce((a, b) => a + b, 0);\n if (modes === 0) {\n throw new Error(\n \"bundle requires a run id, --session <sessionId>, or --since <duration>.\",\n );\n }\n if (modes > 1) {\n throw new Error(\n \"bundle accepts only one target: a run id, --session, or --since (not combined).\",\n );\n }\n\n if (runId) {\n const known = runs.some((run) => run.runId === runId);\n if (!known) {\n throw new Error(`Run \"${runId}\" was not found in the trace directory.`);\n }\n return { runIds: [runId] };\n }\n\n if (sessionId) {\n const session = findSession(index, sessionId);\n if (!session) {\n throw new Error(`Session \"${sessionId}\" was not found.`);\n }\n if (session.runIds.length === 0) {\n throw new Error(`Session \"${sessionId}\" has no runs to bundle.`);\n }\n return {\n runIds: [...session.runIds].sort((a, b) => a.localeCompare(b)),\n sessionId,\n };\n }\n\n const runIds = runsInSinceWindow(runs, since!);\n if (runIds.length === 0) {\n throw new Error(`No runs matched --since ${since}.`);\n }\n return { runIds, since };\n}\n","import type { BundleSafeStatus, BundleSafeStatusMetadata } from \"./types.js\";\n\nexport function aggregateBundleSafeStatus(statuses: readonly BundleSafeStatus[]): BundleSafeStatus {\n if (statuses.length === 0) return \"UNKNOWN\";\n if (statuses.some((status) => status === \"UNSAFE\")) return \"UNSAFE\";\n if (statuses.some((status) => status === \"UNKNOWN\")) return \"UNKNOWN\";\n if (statuses.some((status) => status === \"SAFE WITH WARNINGS\")) return \"SAFE WITH WARNINGS\";\n return \"SAFE\";\n}\n\nexport function toMetadataSafeStatus(status: BundleSafeStatus): BundleSafeStatusMetadata {\n if (status === \"SAFE WITH WARNINGS\") return \"SAFE_WITH_WARNINGS\";\n return status;\n}\n\nexport function bundleFailsOnSafety(\n status: BundleSafeStatus,\n allowUnsafe: boolean,\n): boolean {\n if (allowUnsafe) return false;\n return status === \"UNSAFE\" || status === \"UNKNOWN\";\n}\n","import { aggregateBundleSafeStatus, toMetadataSafeStatus } from \"./safety-status.js\";\nimport type {\n BundleCheckResults,\n BundleMetadata,\n BundlePlaceholderArtifact,\n BundleRedactionProfile,\n BundleResolveResult,\n} from \"./types.js\";\n\nconst BUNDLE_NOTE =\n \"Generated locally by AgentInspect. Bundles are derived copies for review — not compliance or security certification. Review before sharing.\";\n\nconst PLACEHOLDER_NOTE =\n \"No eval or performance artifacts were requested for this bundle.\";\n\nexport function buildBundleMetadata(parts: {\n agentInspectVersion: string;\n profile: BundleRedactionProfile;\n resolve: BundleResolveResult;\n checks: BundleCheckResults;\n files: string[];\n createdAt?: string;\n}): BundleMetadata {\n const aggregate = aggregateBundleSafeStatus(\n parts.checks.runs.map((run) => run.status),\n );\n return {\n createdAt: parts.createdAt ?? new Date().toISOString(),\n agentInspectVersion: parts.agentInspectVersion,\n redactionProfile: parts.profile,\n sourceTraceCount: parts.resolve.runIds.length,\n runIds: [...parts.resolve.runIds],\n safeStatus: toMetadataSafeStatus(aggregate),\n files: [...parts.files].sort((a, b) => a.localeCompare(b)),\n note: BUNDLE_NOTE,\n ...(parts.resolve.sessionId !== undefined ? { sessionId: parts.resolve.sessionId } : {}),\n ...(parts.resolve.since !== undefined ? { since: parts.resolve.since } : {}),\n };\n}\n\nexport function buildPlaceholderArtifact(): BundlePlaceholderArtifact {\n return {\n status: \"not_requested\",\n note: PLACEHOLDER_NOTE,\n };\n}\n","import type { BundleCheckResults, BundleMetadata, BundleRedactionReport } from \"./types.js\";\n\nfunction markdownTable(rows: readonly [string, string | number | undefined][]): string {\n const lines = [\"| Field | Value |\", \"| --- | --- |\"];\n for (const [key, value] of rows) {\n lines.push(`| ${key} | ${value ?? \"unknown\"} |`);\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Builds a human-readable bundle summary for `summary.md`.\n */\nexport function buildBundleSummaryMarkdown(parts: {\n metadata: BundleMetadata;\n checks: BundleCheckResults;\n redaction: BundleRedactionReport;\n}): string {\n const { metadata, checks, redaction } = parts;\n const lines: string[] = [\n \"# AgentInspect trace bundle\",\n \"\",\n metadata.note,\n \"\",\n \"## Overview\",\n \"\",\n markdownTable([\n [\"Created\", metadata.createdAt],\n [\"AgentInspect\", metadata.agentInspectVersion],\n [\"Redaction profile\", metadata.redactionProfile],\n [\"Safe status\", metadata.safeStatus],\n [\"Source traces\", metadata.sourceTraceCount],\n [\"Runs\", metadata.runIds.join(\", \")],\n ...(metadata.sessionId ? [[\"Session\", metadata.sessionId] as [string, string]] : []),\n ...(metadata.since ? [[\"Since\", metadata.since] as [string, string]] : []),\n ]),\n \"\",\n \"## Safety checks\",\n \"\",\n `Aggregate: **${checks.aggregateStatus}**`,\n \"\",\n ];\n\n for (const run of checks.runs) {\n const source =\n run.sourceStatus !== undefined && run.sourceStatus !== run.status\n ? `; source ${run.sourceStatus}`\n : \"\";\n lines.push(\n `- \\`${run.runId}\\`: artifact ${run.status}${source} (${run.findings} finding(s), ${run.errors} error(s), ${run.warnings} warning(s))`,\n );\n }\n\n lines.push(\"\", \"## Redaction\", \"\", `Total findings: ${redaction.totalFindings}`, \"\");\n for (const run of redaction.runs) {\n const detectors = run.detectors.length > 0 ? run.detectors.join(\", \") : \"none\";\n lines.push(`- \\`${run.runId}\\`: ${run.findings} finding(s); detectors: ${detectors}`);\n }\n\n lines.push(\n \"\",\n \"## Files\",\n \"\",\n ...metadata.files.map((file) => `- \\`${file}\\``),\n \"\",\n \"_Review every generated artifact before sharing outside your team._\",\n \"\",\n );\n\n return lines.join(\"\\n\");\n}\n","import path from \"node:path\";\n\n/**\n * Sanitizes a run id for bundle directory and asset filenames.\n * Strips path segments and replaces unsafe characters.\n */\nexport function sanitizeBundleRunId(runId: string): string {\n let safe =\n typeof runId === \"string\" && runId.trim() !== \"\" ? runId.trim() : \"run_unknown\";\n safe = path.basename(safe);\n safe = safe.replace(/[^a-zA-Z0-9._-]+/g, \"_\");\n if (safe === \"\" || safe === \".\" || safe === \"..\") {\n safe = \"run_unknown\";\n }\n return safe;\n}\n\n/**\n * Relative POSIX path for a run asset inside a bundle directory.\n */\nexport function bundleRunAssetRelativePath(runId: string, extension: string): string {\n const safe = sanitizeBundleRunId(runId);\n const ext = extension.startsWith(\".\") ? extension : `.${extension}`;\n return path.posix.join(\"assets\", \"runs\", `${safe}${ext}`);\n}\n\n/**\n * Ensures a relative bundle path resolves inside the output directory.\n */\nexport function assertBundlePathContained(\n outputDir: string,\n relativePath: string,\n): string {\n const base = path.resolve(outputDir);\n const resolved = path.resolve(base, relativePath);\n if (resolved !== base && !resolved.startsWith(base + path.sep)) {\n throw new Error(`Bundle path escapes output directory: ${relativePath}`);\n }\n return resolved;\n}\n\n/**\n * Normalizes bundle output path.\n * For directory/html modes, strips a trailing `.zip` suffix (folder-first).\n * Pass `preserveZipExtension: true` for `--format zip`.\n */\nexport function normalizeBundleOutputPath(\n out: string,\n options?: { preserveZipExtension?: boolean },\n): string {\n const trimmed = out.trim();\n if (trimmed === \"\") {\n throw new Error(\"--out requires a non-empty path.\");\n }\n const resolved = path.resolve(trimmed);\n if (\n options?.preserveZipExtension !== true &&\n resolved.toLowerCase().endsWith(\".zip\")\n ) {\n return resolved.slice(0, -4);\n }\n return resolved;\n}\n\n/**\n * Default bundle directory when --out is omitted.\n */\nexport function defaultBundleOutputPath(runIds: readonly string[]): string {\n const label =\n runIds.length === 1 ? sanitizeBundleRunId(runIds[0]!) : `multi-${runIds.length}`;\n const stamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n return path.resolve(`agent-inspect-bundle-${label}-${stamp}`);\n}\n","/** Portable Evidence v2 (`evidenceFormatVersion`) — independent of trace schema. */\n\nexport type EvidenceFormatVersion = \"1.0\";\n\nexport type EvidenceSafeStatus = \"SAFE\" | \"SAFE WITH WARNINGS\" | \"UNSAFE\" | \"UNKNOWN\";\n\nexport type EvidenceRedactionProfile = \"local\" | \"share\" | \"strict\";\n\nexport type EvidenceVerificationPolicy = \"development\" | \"local\" | \"share\" | \"strict\";\n\nexport type EvidenceFileRole =\n | \"report\"\n | \"redacted-trace\"\n | \"checks\"\n | \"contract\"\n | \"redaction-report\"\n | \"summary\"\n | \"other\";\n\n/** How a packaged contract/preset was supplied (6.28+). */\nexport type EvidenceContractBindingSource =\n | \"file\"\n | \"inline\"\n | \"preset\"\n | \"cli-shorthand\"\n | \"programmatic\";\n\n/** Reproducibility honesty for contract binding (6.28+). */\nexport type EvidenceContractBindingStatus = \"complete\" | \"partial\" | \"unavailable\";\n\n/**\n * Optional Evidence v2 contract binding (6.28+).\n * Additive; older readers ignore unknown fields. Not a signature or trusted-time claim.\n */\nexport interface EvidenceContractBinding {\n status: EvidenceContractBindingStatus;\n source: EvidenceContractBindingSource;\n contractId?: string;\n contractVersion?: string;\n canonicalizationVersion: \"1\";\n engineVersion: string;\n /** Relative packaged path (typically `contract.resolved.json`). */\n path?: string;\n /** SHA-256 of the packaged resolved-contract bytes. */\n sha256?: string;\n ruleIds: string[];\n unsupportedRuleIds?: string[];\n note?: string;\n}\n\n/**\n * Optional fields embedded in `check-results.json` to bind results to a contract digest.\n */\nexport interface EvidenceCheckContractBinding {\n contractDigest?: string;\n canonicalizationVersion?: \"1\";\n engineVersion?: string;\n evaluatedRuleIds?: string[];\n bindingStatus?: EvidenceContractBindingStatus;\n unsupportedRuleIds?: string[];\n origin?: {\n source: EvidenceContractBindingSource;\n preset?: string;\n path?: string;\n };\n selectedScope?: Record<string, unknown>;\n selectedAlternativeBranch?: string;\n}\n\nexport interface EvidenceSourceHash {\n runId: string;\n algorithm: \"sha256\";\n hash: string;\n}\n\nexport interface EvidenceFileEntry {\n path: string;\n sha256: string;\n role?: EvidenceFileRole;\n}\n\nexport interface EvidenceManifest {\n evidenceFormatVersion: EvidenceFormatVersion;\n generator: {\n name: string;\n version: string;\n };\n createdAt?: string;\n source: {\n runIds: string[];\n traceSchemaVersions: string[];\n sourceHashes: EvidenceSourceHash[];\n };\n policy: {\n redactionProfile: EvidenceRedactionProfile;\n verificationPolicy: EvidenceVerificationPolicy;\n };\n assessment: {\n status: EvidenceSafeStatus;\n sourceStatus?: EvidenceSafeStatus;\n note?: string;\n };\n /**\n * Optional TraceFacts / logical-projection summary (6.14+).\n * Additive; older readers ignore unknown fields.\n */\n semantics?: EvidenceSemantics;\n /**\n * Optional resolved-contract binding (6.28+).\n * Additive; older readers ignore unknown fields.\n */\n contract?: EvidenceContractBinding;\n files: EvidenceFileEntry[];\n}\n\n/**\n * Bounded semantic summary embedded in Evidence v2 (mirrors check parity summary).\n * Does not embed raw events or prompts.\n */\nexport interface EvidenceSemantics {\n projectionVersion?: string;\n rawEventCount?: number;\n logicalEventCount?: number;\n runningLogicalCount?: number;\n finishedToolCount?: number;\n finishedToolNames?: string[];\n pairedCount?: number;\n parentRemapCount?: number;\n contractStatus?: \"pass\" | \"fail\" | \"error\";\n /**\n * Bounded derived failure role counts (6.19+). IDs and error bodies omitted.\n *\n * @experimental\n */\n failureRoleCounts?: {\n transient: number;\n recovered: number;\n terminal: number;\n unknown: number;\n };\n}\n\nexport interface EvidencePackagedFile {\n /** Relative POSIX path inside the evidence/bundle directory. */\n path: string;\n /** Exact bytes that will be / were written. */\n content: string | Uint8Array;\n role?: EvidenceFileRole;\n}\n\nexport const EVIDENCE_FORMAT_VERSION: EvidenceFormatVersion = \"1.0\";\n\nexport const EVIDENCE_ASSESSMENT_NOTE =\n \"Best-effort local safety verification only; not a compliance certification.\";\n\nexport const EVIDENCE_MANIFEST_FILENAME = \"evidence.json\";\n\n/** Packaged resolved TraceContract / check-preset snapshot (6.28+). */\nexport const EVIDENCE_RESOLVED_CONTRACT_FILENAME = \"contract.resolved.json\";\n","import { createHash } from \"node:crypto\";\n\nconst SHA256_RE = /^[a-f0-9]{64}$/i;\n\n/**\n * SHA-256 hex digest of exact bytes (UTF-8 when `data` is a string).\n */\nexport function sha256Hex(data: string | Uint8Array): string {\n const hash = createHash(\"sha256\");\n if (typeof data === \"string\") {\n hash.update(data, \"utf8\");\n } else {\n hash.update(data);\n }\n return hash.digest(\"hex\");\n}\n\nexport function isSha256Hex(value: string): boolean {\n return SHA256_RE.test(value);\n}\n\n/**\n * Constant-time-ish equality for hex digests (length-checked; not for secrets).\n */\nexport function sha256Equals(expected: string, actual: string): boolean {\n if (!isSha256Hex(expected) || !isSha256Hex(actual)) {\n return false;\n }\n const a = expected.toLowerCase();\n const b = actual.toLowerCase();\n if (a.length !== b.length) return false;\n let mismatch = 0;\n for (let i = 0; i < a.length; i += 1) {\n mismatch |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n return mismatch === 0;\n}\n","import path from \"node:path\";\n\n/**\n * Validates a relative evidence/bundle path: no absolute paths, no `..`, POSIX separators.\n * Returns the normalized POSIX relative path.\n */\nexport function assertEvidenceRelativePath(relativePath: string): string {\n if (typeof relativePath !== \"string\" || relativePath.trim() === \"\") {\n throw new Error(\"Evidence file path must be a non-empty relative path.\");\n }\n const trimmed = relativePath.trim().replaceAll(\"\\\\\", \"/\");\n if (path.isAbsolute(trimmed) || trimmed.startsWith(\"/\")) {\n throw new Error(`Evidence file path must be relative: ${relativePath}`);\n }\n const parts = trimmed.split(\"/\").filter((part) => part !== \"\");\n if (parts.length === 0) {\n throw new Error(`Evidence file path must be relative: ${relativePath}`);\n }\n for (const part of parts) {\n if (part === \".\" || part === \"..\") {\n throw new Error(`Evidence file path must not contain \".\" or \"..\": ${relativePath}`);\n }\n }\n return parts.join(\"/\");\n}\n","import { sha256Hex } from \"./hash.js\";\nimport { assertEvidenceRelativePath } from \"./paths.js\";\nimport {\n EVIDENCE_ASSESSMENT_NOTE,\n EVIDENCE_FORMAT_VERSION,\n EVIDENCE_MANIFEST_FILENAME,\n type EvidenceFileEntry,\n type EvidenceFileRole,\n type EvidenceManifest,\n type EvidencePackagedFile,\n type EvidenceRedactionProfile,\n type EvidenceSafeStatus,\n type EvidenceSourceHash,\n type EvidenceVerificationPolicy,\n} from \"./types.js\";\n\nfunction stable(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stable);\n if (value === null || typeof value !== \"object\") return value;\n const record = value as Record<string, unknown>;\n return Object.fromEntries(\n Object.keys(record)\n .sort((a, b) => a.localeCompare(b))\n .map((key) => [key, stable(record[key])]),\n );\n}\n\n/**\n * Deterministic JSON serialization used for evidence manifests (trailing newline).\n */\nexport function serializeEvidenceManifest(manifest: EvidenceManifest): string {\n return `${JSON.stringify(stable(manifest), null, 2)}\\n`;\n}\n\nexport function inferEvidenceFileRole(relativePath: string): EvidenceFileRole {\n const normalized = assertEvidenceRelativePath(relativePath);\n const base = normalized.includes(\"/\")\n ? normalized.slice(normalized.lastIndexOf(\"/\") + 1)\n : normalized;\n if (base === \"evidence.html\" || base === \"trace.html\" || base.endsWith(\".html\")) {\n return \"report\";\n }\n if (base === \"trace.jsonl\" || base.endsWith(\".jsonl\")) {\n return \"redacted-trace\";\n }\n if (base === \"check-results.json\") {\n return \"checks\";\n }\n if (base === \"contract.resolved.json\") {\n return \"contract\";\n }\n if (base === \"redaction-report.json\") {\n return \"redaction-report\";\n }\n if (base === \"summary.md\") {\n return \"summary\";\n }\n return \"other\";\n}\n\n/**\n * Hash packaged file bytes into Evidence `files[]` entries (sorted by path).\n * Rejects `evidence.json` itself (manifest is not self-hashed).\n */\nexport function buildEvidenceFileEntries(\n files: readonly EvidencePackagedFile[],\n): EvidenceFileEntry[] {\n const byPath = new Map<string, EvidenceFileEntry>();\n for (const file of files) {\n const relativePath = assertEvidenceRelativePath(file.path);\n if (relativePath === EVIDENCE_MANIFEST_FILENAME) {\n throw new Error(\n `Do not include ${EVIDENCE_MANIFEST_FILENAME} in packaged file hashes (self-hash is undefined).`,\n );\n }\n if (byPath.has(relativePath)) {\n throw new Error(`Duplicate evidence file path: ${relativePath}`);\n }\n byPath.set(relativePath, {\n path: relativePath,\n sha256: sha256Hex(file.content),\n role: file.role ?? inferEvidenceFileRole(relativePath),\n });\n }\n return [...byPath.values()].sort((a, b) => a.path.localeCompare(b.path));\n}\n\nexport function buildEvidenceManifest(parts: {\n generatorVersion: string;\n generatorName?: string;\n runIds: readonly string[];\n traceSchemaVersions: readonly string[];\n sourceHashes: readonly EvidenceSourceHash[];\n redactionProfile: EvidenceRedactionProfile;\n verificationPolicy?: EvidenceVerificationPolicy;\n assessmentStatus: EvidenceSafeStatus;\n sourceStatus?: EvidenceSafeStatus;\n files: readonly EvidencePackagedFile[];\n createdAt?: string;\n note?: string;\n semantics?: EvidenceManifest[\"semantics\"];\n contract?: EvidenceManifest[\"contract\"];\n}): EvidenceManifest {\n const runIds = [...parts.runIds];\n if (runIds.length === 0) {\n throw new Error(\"Evidence manifest requires at least one run id.\");\n }\n for (const item of parts.sourceHashes) {\n if (!runIds.includes(item.runId)) {\n throw new Error(`sourceHashes runId \"${item.runId}\" is not listed in source.runIds.`);\n }\n if (item.algorithm !== \"sha256\") {\n throw new Error(`Unsupported source hash algorithm: ${item.algorithm}`);\n }\n }\n\n const assessment: EvidenceManifest[\"assessment\"] = {\n status: parts.assessmentStatus,\n note: parts.note ?? EVIDENCE_ASSESSMENT_NOTE,\n };\n if (parts.sourceStatus !== undefined) {\n assessment.sourceStatus = parts.sourceStatus;\n }\n\n return {\n evidenceFormatVersion: EVIDENCE_FORMAT_VERSION,\n generator: {\n name: parts.generatorName ?? \"agent-inspect\",\n version: parts.generatorVersion,\n },\n createdAt: parts.createdAt ?? new Date().toISOString(),\n source: {\n runIds,\n traceSchemaVersions: [...parts.traceSchemaVersions].sort((a, b) => a.localeCompare(b)),\n sourceHashes: [...parts.sourceHashes].sort((a, b) => a.runId.localeCompare(b.runId)),\n },\n policy: {\n redactionProfile: parts.redactionProfile,\n verificationPolicy: parts.verificationPolicy ?? parts.redactionProfile,\n },\n assessment,\n ...(parts.semantics !== undefined ? { semantics: { ...parts.semantics } } : {}),\n ...(parts.contract !== undefined ? { contract: { ...parts.contract } } : {}),\n files: buildEvidenceFileEntries(parts.files),\n };\n}\n\n/**\n * Minimal structural validation for a parsed evidence manifest object.\n * Unknown fields are preserved by returning the cast value after checks.\n */\nexport function validateEvidenceManifest(value: unknown): EvidenceManifest {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"Evidence manifest must be a JSON object.\");\n }\n const record = value as Record<string, unknown>;\n if (record.evidenceFormatVersion !== EVIDENCE_FORMAT_VERSION) {\n throw new Error(\n `Unsupported evidenceFormatVersion: ${String(record.evidenceFormatVersion)}`,\n );\n }\n const generator = record.generator;\n if (\n generator === null ||\n typeof generator !== \"object\" ||\n Array.isArray(generator) ||\n typeof (generator as { name?: unknown }).name !== \"string\" ||\n typeof (generator as { version?: unknown }).version !== \"string\"\n ) {\n throw new Error(\"Evidence manifest requires generator.name and generator.version.\");\n }\n const source = record.source;\n if (source === null || typeof source !== \"object\" || Array.isArray(source)) {\n throw new Error(\"Evidence manifest requires source.\");\n }\n const sourceRecord = source as {\n runIds?: unknown;\n traceSchemaVersions?: unknown;\n sourceHashes?: unknown;\n };\n if (!Array.isArray(sourceRecord.runIds) || sourceRecord.runIds.length === 0) {\n throw new Error(\"Evidence manifest source.runIds must be a non-empty array.\");\n }\n if (!Array.isArray(sourceRecord.traceSchemaVersions)) {\n throw new Error(\"Evidence manifest source.traceSchemaVersions must be an array.\");\n }\n if (!Array.isArray(sourceRecord.sourceHashes)) {\n throw new Error(\"Evidence manifest source.sourceHashes must be an array.\");\n }\n const policy = record.policy;\n if (policy === null || typeof policy !== \"object\" || Array.isArray(policy)) {\n throw new Error(\"Evidence manifest requires policy.\");\n }\n const assessment = record.assessment;\n if (\n assessment === null ||\n typeof assessment !== \"object\" ||\n Array.isArray(assessment) ||\n typeof (assessment as { status?: unknown }).status !== \"string\"\n ) {\n throw new Error(\"Evidence manifest requires assessment.status.\");\n }\n if (!Array.isArray(record.files) || record.files.length === 0) {\n throw new Error(\"Evidence manifest files must be a non-empty array.\");\n }\n for (const file of record.files) {\n if (file === null || typeof file !== \"object\" || Array.isArray(file)) {\n throw new Error(\"Evidence manifest file entries must be objects.\");\n }\n const entry = file as { path?: unknown; sha256?: unknown };\n if (typeof entry.path !== \"string\") {\n throw new Error(\"Evidence file entry requires path.\");\n }\n assertEvidenceRelativePath(entry.path);\n if (typeof entry.sha256 !== \"string\" || !/^[a-f0-9]{64}$/i.test(entry.sha256)) {\n throw new Error(`Evidence file entry requires sha256 hex for ${entry.path}.`);\n }\n }\n return value as EvidenceManifest;\n}\n\nexport function parseEvidenceManifestJson(text: string): EvidenceManifest {\n let parsed: unknown;\n try {\n parsed = JSON.parse(text) as unknown;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Evidence manifest is not valid JSON: ${message}`);\n }\n return validateEvidenceManifest(parsed);\n}\n\n/**\n * Collect unique `schemaVersion` values from agent-inspect JSONL text.\n */\nexport function collectTraceSchemaVersions(jsonl: string): string[] {\n const versions = new Set<string>();\n for (const line of jsonl.split(/\\r?\\n/)) {\n const trimmed = line.trim();\n if (trimmed === \"\") continue;\n try {\n const row = JSON.parse(trimmed) as { schemaVersion?: unknown };\n if (typeof row.schemaVersion === \"string\" && row.schemaVersion.trim() !== \"\") {\n versions.add(row.schemaVersion.trim());\n }\n } catch {\n // skip malformed lines — hashing still covers the raw bytes separately\n }\n }\n return [...versions].sort((a, b) => a.localeCompare(b));\n}\n","/**\n * Evidence v2 contract binding (6.28) — package a resolved serializable\n * TraceContract / check-preset snapshot and bind its digest to check results.\n *\n * Does not claim producer identity, trusted time, or semantic proof.\n */\n\nimport { defineTraceContract, type TraceContract, type TraceContractInput } from \"../checks/contract.js\";\nimport { sha256Equals, sha256Hex } from \"./hash.js\";\nimport {\n EVIDENCE_RESOLVED_CONTRACT_FILENAME,\n type EvidenceContractBinding,\n type EvidenceContractBindingSource,\n type EvidenceContractBindingStatus,\n type EvidenceCheckContractBinding,\n type EvidencePackagedFile,\n} from \"./types.js\";\n\nexport const EVIDENCE_CONTRACT_CANONICALIZATION_VERSION = \"1\" as const;\n\nexport const EVIDENCE_CONTRACT_PARTIAL_NOTE =\n \"Custom or programmatic rules are not serializable; Evidence records rule IDs only and does not claim complete reviewer replay.\";\n\nexport const EVIDENCE_CONTRACT_UNAVAILABLE_NOTE =\n \"No resolved TraceContract or check preset was packaged with this Evidence artifact.\";\n\nexport const EVIDENCE_CONTRACT_ASSURANCE_NOTE =\n \"Contract binding verifies packaged digest integrity only; it does not prove producer identity, trusted time, source completeness, semantic truth, or external acceptance.\";\n\n/** Deterministic JSON (sorted keys) with trailing newline. */\nexport function serializeCanonicalJson(value: unknown): string {\n return `${JSON.stringify(stableValue(value), null, 2)}\\n`;\n}\n\nfunction stableValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stableValue);\n if (value === null || typeof value !== \"object\") return value;\n if (typeof value === \"function\") return undefined;\n const record = value as Record<string, unknown>;\n return Object.fromEntries(\n Object.keys(record)\n .filter((key) => record[key] !== undefined && typeof record[key] !== \"function\")\n .sort((a, b) => a.localeCompare(b))\n .map((key) => [key, stableValue(record[key])]),\n );\n}\n\nfunction sortedUniqueStrings(values: readonly string[]): string[] {\n return [...new Set(values.map((item) => item.trim()).filter((item) => item !== \"\"))].sort((a, b) =>\n a.localeCompare(b),\n );\n}\n\n/**\n * Normalize TraceContract aliases and make common evaluator defaults explicit\n * for canonicalization version `\"1\"`.\n */\nexport function resolveSerializableTraceContract(\n input: TraceContractInput | TraceContract,\n): TraceContract {\n const defined = defineTraceContract(input);\n const tools = defined.tools\n ? {\n ...defined.tools,\n required: sortedUniqueStrings([\n ...(defined.tools.required ?? []),\n ...(defined.tools.requiredTools ?? []),\n ]),\n forbidden: sortedUniqueStrings([\n ...(defined.tools.forbidden ?? []),\n ...(defined.tools.forbiddenTools ?? []),\n ]),\n ...(defined.tools.allowed ? { allowed: sortedUniqueStrings(defined.tools.allowed) } : {}),\n ...(defined.tools.requiredOrder\n ? {\n requiredOrder: [...defined.tools.requiredOrder],\n requiredOrderMode: defined.tools.requiredOrderMode ?? \"first-occurrence\",\n }\n : {}),\n }\n : undefined;\n\n // Drop alias-only fields from the resolved snapshot.\n if (tools) {\n delete (tools as { requiredTools?: unknown }).requiredTools;\n delete (tools as { forbiddenTools?: unknown }).forbiddenTools;\n if (tools.required?.length === 0) delete (tools as { required?: unknown }).required;\n if (tools.forbidden?.length === 0) delete (tools as { forbidden?: unknown }).forbidden;\n }\n\n const run = defined.run\n ? {\n ...defined.run,\n // Evaluator default: requireCompleted is true unless explicitly false.\n requireCompleted: defined.run.requireCompleted !== false,\n }\n : undefined;\n\n return {\n ...defined,\n ...(run ? { run } : {}),\n ...(tools && Object.keys(tools).length > 0 ? { tools } : {}),\n };\n}\n\n/**\n * Static rule-id inventory implied by a resolved TraceContract (no evaluation).\n */\nexport function collectResolvedContractRuleIds(contract: TraceContract): string[] {\n const ids: string[] = [];\n if (contract.run) {\n if (contract.run.allowedStatuses?.length) ids.push(\"contract.run.allowedStatuses\");\n if (contract.run.requireCompleted === true) ids.push(\"run.requireCompleted\");\n if (contract.run.maxDurationMs !== undefined) ids.push(\"run.duration\");\n }\n if (contract.tools) {\n if (\n (contract.tools.required?.length ?? 0) > 0 ||\n (contract.tools.forbidden?.length ?? 0) > 0 ||\n contract.tools.allowed ||\n contract.tools.maxCalls !== undefined\n ) {\n ids.push(\"tool.usage\");\n }\n if (contract.tools.requiredOrder?.length) {\n for (let i = 0; i < contract.tools.requiredOrder.length - 1; i += 1) {\n ids.push(`contract.tool.order.${i}`);\n }\n }\n if (contract.tools.orderRules?.length) {\n for (let index = 0; index < contract.tools.orderRules.length; index += 1) {\n ids.push(`contract.tool.orderRule.${index}`);\n }\n }\n if (contract.tools.arguments?.length) ids.push(\"contract.tool.arguments\");\n }\n if (contract.llm) ids.push(\"llm.usage\");\n if (contract.observations?.required?.length) ids.push(\"contract.observation.required\");\n if (contract.observations?.failOn?.length) ids.push(\"outcome.status\");\n if (contract.observations?.requireProvenance) ids.push(\"contract.observation.provenance\");\n if (contract.controls) ids.push(\"contract.controls\");\n if (contract.retry) ids.push(\"contract.retry\");\n if (contract.scope) ids.push(\"contract.scope.selected\");\n if (contract.alternatives?.anyOf?.length) ids.push(\"contract.alternatives.anyOf\");\n return sortedUniqueStrings(ids);\n}\n\nexport interface ResolvedContractDocument {\n canonicalizationVersion: typeof EVIDENCE_CONTRACT_CANONICALIZATION_VERSION;\n kind: \"trace-contract\" | \"check-preset\";\n resolved: Record<string, unknown>;\n origin: {\n source: EvidenceContractBindingSource;\n preset?: string;\n path?: string;\n };\n}\n\nexport interface BuildEvidenceContractPackageInput {\n engineVersion: string;\n source: EvidenceContractBindingSource;\n /** Serializable TraceContract (preferred for `complete`). */\n contract?: TraceContractInput | TraceContract;\n /**\n * Pre-resolved check preset / CLI shorthand snapshot (caller expands).\n * Used when `contract` is omitted or as origin metadata beside a contract.\n */\n preset?: {\n name: string;\n resolved: Record<string, unknown>;\n };\n /** Original config path (omit or redact when sensitive). */\n path?: string;\n contractId?: string;\n contractVersion?: string;\n /**\n * Stable IDs for programmatic / custom rules that cannot be serialized.\n * Presence forces `status: \"partial\"`.\n */\n unsupportedRuleIds?: readonly string[];\n /** Override rule ID list (defaults to static inventory from the contract / preset select). */\n ruleIds?: readonly string[];\n note?: string;\n}\n\nexport interface EvidenceContractPackage {\n /** Packaged `contract.resolved.json` when a serializable snapshot exists. */\n file?: EvidencePackagedFile;\n binding: EvidenceContractBinding;\n /** Fields to merge into `check-results.json`. */\n checkBinding: EvidenceCheckContractBinding;\n /** Canonical document bytes when packaged (same as `file.content`). */\n resolvedJson?: string;\n}\n\nfunction buildUnavailablePackage(\n engineVersion: string,\n note?: string,\n): EvidenceContractPackage {\n const binding: EvidenceContractBinding = {\n status: \"unavailable\",\n source: \"programmatic\",\n canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n engineVersion,\n ruleIds: [],\n note: note ?? EVIDENCE_CONTRACT_UNAVAILABLE_NOTE,\n };\n return {\n binding,\n checkBinding: {\n canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n engineVersion,\n evaluatedRuleIds: [],\n bindingStatus: \"unavailable\",\n },\n };\n}\n\n/**\n * Build a resolved contract artifact + Evidence binding for packaging.\n *\n * Pass no `contract` and no `preset` to record an honest `unavailable` binding\n * (missing-contract case). Pass `unsupportedRuleIds` to force `partial`.\n */\nexport function buildEvidenceContractPackage(\n input: BuildEvidenceContractPackageInput,\n): EvidenceContractPackage {\n const unsupported = sortedUniqueStrings(input.unsupportedRuleIds ?? []);\n const hasContract = input.contract !== undefined;\n const hasPreset = input.preset !== undefined;\n\n if (!hasContract && !hasPreset) {\n return buildUnavailablePackage(input.engineVersion, input.note);\n }\n\n let kind: ResolvedContractDocument[\"kind\"] = \"trace-contract\";\n let resolved: Record<string, unknown>;\n let ruleIds: string[];\n\n if (hasContract) {\n const normalized = resolveSerializableTraceContract(input.contract!);\n resolved = stableValue(normalized) as Record<string, unknown>;\n ruleIds = collectResolvedContractRuleIds(normalized);\n } else {\n kind = \"check-preset\";\n resolved = stableValue(input.preset!.resolved) as Record<string, unknown>;\n const select = Array.isArray(input.preset!.resolved.select)\n ? (input.preset!.resolved.select as unknown[]).filter(\n (item): item is string => typeof item === \"string\",\n )\n : [];\n ruleIds = sortedUniqueStrings(select);\n }\n\n if (input.ruleIds !== undefined) {\n ruleIds = sortedUniqueStrings(input.ruleIds);\n }\n if (unsupported.length > 0) {\n ruleIds = sortedUniqueStrings([...ruleIds, ...unsupported]);\n }\n\n const document: ResolvedContractDocument = {\n canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n kind,\n resolved,\n origin: {\n source: input.source,\n ...(input.preset?.name ? { preset: input.preset.name } : {}),\n ...(input.path !== undefined && input.path.trim() !== \"\"\n ? { path: input.path.trim() }\n : {}),\n },\n };\n\n const resolvedJson = serializeCanonicalJson(document);\n const digest = sha256Hex(resolvedJson);\n const status: EvidenceContractBindingStatus =\n unsupported.length > 0 ? \"partial\" : \"complete\";\n\n const binding: EvidenceContractBinding = {\n status,\n source: input.source,\n ...(input.contractId !== undefined ? { contractId: input.contractId } : {}),\n ...(input.contractVersion !== undefined\n ? { contractVersion: input.contractVersion }\n : {}),\n canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n engineVersion: input.engineVersion,\n path: EVIDENCE_RESOLVED_CONTRACT_FILENAME,\n sha256: digest,\n ruleIds,\n ...(unsupported.length > 0 ? { unsupportedRuleIds: unsupported } : {}),\n note:\n input.note ??\n (status === \"partial\"\n ? EVIDENCE_CONTRACT_PARTIAL_NOTE\n : EVIDENCE_CONTRACT_ASSURANCE_NOTE),\n };\n\n const checkBinding: EvidenceCheckContractBinding = {\n contractDigest: digest,\n canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n engineVersion: input.engineVersion,\n evaluatedRuleIds: ruleIds,\n bindingStatus: status,\n ...(input.preset?.name\n ? {\n origin: {\n source: input.source,\n preset: input.preset.name,\n },\n }\n : {\n origin: {\n source: input.source,\n },\n }),\n ...(unsupported.length > 0 ? { unsupportedRuleIds: unsupported } : {}),\n };\n\n return {\n file: {\n path: EVIDENCE_RESOLVED_CONTRACT_FILENAME,\n content: resolvedJson,\n role: \"contract\",\n },\n binding,\n checkBinding,\n resolvedJson,\n };\n}\n\n/**\n * Merge contract-binding fields into a check-results JSON object (additive).\n */\nexport function bindCheckResultsToContract(\n checkResults: Record<string, unknown>,\n checkBinding: EvidenceCheckContractBinding,\n): Record<string, unknown> {\n return {\n ...checkResults,\n contract: {\n ...checkBinding,\n },\n };\n}\n\nexport function serializeCheckResultsJson(value: unknown): string {\n return serializeCanonicalJson(value);\n}\n\n/**\n * Parse the optional `contract` object from check-results.json when present.\n */\nexport function readCheckResultsContractBinding(\n checkResultsJson: string,\n): EvidenceCheckContractBinding | undefined {\n try {\n const parsed = JSON.parse(checkResultsJson) as { contract?: unknown };\n if (parsed.contract === null || typeof parsed.contract !== \"object\" || Array.isArray(parsed.contract)) {\n return undefined;\n }\n return parsed.contract as EvidenceCheckContractBinding;\n } catch {\n return undefined;\n }\n}\n\nexport interface EvidenceContractVerifyIssue {\n code:\n | \"contract_file_missing\"\n | \"contract_hash_mismatch\"\n | \"contract_digest_mismatch\"\n | \"contract_binding_invalid\";\n severity: \"error\" | \"warning\";\n message: string;\n path?: string;\n}\n\n/**\n * Verify digest binding between manifest.contract, contract.resolved.json, and\n * check-results.json. Older Evidence without `manifest.contract` is a no-op.\n */\nexport function verifyEvidenceContractBinding(parts: {\n binding?: EvidenceContractBinding;\n resolvedContractBytes?: string | Uint8Array;\n checkResultsJson?: string;\n}): EvidenceContractVerifyIssue[] {\n const issues: EvidenceContractVerifyIssue[] = [];\n const binding = parts.binding;\n if (binding === undefined) return issues;\n\n if (\n binding.canonicalizationVersion !== EVIDENCE_CONTRACT_CANONICALIZATION_VERSION\n ) {\n issues.push({\n code: \"contract_binding_invalid\",\n severity: \"error\",\n message: `Unsupported contract canonicalizationVersion: ${String(binding.canonicalizationVersion)}`,\n });\n }\n\n if (binding.status === \"unavailable\") {\n if (binding.path !== undefined || binding.sha256 !== undefined) {\n issues.push({\n code: \"contract_binding_invalid\",\n severity: \"error\",\n message: \"unavailable contract binding must not reference a packaged contract file.\",\n });\n }\n return issues;\n }\n\n const expectedPath = binding.path ?? EVIDENCE_RESOLVED_CONTRACT_FILENAME;\n if (parts.resolvedContractBytes === undefined) {\n issues.push({\n code: \"contract_file_missing\",\n severity: \"error\",\n message: `Referenced contract file missing: ${expectedPath}`,\n path: expectedPath,\n });\n return issues;\n }\n\n const actual = sha256Hex(parts.resolvedContractBytes);\n if (binding.sha256 !== undefined && !sha256Equals(binding.sha256, actual)) {\n issues.push({\n code: \"contract_hash_mismatch\",\n severity: \"error\",\n message: `SHA-256 mismatch for ${expectedPath}`,\n path: expectedPath,\n });\n }\n\n if (parts.checkResultsJson !== undefined) {\n const checkBinding = readCheckResultsContractBinding(parts.checkResultsJson);\n if (checkBinding?.contractDigest !== undefined && binding.sha256 !== undefined) {\n if (!sha256Equals(checkBinding.contractDigest, binding.sha256)) {\n issues.push({\n code: \"contract_digest_mismatch\",\n severity: \"error\",\n message:\n \"check-results.json contractDigest does not match evidence.json contract.sha256.\",\n path: \"check-results.json\",\n });\n }\n } else if (binding.status === \"complete\" || binding.status === \"partial\") {\n issues.push({\n code: \"contract_digest_mismatch\",\n severity: \"error\",\n message:\n \"check-results.json is missing contract.contractDigest for a packaged contract binding.\",\n path: \"check-results.json\",\n });\n }\n }\n\n return issues;\n}\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport { escapeHtml, flattenTree } from \"../exporters/helpers.js\";\n\nfunction renderTreeHtml(nodes: InspectNode[], ulClass = \"tree\"): string {\n if (nodes.length === 0) return \"\";\n const parts: string[] = [`<ul class=\"${ulClass}\">`];\n for (const n of nodes) {\n const ev = n.event;\n const status = ev.status ?? \"?\";\n const dur =\n ev.durationMs !== undefined && Number.isFinite(ev.durationMs)\n ? `${ev.durationMs}ms`\n : \"-\";\n const errClass = ev.status === \"error\" ? \" is-error\" : \"\";\n parts.push(`<li class=\"tree-node${errClass}\">`);\n parts.push(\n `<span class=\"nm\">${escapeHtml(ev.name)}</span> <span class=\"meta\">[${escapeHtml(ev.kind)}] ${escapeHtml(status)} (${escapeHtml(dur)})</span>`,\n );\n if (n.children.length > 0) {\n parts.push(renderTreeHtml(n.children, \"tree nested\"));\n }\n parts.push(\"</li>\");\n }\n parts.push(\"</ul>\");\n return parts.join(\"\");\n}\n\n/**\n * Execution-tree HTML fragment for the Evidence Tree view (already escaped).\n */\nexport function buildEvidenceTreeViewHtml(trees: readonly InspectRunTree[]): string {\n if (trees.length === 0) {\n return `<p class=\"muted\">No execution trees available.</p>`;\n }\n const parts: string[] = [];\n for (const tree of trees) {\n parts.push(`<article class=\"run-block\">`);\n parts.push(`<h3><code>${escapeHtml(tree.runId)}</code></h3>`);\n if (tree.name) {\n parts.push(`<p class=\"muted\">Name: ${escapeHtml(tree.name)}</p>`);\n }\n parts.push(\n `<p>Status: <strong>${escapeHtml(String(tree.status ?? \"unknown\"))}</strong>${\n tree.durationMs !== undefined ? ` · ${escapeHtml(String(tree.durationMs))}ms` : \"\"\n }</p>`,\n );\n parts.push(\n tree.children.length > 0\n ? renderTreeHtml(tree.children)\n : `<p class=\"muted\">No steps recorded.</p>`,\n );\n parts.push(`</article>`);\n }\n return parts.join(\"\\n\");\n}\n\nfunction timelineRows(tree: InspectRunTree): {\n name: string;\n kind: string;\n status: string;\n offsetMs: number;\n durationMs: number;\n isError: boolean;\n}[] {\n const flat = flattenTree(tree);\n const origin =\n tree.startedAt ??\n flat.reduce<number | undefined>((min, n) => {\n const t = n.event.timestamp;\n if (!Number.isFinite(t)) return min;\n return min === undefined ? t : Math.min(min, t);\n }, undefined) ??\n 0;\n return flat\n .filter((n) => n.event.kind !== \"RUN\")\n .map((n) => {\n const started = Number.isFinite(n.event.timestamp) ? n.event.timestamp : origin;\n const durationMs =\n n.event.durationMs !== undefined && Number.isFinite(n.event.durationMs)\n ? Math.max(0, n.event.durationMs)\n : 0;\n return {\n name: n.event.name,\n kind: n.event.kind,\n status: n.event.status ?? \"?\",\n offsetMs: Math.max(0, started - origin),\n durationMs,\n isError: n.event.status === \"error\",\n };\n })\n .sort((a, b) => a.offsetMs - b.offsetMs || a.name.localeCompare(b.name));\n}\n\n/**\n * Timeline / waterfall HTML fragment (escaped; no external assets).\n */\nexport function buildEvidenceTimelineViewHtml(trees: readonly InspectRunTree[]): string {\n if (trees.length === 0) {\n return `<p class=\"muted\">No timeline data available.</p>`;\n }\n const parts: string[] = [];\n for (const tree of trees) {\n const rows = timelineRows(tree);\n const maxEnd = rows.reduce(\n (max, row) => Math.max(max, row.offsetMs + Math.max(row.durationMs, 1)),\n 1,\n );\n parts.push(`<article class=\"run-block\">`);\n parts.push(`<h3><code>${escapeHtml(tree.runId)}</code></h3>`);\n if (rows.length === 0) {\n parts.push(`<p class=\"muted\">No step timings recorded.</p>`);\n } else {\n parts.push(`<div class=\"waterfall\" role=\"list\">`);\n for (const row of rows) {\n const left = (row.offsetMs / maxEnd) * 100;\n const width = Math.max(0.8, (Math.max(row.durationMs, 1) / maxEnd) * 100);\n const err = row.isError ? \" is-error\" : \"\";\n parts.push(\n `<div class=\"wf-row${err}\" role=\"listitem\"><div class=\"wf-label\"><span class=\"nm\">${escapeHtml(row.name)}</span> <span class=\"meta\">[${escapeHtml(row.kind)}] ${escapeHtml(row.status)} · ${escapeHtml(String(row.durationMs))}ms @+${escapeHtml(String(row.offsetMs))}ms</span></div><div class=\"wf-track\"><span class=\"wf-bar\" style=\"left:${left.toFixed(2)}%;width:${width.toFixed(2)}%\"></span></div></div>`,\n );\n }\n parts.push(`</div>`);\n }\n parts.push(`</article>`);\n }\n return parts.join(\"\\n\");\n}\n\nfunction findNodeByEventId(nodes: InspectNode[], eventId: string): InspectNode | undefined {\n for (const node of nodes) {\n if (node.event.eventId === eventId) return node;\n const child = findNodeByEventId(node.children, eventId);\n if (child) return child;\n }\n return undefined;\n}\n\nfunction buildAncestorChain(tree: InspectRunTree, failure: InspectNode): InspectNode[] {\n const chain: InspectNode[] = [failure];\n let parentId = failure.event.parentId;\n const guard = new Set<string>([failure.event.eventId]);\n while (parentId && !guard.has(parentId)) {\n guard.add(parentId);\n const parent = findNodeByEventId(tree.children, parentId);\n if (!parent) break;\n chain.unshift(parent);\n parentId = parent.event.parentId;\n }\n return chain;\n}\n\n/**\n * First causal failure view: earliest error by timestamp, with parent chain.\n * Does not invent relationships; if no parentId chain exists, shows the error alone.\n */\nexport function buildEvidenceCausalFailureViewHtml(\n trees: readonly InspectRunTree[],\n): string {\n if (trees.length === 0) {\n return `<p class=\"muted\">No runs available for causal analysis.</p>`;\n }\n const parts: string[] = [];\n for (const tree of trees) {\n parts.push(`<article class=\"run-block\">`);\n parts.push(`<h3><code>${escapeHtml(tree.runId)}</code></h3>`);\n const errors = flattenTree(tree)\n .filter((n) => n.event.status === \"error\" || n.event.kind === \"ERROR\")\n .sort((a, b) => a.event.timestamp - b.event.timestamp);\n if (errors.length === 0) {\n parts.push(\n `<p class=\"muted\">No error-status events found. Run status: <strong>${escapeHtml(String(tree.status ?? \"unknown\"))}</strong>.</p>`,\n );\n parts.push(`</article>`);\n continue;\n }\n const first = errors[0]!;\n const chain = buildAncestorChain(tree, first);\n parts.push(`<p>First error by timestamp:</p>`);\n parts.push(`<ol class=\"causal-chain\">`);\n for (const node of chain) {\n const isTip = node.event.eventId === first.event.eventId;\n const msg =\n typeof node.event.attributes?.message === \"string\"\n ? node.event.attributes.message\n : typeof node.event.attributes?.error === \"string\"\n ? node.event.attributes.error\n : undefined;\n parts.push(\n `<li class=\"${isTip ? \"causal-tip\" : \"\"}\"><span class=\"nm\">${escapeHtml(node.event.name)}</span> <span class=\"meta\">[${escapeHtml(node.event.kind)}] ${escapeHtml(node.event.status ?? \"?\")} · ${escapeHtml(node.event.eventId)}</span>${\n msg ? `<div class=\"causal-msg\">${escapeHtml(msg.slice(0, 400))}</div>` : \"\"\n }</li>`,\n );\n }\n parts.push(`</ol>`);\n if (errors.length > 1) {\n parts.push(\n `<p class=\"muted\">${escapeHtml(String(errors.length - 1))} additional error event(s) not shown in the primary chain.</p>`,\n );\n }\n parts.push(`</article>`);\n }\n return parts.join(\"\\n\");\n}\n\n/** Extra CSS for tree / timeline / causal panels (inlined into evidence shell). */\nexport const EVIDENCE_VIEW_CSS = `\nul.tree{list-style:none;padding-left:1rem;margin:.5rem 0}\nul.tree.nested{padding-left:1.25rem;border-left:1px solid var(--line);margin:.25rem 0}\n.tree-node.is-error .nm,.wf-row.is-error .nm,.causal-tip .nm{color:var(--unsafe)}\n.waterfall{display:flex;flex-direction:column;gap:.45rem;max-width:52rem}\n.wf-row{display:grid;grid-template-columns:minmax(10rem,18rem) 1fr;gap:.6rem;align-items:center}\n.wf-track{position:relative;height:.7rem;background:#e8e8e4;border-radius:.25rem;overflow:hidden}\n.wf-bar{position:absolute;top:0;bottom:0;background:var(--accent);border-radius:.25rem}\n.wf-row.is-error .wf-bar{background:var(--unsafe)}\n.causal-chain{max-width:44rem}\n.causal-msg{margin:.25rem 0 0;color:var(--muted);font-size:.92rem}\n.run-block{margin:0 0 1.25rem;padding-bottom:1rem;border-bottom:1px solid var(--line)}\n.run-block:last-child{border-bottom:0}\n@media (max-width:720px){\n .wf-row{grid-template-columns:1fr}\n}\n`.trim();\n","import { escapeHtml } from \"../exporters/helpers.js\";\n\nimport { EVIDENCE_VIEW_CSS } from \"./views.js\";\nimport type { EvidenceManifest, EvidenceSafeStatus } from \"./types.js\";\n\nexport const EVIDENCE_HTML_FILENAME = \"evidence.html\";\n\nconst EVIDENCE_HTML_NOTE =\n \"Generated locally by AgentInspect. Share-checked evidence for review — not a compliance or security certification.\";\n\n/** View ids reserved for later 6.10 chunks; shell renders stubs except summary. */\nexport const EVIDENCE_VIEW_IDS = [\n \"summary\",\n \"tree\",\n \"timeline\",\n \"causal\",\n \"tools-llm\",\n \"outcomes\",\n \"contracts\",\n \"circuit\",\n \"diff\",\n \"safety\",\n \"provenance\",\n] as const;\n\nexport type EvidenceViewId = (typeof EVIDENCE_VIEW_IDS)[number];\n\nexport interface EvidenceHtmlShellInput {\n title?: string;\n runIds: readonly string[];\n assessmentStatus: EvidenceSafeStatus;\n sourceStatus?: EvidenceSafeStatus;\n redactionProfile: string;\n verificationPolicy: string;\n generatorName: string;\n generatorVersion: string;\n createdAt?: string;\n evidenceFormatVersion?: string;\n /** Optional short summary markdown already safe for display (will be escaped). */\n summaryText?: string;\n /** Bounded check counts (no finding payloads / prompts). */\n checkSummary?: {\n aggregateStatus: EvidenceSafeStatus;\n runs: readonly {\n runId: string;\n status: EvidenceSafeStatus;\n sourceStatus?: EvidenceSafeStatus;\n errors: number;\n warnings: number;\n findings: number;\n }[];\n };\n /** Max chars for embedded JSON payload (default 64 KiB). */\n maxEmbeddedJsonChars?: number;\n /**\n * Pre-escaped HTML bodies for views. Missing ids keep the stub panel.\n * Callers must pass only trusted, escaped fragments (use evidence view builders).\n */\n viewBodies?: Partial<Record<EvidenceViewId, string>>;\n}\n\nfunction statusClass(status: string): string {\n if (status === \"SAFE\") return \"st-safe\";\n if (status === \"SAFE WITH WARNINGS\") return \"st-warn\";\n if (status === \"UNSAFE\") return \"st-unsafe\";\n return \"st-unknown\";\n}\n\nfunction viewLabel(id: EvidenceViewId): string {\n switch (id) {\n case \"summary\":\n return \"Summary\";\n case \"tree\":\n return \"Tree\";\n case \"timeline\":\n return \"Timeline\";\n case \"causal\":\n return \"Causal failure\";\n case \"tools-llm\":\n return \"Tools / LLM\";\n case \"outcomes\":\n return \"Outcomes\";\n case \"contracts\":\n return \"Contracts / checks\";\n case \"circuit\":\n return \"Circuit / guardrails\";\n case \"diff\":\n return \"Diff\";\n case \"safety\":\n return \"Safety / redaction\";\n case \"provenance\":\n return \"Provenance\";\n default: {\n const _exhaustive: never = id;\n return _exhaustive;\n }\n }\n}\n\n/**\n * Encode JSON for embedding in HTML without breaking out of a script/pre context.\n * Escapes `<` so `</script>` cannot appear in payload text.\n */\nexport function encodeEmbeddedEvidenceJson(value: unknown): string {\n return JSON.stringify(value).replace(/</g, \"\\\\u003c\").replace(/>/g, \"\\\\u003e\");\n}\n\nfunction buildEmbeddedPayload(input: EvidenceHtmlShellInput): Record<string, unknown> {\n return {\n evidenceFormatVersion: input.evidenceFormatVersion ?? \"1.0\",\n generator: {\n name: input.generatorName,\n version: input.generatorVersion,\n },\n createdAt: input.createdAt,\n runIds: [...input.runIds],\n assessment: {\n status: input.assessmentStatus,\n ...(input.sourceStatus !== undefined ? { sourceStatus: input.sourceStatus } : {}),\n },\n policy: {\n redactionProfile: input.redactionProfile,\n verificationPolicy: input.verificationPolicy,\n },\n checkSummary: input.checkSummary,\n };\n}\n\n/**\n * Build a self-contained offline `evidence.html` shell (no external assets/network).\n * View panels beyond Summary are stubs filled in later 6.10 chunks.\n */\nexport function buildEvidenceHtmlShell(input: EvidenceHtmlShellInput): string {\n if (input.runIds.length === 0) {\n throw new Error(\"Evidence HTML shell requires at least one run id.\");\n }\n\n const maxChars = input.maxEmbeddedJsonChars ?? 64 * 1024;\n let embedded = encodeEmbeddedEvidenceJson(buildEmbeddedPayload(input));\n if (embedded.length > maxChars) {\n embedded = encodeEmbeddedEvidenceJson({\n truncated: true,\n evidenceFormatVersion: input.evidenceFormatVersion ?? \"1.0\",\n runIds: [...input.runIds],\n assessment: { status: input.assessmentStatus },\n note: \"Embedded payload truncated to bound; open evidence.json / trace files for full detail.\",\n });\n }\n\n const title = escapeHtml(input.title ?? \"AgentInspect evidence\");\n const runList = input.runIds\n .map((id) => `<li><code>${escapeHtml(id)}</code></li>`)\n .join(\"\");\n const summaryBody =\n input.summaryText !== undefined && input.summaryText.trim() !== \"\"\n ? `<pre class=\"summary-md\">${escapeHtml(input.summaryText)}</pre>`\n : `<p class=\"muted\">Open <code>summary.md</code> in this bundle for the full text summary.</p>`;\n\n const checkRows =\n input.checkSummary?.runs\n .map(\n (run) =>\n `<tr><td><code>${escapeHtml(run.runId)}</code></td><td class=\"${statusClass(run.status)}\">${escapeHtml(run.status)}</td><td>${run.errors}</td><td>${run.warnings}</td><td>${run.findings}</td></tr>`,\n )\n .join(\"\") ?? \"\";\n\n const nav = EVIDENCE_VIEW_IDS.map(\n (id) =>\n `<a class=\"nav-link\" href=\"#view-${id}\" data-view=\"${id}\">${escapeHtml(viewLabel(id))}</a>`,\n ).join(\"\\n\");\n\n const stubPanels = EVIDENCE_VIEW_IDS.filter((id) => id !== \"summary\")\n .map((id) => {\n const body = input.viewBodies?.[id];\n if (body !== undefined && body.trim() !== \"\") {\n return ` <section id=\"view-${id}\" class=\"panel\" hidden>\n <h2>${escapeHtml(viewLabel(id))}</h2>\n ${body}\n </section>`;\n }\n return ` <section id=\"view-${id}\" class=\"panel\" hidden>\n <h2>${escapeHtml(viewLabel(id))}</h2>\n <p class=\"muted\">This view will be filled in a later AgentInspect 6.10 release. The shell is offline-ready.</p>\n </section>`;\n })\n .join(\"\\n\");\n\n return `<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'none'; style-src 'unsafe-inline'; script-src 'unsafe-inline'; img-src data:; base-uri 'none'; form-action 'none'; frame-ancestors 'none'\"/>\n<meta name=\"referrer\" content=\"no-referrer\"/>\n<title>${title}</title>\n<style>\n:root{--bg:#f7f7f5;--fg:#1a1a1a;--muted:#5c5c5c;--line:#d8d8d4;--accent:#0b5fff;--safe:#0a7a3e;--warn:#9a6700;--unsafe:#b42318;--unknown:#5c5c5c}\n*{box-sizing:border-box}\nbody{margin:0;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;background:var(--bg);color:var(--fg);line-height:1.5}\na{color:var(--accent)}\nheader{padding:1.25rem 1.5rem;border-bottom:1px solid var(--line);background:#fff}\nheader h1{margin:0 0 .35rem;font-size:1.35rem}\n.note{margin:0;color:var(--muted);font-size:.92rem;max-width:52rem}\n.layout{display:grid;grid-template-columns:14rem 1fr;min-height:70vh}\nnav{padding:1rem;border-right:1px solid var(--line);background:#fff}\nnav .nav-link{display:block;padding:.4rem .55rem;margin:0 0 .2rem;border-radius:.35rem;text-decoration:none;color:inherit}\nnav .nav-link:hover,nav .nav-link:focus{background:#eef3ff;outline:2px solid var(--accent);outline-offset:1px}\nmain{padding:1.25rem 1.5rem}\n.panel[hidden]{display:none}\n.badge{display:inline-block;padding:.15rem .55rem;border-radius:.3rem;font-size:.85rem;font-weight:600}\n.st-safe{color:var(--safe)}.st-warn{color:var(--warn)}.st-unsafe{color:var(--unsafe)}.st-unknown{color:var(--unknown)}\ntable{border-collapse:collapse;width:100%;max-width:48rem;background:#fff}\nth,td{border:1px solid var(--line);padding:.4rem .55rem;text-align:left;vertical-align:top}\nth{background:#f0f0ec}\n.summary-md,pre.data{white-space:pre-wrap;word-break:break-word;background:#fff;border:1px solid var(--line);padding:.75rem;max-width:52rem}\n.muted{color:var(--muted)}\nul.runs{margin:.4rem 0 1rem;padding-left:1.2rem}\n@media print{\n nav{display:none}\n .layout{display:block}\n .panel[hidden]{display:block!important;page-break-before:always}\n header{border:0}\n}\n@media (max-width:720px){\n .layout{grid-template-columns:1fr}\n nav{border-right:0;border-bottom:1px solid var(--line);display:flex;flex-wrap:wrap;gap:.25rem}\n}\n${EVIDENCE_VIEW_CSS}\n</style>\n</head>\n<body>\n<header>\n <h1>${title}</h1>\n <p class=\"note\">${escapeHtml(EVIDENCE_HTML_NOTE)}</p>\n</header>\n<div class=\"layout\">\n<nav aria-label=\"Evidence views\">\n${nav}\n</nav>\n<main id=\"main\">\n <section id=\"view-summary\" class=\"panel\" tabindex=\"-1\">\n <h2>Summary</h2>\n <p>Artifact status: <span class=\"badge ${statusClass(input.assessmentStatus)}\">${escapeHtml(input.assessmentStatus)}</span>\n ${\n input.sourceStatus !== undefined\n ? ` · Source status: <span class=\"badge ${statusClass(input.sourceStatus)}\">${escapeHtml(input.sourceStatus)}</span>`\n : \"\"\n }</p>\n <p>Profile: <code>${escapeHtml(input.redactionProfile)}</code> · Verification: <code>${escapeHtml(input.verificationPolicy)}</code></p>\n <p>Generator: <code>${escapeHtml(input.generatorName)}@${escapeHtml(input.generatorVersion)}</code>\n ${input.createdAt ? ` · Created: <code>${escapeHtml(input.createdAt)}</code>` : \"\"}</p>\n <h3>Runs</h3>\n <ul class=\"runs\">${runList}</ul>\n ${\n checkRows\n ? `<h3>Check summary</h3>\n <table>\n <thead><tr><th>runId</th><th>artifact</th><th>errors</th><th>warnings</th><th>findings</th></tr></thead>\n <tbody>${checkRows}</tbody>\n </table>`\n : \"\"\n }\n <h3>Text summary</h3>\n ${summaryBody}\n </section>\n${stubPanels}\n</main>\n</div>\n<script type=\"application/json\" id=\"ai-evidence-data\">${embedded}</script>\n<script>\n(function(){\n var links=document.querySelectorAll(\"nav .nav-link\");\n var panels=document.querySelectorAll(\"main .panel\");\n function show(id){\n for(var i=0;i<panels.length;i++){\n var p=panels[i];\n var on=p.id===\"view-\"+id;\n if(on){p.removeAttribute(\"hidden\");}else{p.setAttribute(\"hidden\",\"\");}\n }\n for(var j=0;j<links.length;j++){\n var a=links[j];\n if(a.getAttribute(\"data-view\")===id){a.setAttribute(\"aria-current\",\"page\");}\n else{a.removeAttribute(\"aria-current\");}\n }\n }\n for(var k=0;k<links.length;k++){\n links[k].addEventListener(\"click\",function(ev){\n var id=ev.currentTarget.getAttribute(\"data-view\");\n if(!id)return;\n ev.preventDefault();\n if(history.replaceState){history.replaceState(null,\"\",\"#view-\"+id);}\n show(id);\n var panel=document.getElementById(\"view-\"+id);\n if(panel)panel.focus();\n });\n }\n var hash=(location.hash||\"\").replace(/^#view-/,\"\");\n var initial=\"summary\";\n for(var n=0;n<links.length;n++){\n if(links[n].getAttribute(\"data-view\")===hash){initial=hash;break;}\n }\n show(initial);\n})();\n</script>\n</body>\n</html>\n`;\n}\n\n/**\n * Convenience: build shell fields from an EvidenceManifest (views still stubbed).\n */\nexport function buildEvidenceHtmlShellFromManifest(\n manifest: EvidenceManifest,\n extras?: Partial<\n Pick<EvidenceHtmlShellInput, \"summaryText\" | \"checkSummary\" | \"title\" | \"viewBodies\">\n >,\n): string {\n return buildEvidenceHtmlShell({\n title: extras?.title,\n runIds: manifest.source.runIds,\n assessmentStatus: manifest.assessment.status,\n sourceStatus: manifest.assessment.sourceStatus,\n redactionProfile: manifest.policy.redactionProfile,\n verificationPolicy: manifest.policy.verificationPolicy,\n generatorName: manifest.generator.name,\n generatorVersion: manifest.generator.version,\n createdAt: manifest.createdAt,\n evidenceFormatVersion: manifest.evidenceFormatVersion,\n summaryText: extras?.summaryText,\n checkSummary: extras?.checkSummary,\n viewBodies: extras?.viewBodies,\n });\n}\n","import { escapeHtml } from \"../exporters/helpers.js\";\nimport {\n extractOutcomesFromPersistedEvents,\n renderObservedOutcomesHtml,\n summarizeObservedOutcomes,\n} from \"../outcomes/index.js\";\nimport { persistedInspectEventsToTraceEvents } from \"../persisted/to-trace-event.js\";\nimport { diffTraceEvents, renderRunDiff } from \"../diff/index.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\n\nexport interface EvidenceCheckFindingSummary {\n runId: string;\n ruleId: string;\n severity: string;\n message: string;\n category?: string;\n detector?: string;\n confidence?: string;\n action?: string;\n}\n\nexport interface EvidenceContractsViewInput {\n aggregateStatus: string;\n runs: readonly {\n runId: string;\n status: string;\n sourceStatus?: string;\n errors: number;\n warnings: number;\n findings: number;\n }[];\n findingSummaries?: readonly EvidenceCheckFindingSummary[];\n}\n\nfunction boundMessage(message: string, max = 200): string {\n const trimmed = message.trim();\n if (trimmed.length <= max) return trimmed;\n return `${trimmed.slice(0, max)}…`;\n}\n\n/**\n * Contracts / checks HTML: aggregate status + bounded finding taxonomy (no evidence payloads).\n */\nexport function buildEvidenceContractsViewHtml(input: EvidenceContractsViewInput): string {\n const rows = input.runs\n .map(\n (run) =>\n `<tr><td><code>${escapeHtml(run.runId)}</code></td><td>${escapeHtml(run.status)}</td><td>${escapeHtml(run.sourceStatus ?? \"—\")}</td><td>${run.errors}</td><td>${run.warnings}</td><td>${run.findings}</td></tr>`,\n )\n .join(\"\");\n\n const findings = input.findingSummaries ?? [];\n const findingRows =\n findings.length === 0\n ? `<p class=\"muted\">No structured check findings recorded for the redacted artifact.</p>`\n : `<table>\n <thead><tr><th>runId</th><th>severity</th><th>rule</th><th>category</th><th>detector</th><th>message</th></tr></thead>\n <tbody>${findings\n .map(\n (f) =>\n `<tr><td><code>${escapeHtml(f.runId)}</code></td><td>${escapeHtml(f.severity)}</td><td><code>${escapeHtml(f.ruleId)}</code></td><td>${escapeHtml(f.category ?? \"—\")}</td><td>${escapeHtml(f.detector ?? \"—\")}</td><td>${escapeHtml(boundMessage(f.message))}</td></tr>`,\n )\n .join(\"\")}</tbody>\n</table>`;\n\n return `<p>Aggregate artifact status: <strong>${escapeHtml(input.aggregateStatus)}</strong></p>\n<table>\n <thead><tr><th>runId</th><th>artifact</th><th>source</th><th>errors</th><th>warnings</th><th>findings</th></tr></thead>\n <tbody>${rows}</tbody>\n</table>\n<h3>Finding summaries</h3>\n${findingRows}\n<p class=\"muted\">TraceContract / check details are best-effort local results — not a compliance certification.</p>`;\n}\n\n/**\n * Observed outcomes view from persisted inspect events (redacted artifact).\n */\nexport function buildEvidenceOutcomesViewHtml(\n runs: readonly { runId: string; events: readonly PersistedInspectEvent[] }[],\n): string {\n if (runs.length === 0) {\n return `<p class=\"muted\">No runs available for outcome extraction.</p>`;\n }\n const parts: string[] = [];\n for (const run of runs) {\n const forRun = run.events.filter((event) => event.runId === run.runId);\n const summary = summarizeObservedOutcomes(extractOutcomesFromPersistedEvents(forRun));\n parts.push(`<article class=\"run-block\">`);\n parts.push(`<h3><code>${escapeHtml(run.runId)}</code></h3>`);\n parts.push(renderObservedOutcomesHtml(summary));\n parts.push(`</article>`);\n }\n return parts.join(\"\\n\");\n}\n\n/**\n * Diff view: when two event sets are supplied, render a local run diff.\n * Otherwise show an empty-state explaining baseline/candidate is optional.\n */\nexport function buildEvidenceDiffViewHtml(parts?: {\n leftRunId: string;\n rightRunId: string;\n leftEvents: readonly PersistedInspectEvent[];\n rightEvents: readonly PersistedInspectEvent[];\n}): string {\n if (\n parts === undefined ||\n parts.leftEvents.length === 0 ||\n parts.rightEvents.length === 0\n ) {\n return `<p class=\"muted\">No baseline/candidate pair was supplied for this evidence bundle. Attach two runs (or a reporter baseline) to populate this view.</p>`;\n }\n\n try {\n const left = persistedInspectEventsToTraceEvents(\n parts.leftEvents.filter((e) => e.runId === parts.leftRunId),\n );\n const right = persistedInspectEventsToTraceEvents(\n parts.rightEvents.filter((e) => e.runId === parts.rightRunId),\n );\n if (left.length === 0 || right.length === 0) {\n return `<p class=\"muted\">Could not normalize both runs for diff (missing v0.1-compatible events).</p>`;\n }\n const result = diffTraceEvents(left, right);\n const text = renderRunDiff(result, { color: false, verbose: false });\n return `<p>Comparing <code>${escapeHtml(parts.leftRunId)}</code> → <code>${escapeHtml(parts.rightRunId)}</code></p>\n<pre class=\"summary-md\">${escapeHtml(text)}</pre>`;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return `<p class=\"muted\">Diff unavailable: ${escapeHtml(message)}</p>`;\n }\n}\n","import { escapeHtml, flattenTree } from \"../exporters/helpers.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { EvidenceCheckFindingSummary } from \"./views-contract.js\";\nimport type { EvidenceSafeStatus, EvidenceSourceHash } from \"./types.js\";\n\nexport interface EvidenceSafetyViewInput {\n artifactStatus: EvidenceSafeStatus | string;\n sourceStatus?: EvidenceSafeStatus | string;\n redactionProfile: string;\n verificationPolicy: string;\n redaction?: {\n totalFindings: number;\n runs: readonly { runId: string; findings: number; detectors: string[] }[];\n };\n findingSummaries?: readonly EvidenceCheckFindingSummary[];\n}\n\nexport interface EvidenceProvenanceViewInput {\n generatorName: string;\n generatorVersion: string;\n evidenceFormatVersion: string;\n createdAt?: string;\n runIds: readonly string[];\n traceSchemaVersions: readonly string[];\n sourceHashes: readonly EvidenceSourceHash[];\n packagedFiles: readonly { path: string; role?: string }[];\n note?: string;\n}\n\n/**\n * Safety / redaction view: artifact vs source status + detector summary (no raw secrets).\n */\nexport function buildEvidenceSafetyViewHtml(input: EvidenceSafetyViewInput): string {\n const findingRows =\n (input.findingSummaries ?? []).length === 0\n ? `<p class=\"muted\">No safety findings on the redacted artifact.</p>`\n : `<table>\n <thead><tr><th>runId</th><th>severity</th><th>category</th><th>detector</th><th>action</th><th>message</th></tr></thead>\n <tbody>${(input.findingSummaries ?? [])\n .map((f) => {\n const msg =\n f.message.length > 160 ? `${f.message.slice(0, 160)}…` : f.message;\n return `<tr><td><code>${escapeHtml(f.runId)}</code></td><td>${escapeHtml(f.severity)}</td><td>${escapeHtml(f.category ?? \"—\")}</td><td>${escapeHtml(f.detector ?? \"—\")}</td><td>${escapeHtml(f.action ?? \"—\")}</td><td>${escapeHtml(msg)}</td></tr>`;\n })\n .join(\"\")}</tbody>\n</table>`;\n\n const redactionBlock =\n input.redaction === undefined\n ? `<p class=\"muted\">No redaction report attached.</p>`\n : `<p>Total redaction findings: <strong>${input.redaction.totalFindings}</strong></p>\n<ul>${input.redaction.runs\n .map(\n (run) =>\n `<li><code>${escapeHtml(run.runId)}</code>: ${run.findings} finding(s); detectors: ${escapeHtml(run.detectors.join(\", \") || \"none\")}</li>`,\n )\n .join(\"\")}</ul>`;\n\n return `<p>Artifact status: <strong>${escapeHtml(String(input.artifactStatus))}</strong>\n ${\n input.sourceStatus !== undefined\n ? ` · Source status: <strong>${escapeHtml(String(input.sourceStatus))}</strong>`\n : \"\"\n }</p>\n<p>Redaction profile: <code>${escapeHtml(input.redactionProfile)}</code> · Verification: <code>${escapeHtml(input.verificationPolicy)}</code></p>\n<h3>Redaction</h3>\n${redactionBlock}\n<h3>Safety findings (artifact)</h3>\n${findingRows}\n<p class=\"muted\">Best-effort local verification only — not a compliance certification. Gate sharing on artifact status.</p>`;\n}\n\n/**\n * Provenance / mapping view: generator, schema versions, source hashes, packaged roles.\n */\nexport function buildEvidenceProvenanceViewHtml(input: EvidenceProvenanceViewInput): string {\n const hashes =\n input.sourceHashes.length === 0\n ? `<p class=\"muted\">No source hashes recorded.</p>`\n : `<table>\n <thead><tr><th>runId</th><th>algorithm</th><th>hash</th></tr></thead>\n <tbody>${input.sourceHashes\n .map(\n (h) =>\n `<tr><td><code>${escapeHtml(h.runId)}</code></td><td>${escapeHtml(h.algorithm)}</td><td><code>${escapeHtml(h.hash)}</code></td></tr>`,\n )\n .join(\"\")}</tbody>\n</table>`;\n\n const files =\n input.packagedFiles.length === 0\n ? `<p class=\"muted\">No packaged files listed.</p>`\n : `<ul>${input.packagedFiles\n .map(\n (f) =>\n `<li><code>${escapeHtml(f.path)}</code>${f.role ? ` <span class=\"meta\">(${escapeHtml(f.role)})</span>` : \"\"}</li>`,\n )\n .join(\"\")}</ul>`;\n\n return `<p>Generator: <code>${escapeHtml(input.generatorName)}@${escapeHtml(input.generatorVersion)}</code>\n · Evidence format: <code>${escapeHtml(input.evidenceFormatVersion)}</code>\n ${input.createdAt ? ` · Created: <code>${escapeHtml(input.createdAt)}</code>` : \"\"}</p>\n<p>Runs: ${input.runIds.map((id) => `<code>${escapeHtml(id)}</code>`).join(\", \")}</p>\n<p>Trace schema versions: ${\n input.traceSchemaVersions.length > 0\n ? input.traceSchemaVersions.map((v) => `<code>${escapeHtml(v)}</code>`).join(\", \")\n : \"<span class=\\\"muted\\\">unknown</span>\"\n }</p>\n<h3>Source hashes (pre-redaction input)</h3>\n${hashes}\n<h3>Packaged files</h3>\n${files}\n<p class=\"muted\">${escapeHtml(input.note ?? \"Reader/mapping losses are reported elsewhere when present; relationships are never invented without confidence policy.\")}</p>`;\n}\n\n/**\n * Tools / LLM metadata view: names, kinds, statuses, durations — no prompts/outputs.\n */\nexport function buildEvidenceToolsLlmViewHtml(trees: readonly InspectRunTree[]): string {\n if (trees.length === 0) {\n return `<p class=\"muted\">No runs available for tool/LLM metadata.</p>`;\n }\n const parts: string[] = [];\n for (const tree of trees) {\n const nodes = flattenTree(tree).filter(\n (n) => n.event.kind === \"TOOL\" || n.event.kind === \"LLM\" || n.event.kind === \"AGENT\",\n );\n parts.push(`<article class=\"run-block\">`);\n parts.push(`<h3><code>${escapeHtml(tree.runId)}</code></h3>`);\n if (nodes.length === 0) {\n parts.push(`<p class=\"muted\">No TOOL/LLM/AGENT events in this run.</p>`);\n } else {\n parts.push(`<table>\n <thead><tr><th>name</th><th>kind</th><th>status</th><th>durationMs</th></tr></thead>\n <tbody>${nodes\n .map((n) => {\n const dur =\n n.event.durationMs !== undefined && Number.isFinite(n.event.durationMs)\n ? String(n.event.durationMs)\n : \"—\";\n return `<tr><td>${escapeHtml(n.event.name)}</td><td>${escapeHtml(n.event.kind)}</td><td>${escapeHtml(n.event.status ?? \"?\")}</td><td>${escapeHtml(dur)}</td></tr>`;\n })\n .join(\"\")}</tbody>\n</table>`);\n }\n parts.push(`</article>`);\n }\n return parts.join(\"\\n\");\n}\n\n/**\n * Circuit / guardrails placeholder filled with conservative empty state unless findings supplied.\n */\nexport function buildEvidenceCircuitViewHtml(parts?: {\n findings?: readonly { runId: string; name: string; status: string; detail?: string }[];\n}): string {\n const findings = parts?.findings ?? [];\n if (findings.length === 0) {\n return `<p class=\"muted\">No circuit or guardrail findings were attached to this evidence bundle.</p>`;\n }\n return `<table>\n <thead><tr><th>runId</th><th>name</th><th>status</th><th>detail</th></tr></thead>\n <tbody>${findings\n .map(\n (f) =>\n `<tr><td><code>${escapeHtml(f.runId)}</code></td><td>${escapeHtml(f.name)}</td><td>${escapeHtml(f.status)}</td><td>${escapeHtml(f.detail ?? \"—\")}</td></tr>`,\n )\n .join(\"\")}</tbody>\n</table>`;\n}\n","import { assertEvidenceRelativePath } from \"./paths.js\";\n\nexport interface ZipEntry {\n path: string;\n content: string | Uint8Array;\n}\n\nconst CRC_TABLE = (() => {\n const table = new Uint32Array(256);\n for (let n = 0; n < 256; n += 1) {\n let c = n;\n for (let k = 0; k < 8; k += 1) {\n c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n }\n table[n] = c >>> 0;\n }\n return table;\n})();\n\nfunction crc32(data: Uint8Array): number {\n let crc = 0xffffffff;\n for (let i = 0; i < data.length; i += 1) {\n crc = CRC_TABLE[(crc ^ data[i]!) & 0xff]! ^ (crc >>> 8);\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n\nfunction toBytes(content: string | Uint8Array): Uint8Array {\n return typeof content === \"string\" ? Buffer.from(content, \"utf8\") : content;\n}\n\nfunction u16(value: number): Buffer {\n const buf = Buffer.alloc(2);\n buf.writeUInt16LE(value >>> 0, 0);\n return buf;\n}\n\nfunction u32(value: number): Buffer {\n const buf = Buffer.alloc(4);\n buf.writeUInt32LE(value >>> 0, 0);\n return buf;\n}\n\n/**\n * Build a minimal ZIP archive (STORE method) with traversal-safe relative paths.\n * No external dependencies — suitable for Evidence `--format zip`.\n */\nexport function buildZipArchive(entries: readonly ZipEntry[]): Buffer {\n if (entries.length === 0) {\n throw new Error(\"ZIP archive requires at least one entry.\");\n }\n\n const locals: Buffer[] = [];\n const centrals: Buffer[] = [];\n let offset = 0;\n\n const seen = new Set<string>();\n for (const entry of entries) {\n const name = assertEvidenceRelativePath(entry.path);\n if (seen.has(name)) {\n throw new Error(`Duplicate ZIP entry path: ${name}`);\n }\n seen.add(name);\n\n const nameBytes = Buffer.from(name, \"utf8\");\n const data = toBytes(entry.content);\n const checksum = crc32(data);\n const size = data.byteLength;\n\n const local = Buffer.concat([\n u32(0x04034b50),\n u16(20), // version needed\n u16(0), // flags\n u16(0), // method STORE\n u16(0), // time\n u16(0), // date\n u32(checksum),\n u32(size),\n u32(size),\n u16(nameBytes.length),\n u16(0), // extra length\n nameBytes,\n Buffer.from(data),\n ]);\n\n const central = Buffer.concat([\n u32(0x02014b50),\n u16(20), // version made by\n u16(20), // version needed\n u16(0),\n u16(0),\n u16(0),\n u16(0),\n u32(checksum),\n u32(size),\n u32(size),\n u16(nameBytes.length),\n u16(0),\n u16(0),\n u16(0),\n u16(0),\n u32(0),\n u32(offset),\n nameBytes,\n ]);\n\n locals.push(local);\n centrals.push(central);\n offset += local.length;\n }\n\n const centralDir = Buffer.concat(centrals);\n const end = Buffer.concat([\n u32(0x06054b50),\n u16(0),\n u16(0),\n u16(entries.length),\n u16(entries.length),\n u32(centralDir.length),\n u32(offset),\n u16(0),\n ]);\n\n return Buffer.concat([...locals, centralDir, end]);\n}\n","/**\n * Evidence integrity verification (bundle verify) — schema, presence, hashes.\n */\nimport { readdir, readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { sha256Equals, sha256Hex } from \"./hash.js\";\nimport { parseEvidenceManifestJson } from \"./manifest.js\";\nimport { assertEvidenceRelativePath } from \"./paths.js\";\nimport {\n EVIDENCE_MANIFEST_FILENAME,\n EVIDENCE_RESOLVED_CONTRACT_FILENAME,\n type EvidenceManifest,\n} from \"./types.js\";\nimport { verifyEvidenceContractBinding } from \"./contract-binding.js\";\n\nexport type EvidenceVerifyStatus = \"pass\" | \"fail\";\n\nexport interface EvidenceVerifyIssue {\n code:\n | \"manifest_missing\"\n | \"manifest_invalid\"\n | \"file_missing\"\n | \"file_unexpected\"\n | \"hash_mismatch\"\n | \"assessment_missing\"\n | \"provenance_missing\"\n | \"path_unsafe\"\n | \"io_error\"\n | \"contract_file_missing\"\n | \"contract_hash_mismatch\"\n | \"contract_digest_mismatch\"\n | \"contract_binding_invalid\";\n severity: \"error\" | \"warning\";\n message: string;\n path?: string;\n}\n\nexport interface EvidenceVerifyResult {\n ok: boolean;\n status: EvidenceVerifyStatus;\n root: string;\n manifest?: EvidenceManifest;\n issues: EvidenceVerifyIssue[];\n checkedFiles: number;\n}\n\nexport interface EvidenceVerifyOptions {\n /** Unexpected files: default fail for share/strict-style verification. */\n unexpectedFiles?: \"fail\" | \"warn\" | \"ignore\";\n}\n\nasync function listFilesRecursive(root: string): Promise<string[]> {\n const out: string[] = [];\n async function walk(dir: string): Promise<void> {\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const abs = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n await walk(abs);\n } else if (entry.isFile()) {\n const rel = path.relative(root, abs).split(path.sep).join(\"/\");\n out.push(rel);\n }\n }\n }\n await walk(root);\n return out.sort((a, b) => a.localeCompare(b));\n}\n\n/**\n * Verify an Evidence v2 directory (contains `evidence.json`).\n * Does not extract ZIP archives — callers should unpack first when needed.\n */\nexport async function verifyEvidenceDirectory(\n rootPath: string,\n options: EvidenceVerifyOptions = {},\n): Promise<EvidenceVerifyResult> {\n const unexpectedMode = options.unexpectedFiles ?? \"fail\";\n const root = path.resolve(rootPath);\n const issues: EvidenceVerifyIssue[] = [];\n\n let rootStat;\n try {\n rootStat = await stat(root);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n ok: false,\n status: \"fail\",\n root,\n issues: [{ code: \"io_error\", severity: \"error\", message: `Cannot read path: ${message}` }],\n checkedFiles: 0,\n };\n }\n if (!rootStat.isDirectory()) {\n return {\n ok: false,\n status: \"fail\",\n root,\n issues: [\n {\n code: \"io_error\",\n severity: \"error\",\n message: \"Evidence verify expects a directory containing evidence.json (unpack ZIP first).\",\n },\n ],\n checkedFiles: 0,\n };\n }\n\n const manifestPath = path.join(root, EVIDENCE_MANIFEST_FILENAME);\n let manifestText: string;\n try {\n manifestText = await readFile(manifestPath, \"utf-8\");\n } catch {\n return {\n ok: false,\n status: \"fail\",\n root,\n issues: [\n {\n code: \"manifest_missing\",\n severity: \"error\",\n message: `Missing ${EVIDENCE_MANIFEST_FILENAME}`,\n path: EVIDENCE_MANIFEST_FILENAME,\n },\n ],\n checkedFiles: 0,\n };\n }\n\n let manifest: EvidenceManifest;\n try {\n manifest = parseEvidenceManifestJson(manifestText);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n ok: false,\n status: \"fail\",\n root,\n issues: [\n {\n code: \"manifest_invalid\",\n severity: \"error\",\n message,\n path: EVIDENCE_MANIFEST_FILENAME,\n },\n ],\n checkedFiles: 0,\n };\n }\n\n if (!manifest.assessment?.status) {\n issues.push({\n code: \"assessment_missing\",\n severity: \"error\",\n message: \"Manifest assessment.status is required.\",\n });\n }\n if (!manifest.generator?.name || !manifest.generator?.version) {\n issues.push({\n code: \"provenance_missing\",\n severity: \"error\",\n message: \"Manifest generator.name and generator.version are required.\",\n });\n }\n if (!manifest.source?.runIds?.length) {\n issues.push({\n code: \"provenance_missing\",\n severity: \"error\",\n message: \"Manifest source.runIds must be non-empty.\",\n });\n }\n\n const listed = new Set<string>();\n for (const file of manifest.files) {\n let rel: string;\n try {\n rel = assertEvidenceRelativePath(file.path);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n issues.push({\n code: \"path_unsafe\",\n severity: \"error\",\n message,\n path: file.path,\n });\n continue;\n }\n if (rel === EVIDENCE_MANIFEST_FILENAME) {\n issues.push({\n code: \"manifest_invalid\",\n severity: \"error\",\n message: `${EVIDENCE_MANIFEST_FILENAME} must not list itself in files[].`,\n path: rel,\n });\n continue;\n }\n listed.add(rel);\n const abs = path.join(root, ...rel.split(\"/\"));\n let bytes: Buffer;\n try {\n bytes = await readFile(abs);\n } catch {\n issues.push({\n code: \"file_missing\",\n severity: \"error\",\n message: `Listed file missing: ${rel}`,\n path: rel,\n });\n continue;\n }\n const actual = sha256Hex(bytes);\n if (!sha256Equals(file.sha256, actual)) {\n issues.push({\n code: \"hash_mismatch\",\n severity: \"error\",\n message: `SHA-256 mismatch for ${rel}`,\n path: rel,\n });\n }\n }\n\n let onDisk: string[] = [];\n try {\n onDisk = await listFilesRecursive(root);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n issues.push({ code: \"io_error\", severity: \"error\", message });\n }\n\n for (const rel of onDisk) {\n if (rel === EVIDENCE_MANIFEST_FILENAME) continue;\n if (listed.has(rel)) continue;\n if (unexpectedMode === \"ignore\") continue;\n issues.push({\n code: \"file_unexpected\",\n severity: unexpectedMode === \"warn\" ? \"warning\" : \"error\",\n message: `Unexpected file not listed in manifest: ${rel}`,\n path: rel,\n });\n }\n\n if (manifest.contract !== undefined) {\n const contractRel =\n manifest.contract.path ?? EVIDENCE_RESOLVED_CONTRACT_FILENAME;\n let resolvedBytes: string | undefined;\n try {\n resolvedBytes = await readFile(path.join(root, ...contractRel.split(\"/\")), \"utf-8\");\n } catch {\n resolvedBytes = undefined;\n }\n let checkResultsJson: string | undefined;\n try {\n checkResultsJson = await readFile(path.join(root, \"check-results.json\"), \"utf-8\");\n } catch {\n checkResultsJson = undefined;\n }\n for (const issue of verifyEvidenceContractBinding({\n binding: manifest.contract,\n ...(resolvedBytes !== undefined ? { resolvedContractBytes: resolvedBytes } : {}),\n ...(checkResultsJson !== undefined ? { checkResultsJson } : {}),\n })) {\n issues.push(issue);\n }\n }\n\n const hasError = issues.some((issue) => issue.severity === \"error\");\n return {\n ok: !hasError,\n status: hasError ? \"fail\" : \"pass\",\n root,\n manifest,\n issues,\n checkedFiles: listed.size,\n };\n}\n","/**\n * Helpers for CI Evidence v2 packages (same files as share-safe bundles).\n */\nimport { buildEvidenceHtmlShell } from \"./html-shell.js\";\nimport {\n buildEvidenceManifest,\n collectTraceSchemaVersions,\n serializeEvidenceManifest,\n} from \"./manifest.js\";\nimport { sha256Hex } from \"./hash.js\";\nimport {\n EVIDENCE_ASSESSMENT_NOTE,\n EVIDENCE_FORMAT_VERSION,\n EVIDENCE_MANIFEST_FILENAME,\n EVIDENCE_RESOLVED_CONTRACT_FILENAME,\n type EvidenceContractBinding,\n type EvidenceManifest,\n type EvidenceSafeStatus,\n} from \"./types.js\";\nimport { EVIDENCE_HTML_FILENAME } from \"./html-shell.js\";\nimport {\n bindCheckResultsToContract,\n buildEvidenceContractPackage,\n serializeCheckResultsJson,\n type BuildEvidenceContractPackageInput,\n} from \"./contract-binding.js\";\n\nexport interface EvidenceCiPackageInput {\n generatorVersion: string;\n runIds: readonly string[];\n /** Pre-redaction source bytes keyed by run id (for sourceHashes). */\n sourceContents: ReadonlyMap<string, string> | Record<string, string>;\n /** Redacted combined JSONL written as trace.jsonl. */\n redactedTraceJsonl: string;\n redactionProfile: \"local\" | \"share\" | \"strict\";\n assessmentStatus: EvidenceSafeStatus;\n sourceStatus?: EvidenceSafeStatus;\n checkResultsJson: string;\n createdAt?: string;\n summaryText?: string;\n /** Optional TraceFacts/parity summary embedded in evidence.json (6.14+). */\n semantics?: EvidenceManifest[\"semantics\"];\n /**\n * Optional TraceContract / preset binding (6.28+).\n * When omitted, no contract section is written (older Evidence shape).\n * Pass `{ engineVersion, source }` with neither contract nor preset to record `unavailable`.\n */\n contractPackage?: BuildEvidenceContractPackageInput;\n}\n\nexport interface EvidenceCiPackageFiles {\n \"evidence.html\": string;\n \"evidence.json\": string;\n \"check-results.json\": string;\n \"trace.jsonl\": string;\n \"contract.resolved.json\"?: string;\n manifest: EvidenceManifest;\n}\n\nfunction asMap(\n value: ReadonlyMap<string, string> | Record<string, string>,\n): Map<string, string> {\n if (value instanceof Map) return new Map(value);\n return new Map(Object.entries(value));\n}\n\n/**\n * Build the standard CI evidence files (in memory) using Evidence v2 helpers.\n * Optionally packages `contract.resolved.json` and binds digests (6.28+).\n */\nexport function buildEvidenceCiPackage(input: EvidenceCiPackageInput): EvidenceCiPackageFiles {\n const sources = asMap(input.sourceContents);\n const sourceHashes = input.runIds.map((runId) => ({\n runId,\n algorithm: \"sha256\" as const,\n hash: sha256Hex(sources.get(runId) ?? \"\"),\n }));\n const schemaVersions = new Set<string>();\n for (const content of sources.values()) {\n for (const version of collectTraceSchemaVersions(content)) {\n schemaVersions.add(version);\n }\n }\n for (const version of collectTraceSchemaVersions(input.redactedTraceJsonl)) {\n schemaVersions.add(version);\n }\n\n const createdAt = input.createdAt ?? new Date().toISOString();\n const evidenceHtml = buildEvidenceHtmlShell({\n title: \"AgentInspect evidence\",\n runIds: input.runIds,\n assessmentStatus: input.assessmentStatus,\n sourceStatus: input.sourceStatus,\n redactionProfile: input.redactionProfile,\n verificationPolicy: input.redactionProfile,\n generatorName: \"agent-inspect\",\n generatorVersion: input.generatorVersion,\n createdAt,\n summaryText: input.summaryText,\n checkSummary: {\n aggregateStatus: input.assessmentStatus,\n runs: input.runIds.map((runId) => ({\n runId,\n status: input.assessmentStatus,\n sourceStatus: input.sourceStatus,\n errors: input.assessmentStatus === \"UNSAFE\" || input.assessmentStatus === \"UNKNOWN\" ? 1 : 0,\n warnings: input.assessmentStatus === \"SAFE WITH WARNINGS\" ? 1 : 0,\n findings: 0,\n })),\n },\n });\n\n let checkResultsJson = input.checkResultsJson;\n let contractBinding: EvidenceContractBinding | undefined;\n let contractFileContent: string | undefined;\n\n if (input.contractPackage !== undefined) {\n const packaged = buildEvidenceContractPackage({\n ...input.contractPackage,\n engineVersion: input.contractPackage.engineVersion || input.generatorVersion,\n });\n contractBinding = packaged.binding;\n if (packaged.resolvedJson !== undefined) {\n contractFileContent = packaged.resolvedJson;\n }\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(checkResultsJson) as Record<string, unknown>;\n } catch {\n parsed = { raw: checkResultsJson };\n }\n checkResultsJson = serializeCheckResultsJson(\n bindCheckResultsToContract(parsed, packaged.checkBinding),\n );\n }\n\n const packaged = [\n { path: EVIDENCE_HTML_FILENAME, content: evidenceHtml },\n { path: \"check-results.json\", content: checkResultsJson },\n { path: \"trace.jsonl\", content: input.redactedTraceJsonl },\n ...(contractFileContent !== undefined\n ? [{ path: EVIDENCE_RESOLVED_CONTRACT_FILENAME, content: contractFileContent }]\n : []),\n ];\n\n const manifest = buildEvidenceManifest({\n generatorVersion: input.generatorVersion,\n runIds: input.runIds,\n traceSchemaVersions: [...schemaVersions].sort((a, b) => a.localeCompare(b)),\n sourceHashes,\n redactionProfile: input.redactionProfile,\n verificationPolicy: input.redactionProfile,\n assessmentStatus: input.assessmentStatus,\n sourceStatus: input.sourceStatus,\n files: packaged,\n createdAt,\n note: EVIDENCE_ASSESSMENT_NOTE,\n ...(input.semantics !== undefined ? { semantics: input.semantics } : {}),\n ...(contractBinding !== undefined ? { contract: contractBinding } : {}),\n });\n\n return {\n \"evidence.html\": evidenceHtml,\n \"evidence.json\": serializeEvidenceManifest(manifest),\n \"check-results.json\": checkResultsJson,\n \"trace.jsonl\": input.redactedTraceJsonl,\n ...(contractFileContent !== undefined\n ? { [EVIDENCE_RESOLVED_CONTRACT_FILENAME]: contractFileContent }\n : {}),\n manifest,\n };\n}\n\nexport { EVIDENCE_FORMAT_VERSION, EVIDENCE_HTML_FILENAME, EVIDENCE_MANIFEST_FILENAME };\n","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, rulesEvaluated: 0 },\n findings: [],\n diagnostics: [],\n ruleExecutions: [],\n };\n const observationResult = validateExpectedObservations(suiteCase, read);\n\n const diagnostics = [\n ...checkResult.diagnostics.map((item) =>\n diagnostic(\n \"AI_SUITE_CASE_CHECK_FAILED\",\n item.message,\n item.severity,\n suiteCase.id,\n ),\n ),\n ...checkResult.findings\n .filter((finding) => finding.status === \"fail\")\n .map((finding) =>\n diagnostic(\n \"AI_SUITE_CASE_CHECK_FAILED\",\n finding.message,\n finding.severity,\n suiteCase.id,\n ),\n ),\n ...observationResult.diagnostics,\n ];\n\n const checkOk = checkResult.ok;\n const observationsOk = observationResult.ok;\n const ok = checkOk && observationsOk;\n const status = ok ? \"pass\" : checkResult.status === \"error\" ? \"error\" : \"fail\";\n\n return {\n id: suiteCase.id,\n status,\n tracePath: resolved.tracePath,\n ...(resolved.runId !== undefined ? { runId: resolved.runId } : {}),\n checkOk,\n observationsOk,\n diagnostics,\n ...(ok\n ? {}\n : {\n message:\n diagnostics.map((item) => item.message).join(\"; \") ||\n checkResult.findings.map((item) => item.message).join(\"; \"),\n }),\n };\n}\n\nexport async function runSuite(options: RunSuiteOptions = {}): Promise<SuiteRunResult> {\n const startedAt = new Date(options.nowMs ?? Date.now()).toISOString();\n const { config, configPath, configDir } = await loadSuiteConfig(options);\n const tracesDir = path.resolve(configDir, config.traces);\n\n const cases: SuiteCaseResult[] = [];\n const diagnostics: SuiteDiagnostic[] = [];\n\n for (const suiteCase of config.cases) {\n cases.push(\n await runSuiteCase(suiteCase, config, {\n configDir,\n tracesDir,\n }),\n );\n }\n\n const summary = {\n passed: cases.filter((item) => item.status === \"pass\").length,\n failed: cases.filter((item) => item.status === \"fail\").length,\n errors: cases.filter((item) => item.status === \"error\").length,\n skipped: cases.filter((item) => item.status === \"skipped\").length,\n };\n\n const finishedAt = new Date(options.nowMs ?? Date.now()).toISOString();\n const allSkipped = cases.length > 0 && summary.skipped === cases.length;\n const ok = summary.failed === 0 && summary.errors === 0 && !allSkipped;\n const status =\n summary.errors > 0\n ? \"error\"\n : allSkipped\n ? \"fail\"\n : summary.failed > 0 || !ok\n ? \"fail\"\n : \"pass\";\n\n return {\n ok,\n status,\n suiteName: config.name,\n configPath,\n tracesDir,\n startedAt,\n finishedAt,\n summary,\n cases,\n diagnostics,\n };\n}\n","import type { RenderSuiteReportOptions, SuiteRunResult } from \"./types.js\";\n\nfunction statusLabel(status: string): string {\n return status.toUpperCase();\n}\n\nexport function renderSuiteReportMarkdown(result: SuiteRunResult): string {\n const lines: string[] = [];\n lines.push(`# Suite: ${result.suiteName}`);\n lines.push(\"\");\n lines.push(`Status: **${statusLabel(result.status)}**`);\n lines.push(`Config: \\`${result.configPath}\\``);\n lines.push(`Traces: \\`${result.tracesDir}\\``);\n lines.push(`Started: ${result.startedAt}`);\n lines.push(`Finished: ${result.finishedAt}`);\n lines.push(\"\");\n lines.push(\"## Summary\");\n lines.push(`- Passed: ${result.summary.passed}`);\n lines.push(`- Failed: ${result.summary.failed}`);\n lines.push(`- Errors: ${result.summary.errors}`);\n lines.push(`- Skipped: ${result.summary.skipped}`);\n lines.push(\"\");\n lines.push(\"## Cases\");\n for (const suiteCase of result.cases) {\n lines.push(`### ${suiteCase.id} — ${statusLabel(suiteCase.status)}`);\n if (suiteCase.tracePath !== undefined) {\n lines.push(`- Trace: \\`${suiteCase.tracePath}\\``);\n }\n if (suiteCase.runId !== undefined) {\n lines.push(`- Run: \\`${suiteCase.runId}\\``);\n }\n if (suiteCase.message !== undefined && suiteCase.message.trim() !== \"\") {\n lines.push(`- ${suiteCase.message}`);\n }\n if (suiteCase.diagnostics.length > 0) {\n for (const item of suiteCase.diagnostics) {\n lines.push(`- [${item.severity}] ${item.message}`);\n }\n }\n lines.push(\"\");\n }\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderSuiteReport(\n result: SuiteRunResult,\n options: RenderSuiteReportOptions = {},\n): string {\n const format = options.format ?? \"markdown\";\n if (format === \"json\") {\n return JSON.stringify(result, null, 2);\n }\n return renderSuiteReportMarkdown(result);\n}\n","import type { SuiteConfig } from \"./types.js\";\n\nexport const SUITE_TEMPLATE_IDS = [\n \"customer-support-agent\",\n \"refund-agent\",\n \"sales-assistant\",\n \"browser-task-agent\",\n \"mcp-tool-agent\",\n \"workflow-agent\",\n \"rag-answer-agent\",\n \"human-approval-agent\",\n] as const;\n\nexport type SuiteTemplateId = (typeof SUITE_TEMPLATE_IDS)[number];\n\nfunction baseTemplate(name: string, cases: SuiteConfig[\"cases\"]): SuiteConfig {\n return {\n name,\n traces: \"./.agent-inspect\",\n cases,\n checks: {\n select: [\"run.status\", \"outcome.status\"],\n run: { maxDurationMs: 60_000 },\n },\n redactionProfile: \"local\",\n artifacts: { outputDir: \".agent-inspect/suite-runs\" },\n };\n}\n\nconst TEMPLATES: Record<SuiteTemplateId, SuiteConfig> = {\n \"customer-support-agent\": baseTemplate(\"customer-support-agent\", [\n {\n id: \"support-ticket\",\n runId: \"support-ticket\",\n requireTools: [\"searchDocs\"],\n forbidTools: [\"deleteAccount\"],\n expectedObservations: [\"answerReady\"],\n maxDurationMs: 45_000,\n },\n ]),\n \"refund-agent\": baseTemplate(\"refund-agent\", [\n {\n id: \"refund-flow\",\n runId: \"refund-flow\",\n requireTools: [\"searchDocs\"],\n forbidTools: [\"deleteAccount\"],\n expectedObservations: [\"policyShown\"],\n maxDurationMs: 30_000,\n },\n ]),\n \"sales-assistant\": baseTemplate(\"sales-assistant\", [\n {\n id: \"quote-request\",\n runId: \"quote-request\",\n requireTools: [\"lookupPricing\"],\n maxDurationMs: 30_000,\n },\n ]),\n \"browser-task-agent\": baseTemplate(\"browser-task-agent\", [\n {\n id: \"browser-nav\",\n runId: \"browser-nav\",\n requireTools: [\"browserNavigate\"],\n maxDurationMs: 120_000,\n },\n ]),\n \"mcp-tool-agent\": baseTemplate(\"mcp-tool-agent\", [\n {\n id: \"mcp-call\",\n runId: \"mcp-call\",\n requireTools: [\"mcp:tools/list\"],\n maxDurationMs: 30_000,\n },\n ]),\n \"workflow-agent\": baseTemplate(\"workflow-agent\", [\n {\n id: \"workflow-handoff\",\n runId: \"workflow-handoff\",\n requireTools: [\"handoff\"],\n maxDurationMs: 60_000,\n },\n ]),\n \"rag-answer-agent\": baseTemplate(\"rag-answer-agent\", [\n {\n id: \"rag-answer\",\n runId: \"rag-answer\",\n requireTools: [\"retrieve\", \"answer\"],\n expectedObservations: [\"citationShown\"],\n maxDurationMs: 45_000,\n },\n ]),\n \"human-approval-agent\": baseTemplate(\"human-approval-agent\", [\n {\n id: \"approval-gate\",\n runId: \"approval-gate\",\n expectedObservations: [\"approvalRequested\", \"approvalGranted\"],\n maxDurationMs: 60_000,\n },\n ]),\n};\n\nexport function listSuiteTemplates(): SuiteTemplateId[] {\n return [...SUITE_TEMPLATE_IDS];\n}\n\nexport function getSuiteTemplate(id: string): SuiteConfig | undefined {\n if (!(SUITE_TEMPLATE_IDS as readonly string[]).includes(id)) return undefined;\n return structuredClone(TEMPLATES[id as SuiteTemplateId]);\n}\n\nexport function resolveSuiteTemplate(id: string): SuiteConfig {\n const template = getSuiteTemplate(id);\n if (template === undefined) {\n throw new Error(\n `Unknown suite template \"${id}\". Available: ${SUITE_TEMPLATE_IDS.join(\", \")}`,\n );\n }\n return template;\n}\n","import type { TraceMetadataStatus } from \"../types.js\";\n\nexport type CohortMetricId =\n | \"errorRate\"\n | \"duration\"\n | \"toolChoice\"\n | \"toolOrdering\"\n | \"llmCallCount\"\n | \"tokenUsage\"\n | \"retryCount\"\n | \"observationFailure\"\n | \"guardrailFailure\"\n | \"circuitViolation\"\n | \"redactionWarning\";\n\nexport const COHORT_METRIC_IDS: readonly CohortMetricId[] = [\n \"errorRate\",\n \"duration\",\n \"toolChoice\",\n \"toolOrdering\",\n \"llmCallCount\",\n \"tokenUsage\",\n \"retryCount\",\n \"observationFailure\",\n \"guardrailFailure\",\n \"circuitViolation\",\n \"redactionWarning\",\n];\n\nexport interface CohortRunMetrics {\n runId: string;\n cohortLabel?: string;\n groupKey: string;\n status: TraceMetadataStatus;\n error: boolean;\n durationMs?: number;\n llmCallCount: number;\n tokenUsageTotal?: number;\n retryCount: number;\n observationFailures: number;\n guardrailFailures: number;\n circuitViolations: number;\n redactionWarnings: number;\n toolChoices: string[];\n toolOrdering: string[];\n}\n\nexport interface CohortAggregateMetrics {\n groupKey: string;\n cohortLabel?: string;\n runCount: number;\n errorRate: number;\n avgDurationMs?: number;\n p95DurationMs?: number;\n avgLlmCallCount: number;\n avgTokenUsage?: number;\n avgRetryCount: number;\n observationFailureRate: number;\n avgGuardrailFailures: number;\n avgCircuitViolations: number;\n avgRedactionWarnings: number;\n dominantToolChoice?: string;\n toolOrderingSignature?: string;\n}\n\nexport interface CohortMetricComparison {\n metric: CohortMetricId;\n baseline?: number | string;\n candidate?: number | string;\n delta?: number | string;\n regression: boolean;\n message: string;\n}\n\nexport interface CohortAnalysisResult {\n ok: boolean;\n traceDir: string;\n baseline?: string;\n candidate?: string;\n cohortKey: string;\n groupBy: string;\n metrics: CohortMetricId[];\n groups: CohortAggregateMetrics[];\n comparisons: CohortMetricComparison[];\n runs: CohortRunMetrics[];\n warnings: string[];\n}\n\nexport interface CohortToleranceOptions {\n /** Minimum runs per cohort label before comparisons are considered valid. */\n minSampleSize?: number;\n /** Allowed relative delta (0–1) before a metric comparison is a regression. */\n maxRelativeDelta?: number;\n}\n\nexport interface AnalyzeCohortOptions {\n traceDir: string;\n baseline?: string;\n candidate?: string;\n cohortKey?: string;\n groupBy?: string;\n metrics?: CohortMetricId[];\n tolerance?: CohortToleranceOptions;\n}\n\nexport interface RenderCohortReportOptions {\n format?: \"markdown\" | \"json\" | \"html\";\n}\n","import type {\n CohortAggregateMetrics,\n CohortMetricComparison,\n CohortMetricId,\n} from \"./types.js\";\n\nfunction compareNumber(\n metric: CohortMetricId,\n label: string,\n baseline?: number,\n candidate?: number,\n higherIsWorse = true,\n maxRelativeDelta?: number,\n): CohortMetricComparison | undefined {\n if (baseline === undefined && candidate === undefined) return undefined;\n const delta =\n baseline !== undefined && candidate !== undefined\n ? candidate - baseline\n : undefined;\n let regression =\n delta !== undefined &&\n ((higherIsWorse && delta > 0) || (!higherIsWorse && delta < 0));\n if (\n regression &&\n maxRelativeDelta !== undefined &&\n baseline !== undefined &&\n baseline !== 0 &&\n delta !== undefined\n ) {\n const relative = Math.abs(delta / baseline);\n if (relative <= maxRelativeDelta) regression = false;\n }\n return {\n metric,\n baseline,\n candidate,\n delta,\n regression,\n message: `${label}: baseline=${baseline ?? \"n/a\"} candidate=${candidate ?? \"n/a\"}${\n delta !== undefined ? ` (delta ${delta})` : \"\"\n }`,\n };\n}\n\nfunction pickAggregate(\n groups: readonly CohortAggregateMetrics[],\n cohortLabel: string,\n groupKey?: string,\n): CohortAggregateMetrics | undefined {\n return groups.find(\n (group) =>\n group.cohortLabel === cohortLabel &&\n (groupKey === undefined || group.groupKey === groupKey),\n );\n}\n\nexport function compareCohortAggregates(\n groups: readonly CohortAggregateMetrics[],\n options: {\n baseline: string;\n candidate: string;\n metrics: readonly CohortMetricId[];\n groupKey?: string;\n maxRelativeDelta?: number;\n },\n): CohortMetricComparison[] {\n const baselineAgg = pickAggregate(groups, options.baseline, options.groupKey);\n const candidateAgg = pickAggregate(groups, options.candidate, options.groupKey);\n const comparisons: CohortMetricComparison[] = [];\n const tolerance = options.maxRelativeDelta;\n\n for (const metric of options.metrics) {\n switch (metric) {\n case \"errorRate\": {\n const item = compareNumber(\n metric,\n \"Error rate\",\n baselineAgg?.errorRate,\n candidateAgg?.errorRate,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"duration\": {\n const item = compareNumber(\n metric,\n \"Average duration (ms)\",\n baselineAgg?.avgDurationMs,\n candidateAgg?.avgDurationMs,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"llmCallCount\": {\n const item = compareNumber(\n metric,\n \"Average LLM calls\",\n baselineAgg?.avgLlmCallCount,\n candidateAgg?.avgLlmCallCount,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"tokenUsage\": {\n const item = compareNumber(\n metric,\n \"Average token usage\",\n baselineAgg?.avgTokenUsage,\n candidateAgg?.avgTokenUsage,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"retryCount\": {\n const item = compareNumber(\n metric,\n \"Average retries\",\n baselineAgg?.avgRetryCount,\n candidateAgg?.avgRetryCount,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"observationFailure\": {\n const item = compareNumber(\n metric,\n \"Observation failure rate\",\n baselineAgg?.observationFailureRate,\n candidateAgg?.observationFailureRate,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"toolChoice\": {\n const baselineValue = baselineAgg?.dominantToolChoice;\n const candidateValue = candidateAgg?.dominantToolChoice;\n comparisons.push({\n metric,\n baseline: baselineValue,\n candidate: candidateValue,\n delta: baselineValue === candidateValue ? \"same\" : \"changed\",\n regression: baselineValue !== candidateValue,\n message: `Tool choice: baseline=${baselineValue ?? \"n/a\"} candidate=${candidateValue ?? \"n/a\"}`,\n });\n break;\n }\n case \"toolOrdering\": {\n const baselineValue = baselineAgg?.toolOrderingSignature;\n const candidateValue = candidateAgg?.toolOrderingSignature;\n comparisons.push({\n metric,\n baseline: baselineValue,\n candidate: candidateValue,\n delta: baselineValue === candidateValue ? \"same\" : \"changed\",\n regression: baselineValue !== candidateValue,\n message: `Tool ordering: baseline=${baselineValue ?? \"n/a\"} candidate=${candidateValue ?? \"n/a\"}`,\n });\n break;\n }\n case \"guardrailFailure\": {\n const item = compareNumber(\n metric,\n \"Guardrail failures\",\n baselineAgg?.avgGuardrailFailures,\n candidateAgg?.avgGuardrailFailures,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"circuitViolation\": {\n const item = compareNumber(\n metric,\n \"Circuit violations\",\n baselineAgg?.avgCircuitViolations,\n candidateAgg?.avgCircuitViolations,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n case \"redactionWarning\": {\n const item = compareNumber(\n metric,\n \"Redaction warnings\",\n baselineAgg?.avgRedactionWarnings,\n candidateAgg?.avgRedactionWarnings,\n true,\n tolerance,\n );\n if (item) comparisons.push(item);\n break;\n }\n default:\n break;\n }\n }\n\n return comparisons;\n}\n","import { extractSessionWorkflowMetadata } from \"../sessions/metadata.js\";\nimport type { SessionRunRecord } from \"../sessions/types.js\";\n\nexport function parseCohortMetricList(value: string | undefined): string[] {\n if (value === undefined || value.trim() === \"\") return [];\n return value\n .split(\",\")\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n}\n\nexport function parseGroupBySpec(groupBy: string | undefined): {\n kind: \"model\" | \"session\" | \"group\" | \"metadata\";\n metadataKey?: string;\n} {\n const raw = (groupBy ?? \"model\").trim();\n if (raw === \"model\") return { kind: \"model\" };\n if (raw === \"session\") return { kind: \"session\" };\n if (raw === \"group\") return { kind: \"group\" };\n if (raw.startsWith(\"metadata.\")) {\n const metadataKey = raw.slice(\"metadata.\".length).trim();\n if (metadataKey === \"\") throw new Error(\"metadata group-by requires a key.\");\n return { kind: \"metadata\", metadataKey };\n }\n throw new Error(`Unsupported --group-by value: ${raw}`);\n}\n\nfunction metadataString(\n metadata: Record<string, unknown> | undefined,\n key: string,\n): string | undefined {\n const value = metadata?.[key];\n return typeof value === \"string\" && value.trim() !== \"\" ? value.trim() : undefined;\n}\n\nexport function resolveRunGroupKey(\n run: SessionRunRecord,\n groupBy: ReturnType<typeof parseGroupBySpec>,\n): string {\n const metadata = run.metadata ?? {};\n switch (groupBy.kind) {\n case \"model\":\n return metadataString(metadata, \"model\") ?? \"unknown\";\n case \"session\":\n return (\n extractSessionWorkflowMetadata(metadata)?.sessionId ??\n metadataString(metadata, \"sessionId\") ??\n \"__unscoped__\"\n );\n case \"group\":\n return (\n extractSessionWorkflowMetadata(metadata)?.groupId ??\n metadataString(metadata, \"groupId\") ??\n \"__unscoped__\"\n );\n case \"metadata\":\n return metadataString(metadata, groupBy.metadataKey!) ?? \"__missing__\";\n default:\n return \"unknown\";\n }\n}\n\nexport function resolveCohortLabel(\n run: SessionRunRecord,\n cohortKey: string,\n baseline?: string,\n candidate?: string,\n): string | undefined {\n const label = metadataString(run.metadata, cohortKey);\n if (label === undefined) return undefined;\n if (baseline !== undefined && label === baseline) return baseline;\n if (candidate !== undefined && label === candidate) return candidate;\n if (baseline === undefined && candidate === undefined) return label;\n return undefined;\n}\n\nexport function filterRunsForCohort(\n runs: readonly SessionRunRecord[],\n options: {\n cohortKey: string;\n baseline?: string;\n candidate?: string;\n },\n): { runs: SessionRunRecord[]; warnings: string[] } {\n const warnings: string[] = [];\n if (options.baseline === undefined && options.candidate === undefined) {\n return { runs: [...runs], warnings };\n }\n\n const selected: SessionRunRecord[] = [];\n for (const run of runs) {\n const label = resolveCohortLabel(\n run,\n options.cohortKey,\n options.baseline,\n options.candidate,\n );\n if (label !== undefined) selected.push(run);\n }\n\n if (selected.length === 0) {\n warnings.push(\n `No runs matched baseline/candidate labels on metadata.${options.cohortKey}.`,\n );\n }\n\n return { runs: selected, warnings };\n}\n","import { extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { buildRunSummary } from \"../trace-metadata.js\";\nimport { readTraceEventsFromFile } from \"../storage.js\";\nimport type { StepStartedEvent, TraceEvent } from \"../types.js\";\nimport type { CohortRunMetrics } from \"./types.js\";\n\nfunction asNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction toolSteps(events: readonly TraceEvent[]): { choices: string[]; ordering: string[] } {\n const ordering: string[] = [];\n const choices = new Set<string>();\n const sorted = [...events]\n .filter((event) => event.event === \"step_started\")\n .sort((a, b) => a.timestamp - b.timestamp);\n for (const event of sorted) {\n const step = event as StepStartedEvent;\n if (step.type !== \"tool\") continue;\n const name =\n typeof step.metadata?.toolName === \"string\"\n ? step.metadata.toolName\n : step.name;\n ordering.push(name);\n choices.add(name);\n }\n return { choices: [...choices].sort(), ordering };\n}\n\nexport async function computeCohortRunMetrics(input: {\n runId: string;\n filePath: string;\n metadata?: Record<string, unknown>;\n status?: CohortRunMetrics[\"status\"];\n durationMs?: number;\n groupKey: string;\n cohortLabel?: string;\n}): Promise<CohortRunMetrics> {\n const events = await readTraceEventsFromFile(input.filePath);\n const summary = buildRunSummary(events);\n const tools = toolSteps(events);\n const outcomes = extractOutcomesFromTraceEvents(events);\n const observationFailures = outcomes.filter((item) => item.status === \"failed\").length;\n\n const metadata = input.metadata ?? {};\n const retryCount =\n asNumber(metadata.attempt) !== undefined && asNumber(metadata.attempt)! > 1\n ? asNumber(metadata.attempt)! - 1\n : typeof metadata.retryOf === \"string\"\n ? 1\n : 0;\n\n return {\n runId: input.runId,\n ...(input.cohortLabel !== undefined ? { cohortLabel: input.cohortLabel } : {}),\n groupKey: input.groupKey,\n status: summary.status,\n error: summary.status === \"error\",\n durationMs: summary.durationMs ?? input.durationMs,\n llmCallCount: summary.llmSteps,\n tokenUsageTotal: summary.totalTokens?.total,\n retryCount,\n observationFailures,\n guardrailFailures: asNumber(metadata.guardrailFailures) ?? 0,\n circuitViolations: asNumber(metadata.circuitViolations) ?? 0,\n redactionWarnings: asNumber(metadata.redactionWarnings) ?? 0,\n toolChoices: tools.choices,\n toolOrdering: tools.ordering,\n };\n}\n\nfunction percentile(values: number[], p: number): number | undefined {\n if (values.length === 0) return undefined;\n const sorted = [...values].sort((a, b) => a - b);\n const idx = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n );\n return sorted[idx];\n}\n\nfunction dominantToolChoice(runs: readonly CohortRunMetrics[]): string | undefined {\n const counts = new Map<string, number>();\n for (const run of runs) {\n const signature = run.toolChoices.join(\",\");\n if (signature === \"\") continue;\n counts.set(signature, (counts.get(signature) ?? 0) + 1);\n }\n let best: string | undefined;\n let bestCount = 0;\n for (const [key, count] of counts) {\n if (count > bestCount) {\n best = key;\n bestCount = count;\n }\n }\n return best;\n}\n\nfunction orderingSignature(runs: readonly CohortRunMetrics[]): string | undefined {\n const counts = new Map<string, number>();\n for (const run of runs) {\n const signature = run.toolOrdering.join(\">\");\n if (signature === \"\") continue;\n counts.set(signature, (counts.get(signature) ?? 0) + 1);\n }\n let best: string | undefined;\n let bestCount = 0;\n for (const [key, count] of counts) {\n if (count > bestCount) {\n best = key;\n bestCount = count;\n }\n }\n return best;\n}\n\nexport function aggregateCohortMetrics(\n runs: readonly CohortRunMetrics[],\n groupKey: string,\n cohortLabel?: string,\n) {\n const durations = runs\n .map((run) => run.durationMs)\n .filter((value): value is number => typeof value === \"number\");\n const tokenValues = runs\n .map((run) => run.tokenUsageTotal)\n .filter((value): value is number => typeof value === \"number\");\n const errors = runs.filter((run) => run.error).length;\n const observationFailures = runs.reduce((sum, run) => sum + run.observationFailures, 0);\n\n return {\n groupKey,\n ...(cohortLabel !== undefined ? { cohortLabel } : {}),\n runCount: runs.length,\n errorRate: runs.length > 0 ? errors / runs.length : 0,\n avgDurationMs:\n durations.length > 0\n ? durations.reduce((sum, value) => sum + value, 0) / durations.length\n : undefined,\n p95DurationMs: percentile(durations, 95),\n avgLlmCallCount:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.llmCallCount, 0) / runs.length\n : 0,\n avgTokenUsage:\n tokenValues.length > 0\n ? tokenValues.reduce((sum, value) => sum + value, 0) / tokenValues.length\n : undefined,\n avgRetryCount:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.retryCount, 0) / runs.length\n : 0,\n observationFailureRate:\n runs.length > 0 ? observationFailures / runs.length : 0,\n avgGuardrailFailures:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.guardrailFailures, 0) / runs.length\n : 0,\n avgCircuitViolations:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.circuitViolations, 0) / runs.length\n : 0,\n avgRedactionWarnings:\n runs.length > 0\n ? runs.reduce((sum, run) => sum + run.redactionWarnings, 0) / runs.length\n : 0,\n dominantToolChoice: dominantToolChoice(runs),\n toolOrderingSignature: orderingSignature(runs),\n };\n}\n","import type { SessionRunRecord } from \"../sessions/types.js\";\nimport { compareCohortAggregates } from \"./compare.js\";\nimport {\n filterRunsForCohort,\n parseGroupBySpec,\n resolveCohortLabel,\n resolveRunGroupKey,\n} from \"./grouping.js\";\nimport { aggregateCohortMetrics, computeCohortRunMetrics } from \"./metrics.js\";\nimport {\n COHORT_METRIC_IDS,\n type AnalyzeCohortOptions,\n type CohortAnalysisResult,\n type CohortMetricComparison,\n type CohortMetricId,\n} from \"./types.js\";\n\nconst DEFAULT_METRICS: CohortMetricId[] = [\n \"errorRate\",\n \"duration\",\n \"toolChoice\",\n \"observationFailure\",\n];\n\nfunction normalizeMetrics(metrics: CohortMetricId[] | undefined): CohortMetricId[] {\n if (metrics === undefined || metrics.length === 0) return [...DEFAULT_METRICS];\n const allowed = new Set(COHORT_METRIC_IDS);\n return metrics.filter((metric) => allowed.has(metric));\n}\n\nexport async function analyzeCohort(\n runsInput: readonly SessionRunRecord[],\n options: AnalyzeCohortOptions,\n): Promise<CohortAnalysisResult> {\n const cohortKey = options.cohortKey ?? \"cohort\";\n const groupBySpec = parseGroupBySpec(options.groupBy);\n const metrics = normalizeMetrics(options.metrics);\n const { runs: filteredRuns, warnings } = filterRunsForCohort(runsInput, {\n cohortKey,\n baseline: options.baseline,\n candidate: options.candidate,\n });\n\n const runMetrics = [];\n for (const run of filteredRuns) {\n if (run.filePath === undefined) continue;\n const cohortLabel = resolveCohortLabel(\n run,\n cohortKey,\n options.baseline,\n options.candidate,\n );\n runMetrics.push(\n await computeCohortRunMetrics({\n runId: run.runId,\n filePath: run.filePath,\n metadata: run.metadata,\n status: run.status,\n durationMs: run.durationMs,\n groupKey: resolveRunGroupKey(run, groupBySpec),\n cohortLabel,\n }),\n );\n }\n\n const groupMap = new Map<string, typeof runMetrics>();\n for (const run of runMetrics) {\n const key = `${run.cohortLabel ?? \"*\"}::${run.groupKey}`;\n const bucket = groupMap.get(key) ?? [];\n bucket.push(run);\n groupMap.set(key, bucket);\n }\n\n const groups = [...groupMap.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([, bucket]) =>\n aggregateCohortMetrics(\n bucket,\n bucket[0]!.groupKey,\n bucket[0]?.cohortLabel,\n ),\n );\n\n const comparisons =\n options.baseline !== undefined && options.candidate !== undefined\n ? (() => {\n const groupKeys = [\n ...new Set(groups.map((group) => group.groupKey)),\n ].sort((a, b) => a.localeCompare(b));\n const items: CohortMetricComparison[] = [];\n const minSample = options.tolerance?.minSampleSize ?? 1;\n for (const groupKey of groupKeys) {\n const baselineGroup = groups.find(\n (group) => group.groupKey === groupKey && group.cohortLabel === options.baseline,\n );\n const candidateGroup = groups.find(\n (group) => group.groupKey === groupKey && group.cohortLabel === options.candidate,\n );\n if (\n (baselineGroup && baselineGroup.runCount < minSample) ||\n (candidateGroup && candidateGroup.runCount < minSample)\n ) {\n warnings.push(\n `Insufficient sample for group ${groupKey}: need at least ${minSample} run(s) per cohort.`,\n );\n continue;\n }\n items.push(\n ...compareCohortAggregates(groups, {\n baseline: options.baseline,\n candidate: options.candidate,\n metrics,\n groupKey,\n maxRelativeDelta: options.tolerance?.maxRelativeDelta,\n }),\n );\n }\n return items;\n })()\n : [];\n\n const regression = comparisons.some((item) => item.regression);\n\n return {\n ok: !regression,\n traceDir: options.traceDir,\n ...(options.baseline !== undefined ? { baseline: options.baseline } : {}),\n ...(options.candidate !== undefined ? { candidate: options.candidate } : {}),\n cohortKey,\n groupBy: options.groupBy ?? \"model\",\n metrics,\n groups,\n comparisons,\n runs: runMetrics,\n warnings,\n };\n}\n","import { escapeHtml } from \"../exporters/helpers.js\";\nimport type { CohortAnalysisResult, RenderCohortReportOptions } from \"./types.js\";\n\nfunction formatRate(value: number | undefined): string {\n if (value === undefined) return \"n/a\";\n return `${(value * 100).toFixed(1)}%`;\n}\n\nexport function renderCohortSummaryMarkdown(result: CohortAnalysisResult): string {\n const lines: string[] = [];\n lines.push(\"# Cohort analysis\");\n lines.push(\"\");\n lines.push(`Trace directory: \\`${result.traceDir}\\``);\n lines.push(`Group by: \\`${result.groupBy}\\``);\n if (result.baseline !== undefined && result.candidate !== undefined) {\n lines.push(\n `Baseline/Candidate key: \\`${result.cohortKey}\\` (${result.baseline} vs ${result.candidate})`,\n );\n }\n lines.push(`Status: **${result.ok ? \"PASS\" : \"REGRESSION\"}**`);\n lines.push(\"\");\n\n if (result.warnings.length > 0) {\n lines.push(\"## Warnings\");\n for (const warning of result.warnings) lines.push(`- ${warning}`);\n lines.push(\"\");\n }\n\n lines.push(\"## Groups\");\n for (const group of result.groups) {\n lines.push(\n `### ${group.cohortLabel ?? \"all\"} / ${group.groupKey} (${group.runCount} runs)`,\n );\n lines.push(`- Error rate: ${formatRate(group.errorRate)}`);\n if (group.avgDurationMs !== undefined) {\n lines.push(`- Avg duration: ${Math.round(group.avgDurationMs)} ms`);\n }\n if (group.dominantToolChoice !== undefined) {\n lines.push(`- Dominant tools: ${group.dominantToolChoice}`);\n }\n lines.push(\n `- Observation failure rate: ${formatRate(group.observationFailureRate)}`,\n );\n lines.push(\"\");\n }\n\n if (result.comparisons.length > 0) {\n lines.push(\"## Comparisons\");\n for (const comparison of result.comparisons) {\n const flag = comparison.regression ? \" **REGRESSION**\" : \"\";\n lines.push(`- ${comparison.message}${flag}`);\n }\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderCohortReportHtml(result: CohortAnalysisResult): string {\n const rows = result.groups\n .map(\n (group) =>\n `<tr><td>${escapeHtml(group.cohortLabel ?? \"all\")}</td><td>${escapeHtml(group.groupKey)}</td><td>${group.runCount}</td><td>${escapeHtml(formatRate(group.errorRate))}</td><td>${group.avgDurationMs !== undefined ? Math.round(group.avgDurationMs) : \"n/a\"}</td></tr>`,\n )\n .join(\"\");\n\n const comparisons = result.comparisons\n .map(\n (item) =>\n `<li>${escapeHtml(item.message)}${item.regression ? \" <strong>REGRESSION</strong>\" : \"\"}</li>`,\n )\n .join(\"\");\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\" />\n <title>Cohort report</title>\n <style>\n body { font-family: system-ui, sans-serif; margin: 2rem; }\n table { border-collapse: collapse; width: 100%; }\n th, td { border: 1px solid #ddd; padding: 0.5rem; text-align: left; }\n th { background: #f6f6f6; }\n </style>\n</head>\n<body>\n <h1>Cohort analysis</h1>\n <p>Status: <strong>${result.ok ? \"PASS\" : \"REGRESSION\"}</strong></p>\n <p>Trace directory: <code>${escapeHtml(result.traceDir)}</code></p>\n <h2>Groups</h2>\n <table>\n <thead><tr><th>Cohort</th><th>Group</th><th>Runs</th><th>Error rate</th><th>Avg duration (ms)</th></tr></thead>\n <tbody>${rows}</tbody>\n </table>\n ${result.comparisons.length > 0 ? `<h2>Comparisons</h2><ul>${comparisons}</ul>` : \"\"}\n</body>\n</html>`;\n}\n\nexport function renderCohortReport(\n result: CohortAnalysisResult,\n options: RenderCohortReportOptions = {},\n): string {\n const format = options.format ?? \"markdown\";\n if (format === \"json\") return JSON.stringify(result, null, 2);\n if (format === \"html\") return renderCohortReportHtml(result);\n return renderCohortSummaryMarkdown(result);\n}\n","export function parseGateList(value: string | undefined): string[] {\n if (value === undefined || value.trim() === \"\") return [];\n return value\n .split(\",\")\n .map((item) => item.trim())\n .filter((item) => item.length > 0);\n}\n\nexport function parseGateNumber(\n value: string | undefined,\n label: string,\n options: { min?: number; max?: number } = {},\n): number | undefined {\n if (value === undefined || value.trim() === \"\") return undefined;\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) {\n throw new Error(`Invalid ${label}: ${value}`);\n }\n if (options.min !== undefined && parsed < options.min) {\n throw new Error(`${label} must be at least ${options.min}.`);\n }\n if (options.max !== undefined && parsed > options.max) {\n throw new Error(`${label} must be at most ${options.max}.`);\n }\n return parsed;\n}\n","import { extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { readTraceEventsFromFile } from \"../storage.js\";\nimport { computeCohortRunMetrics } from \"../cohort/metrics.js\";\nimport type { SessionRunRecord } from \"../sessions/types.js\";\nimport type { GateCheckResult, RunGateOptions } from \"./types.js\";\n\nfunction percentile(values: number[], p: number): number | undefined {\n if (values.length === 0) return undefined;\n const sorted = [...values].sort((a, b) => a - b);\n const idx = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n );\n return sorted[idx];\n}\n\nfunction hasThresholds(options: RunGateOptions): boolean {\n return (\n options.maxErrorRate !== undefined ||\n options.maxP95DurationMs !== undefined ||\n (options.forbidTools?.length ?? 0) > 0 ||\n (options.requireObservations?.length ?? 0) > 0\n );\n}\n\nexport function gateHasThresholds(options: RunGateOptions): boolean {\n return hasThresholds(options);\n}\n\nasync function loadRunMetrics(runs: readonly SessionRunRecord[]) {\n const metrics = [];\n for (const run of runs) {\n if (run.filePath === undefined) continue;\n metrics.push(\n await computeCohortRunMetrics({\n runId: run.runId,\n filePath: run.filePath,\n metadata: run.metadata,\n status: run.status,\n durationMs: run.durationMs,\n groupKey: \"all\",\n }),\n );\n }\n return metrics;\n}\n\nasync function observationStatus(\n filePath: string,\n name: string,\n): Promise<\"passed\" | \"failed\" | \"missing\"> {\n const events = await readTraceEventsFromFile(filePath);\n const outcomes = extractOutcomesFromTraceEvents(events);\n const match = outcomes.find((item) => item.name === name);\n if (!match) return \"missing\";\n return match.status === \"passed\" ? \"passed\" : \"failed\";\n}\n\nexport async function evaluateGateThresholds(\n runs: readonly SessionRunRecord[],\n options: RunGateOptions,\n): Promise<{ checks: GateCheckResult[]; readErrors: string[] }> {\n const checks: GateCheckResult[] = [];\n const readErrors: string[] = [];\n\n if (!hasThresholds(options)) {\n return { checks, readErrors };\n }\n\n if (runs.length === 0) {\n readErrors.push(\"No trace runs found in the gate directory.\");\n return { checks, readErrors };\n }\n\n let runMetrics;\n try {\n runMetrics = await loadRunMetrics(runs);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n readErrors.push(message);\n return { checks, readErrors };\n }\n\n if (options.maxErrorRate !== undefined) {\n const errors = runMetrics.filter((run) => run.error).length;\n const actual = runMetrics.length > 0 ? (errors / runMetrics.length) * 100 : 0;\n const ok = actual <= options.maxErrorRate;\n checks.push({\n id: \"maxErrorRate\",\n name: \"Max error rate\",\n ok,\n expected: options.maxErrorRate,\n actual: Math.round(actual * 10) / 10,\n message: ok\n ? `Error rate ${actual.toFixed(1)}% within limit ${options.maxErrorRate}%`\n : `Error rate ${actual.toFixed(1)}% exceeds limit ${options.maxErrorRate}%`,\n });\n }\n\n if (options.maxP95DurationMs !== undefined) {\n const durations = runMetrics\n .map((run) => run.durationMs)\n .filter((value): value is number => typeof value === \"number\");\n const actual = percentile(durations, 95);\n const ok = actual !== undefined && actual <= options.maxP95DurationMs;\n checks.push({\n id: \"maxP95Duration\",\n name: \"Max p95 duration (ms)\",\n ok,\n expected: options.maxP95DurationMs,\n actual: actual ?? \"n/a\",\n message:\n actual === undefined\n ? \"No duration samples available for p95 check.\"\n : ok\n ? `P95 duration ${Math.round(actual)} ms within limit ${options.maxP95DurationMs} ms`\n : `P95 duration ${Math.round(actual)} ms exceeds limit ${options.maxP95DurationMs} ms`,\n });\n }\n\n for (const tool of options.forbidTools ?? []) {\n let violated = false;\n for (const run of runMetrics) {\n const used =\n run.toolChoices.includes(tool) || run.toolOrdering.includes(tool);\n if (used) {\n violated = true;\n checks.push({\n id: \"forbidTool\",\n name: `Forbid tool: ${tool}`,\n ok: false,\n expected: `not used`,\n actual: \"used\",\n runId: run.runId,\n message: `Forbidden tool \"${tool}\" used in run ${run.runId}`,\n });\n }\n }\n if (!violated) {\n checks.push({\n id: \"forbidTool\",\n name: `Forbid tool: ${tool}`,\n ok: true,\n message: `Forbidden tool \"${tool}\" not used`,\n });\n }\n }\n\n for (const observation of options.requireObservations ?? []) {\n for (const run of runs) {\n if (run.filePath === undefined) continue;\n try {\n const status = await observationStatus(run.filePath, observation);\n const ok = status === \"passed\";\n checks.push({\n id: \"requireObservation\",\n name: `Require observation: ${observation}`,\n ok,\n expected: \"passed\",\n actual: status,\n runId: run.runId,\n message: ok\n ? `Observation \"${observation}\" passed in run ${run.runId}`\n : status === \"missing\"\n ? `Observation \"${observation}\" missing in run ${run.runId}`\n : `Observation \"${observation}\" failed in run ${run.runId}`,\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n readErrors.push(`Run ${run.runId}: ${message}`);\n }\n }\n }\n\n return { checks, readErrors };\n}\n\nexport function checksFromSuiteResult(\n suiteResult: import(\"../suite/types.js\").SuiteRunResult,\n): GateCheckResult[] {\n const checks: GateCheckResult[] = [\n {\n id: \"suite\",\n name: `Suite: ${suiteResult.suiteName}`,\n ok: suiteResult.ok,\n message: suiteResult.ok\n ? `Suite passed (${suiteResult.summary.passed} cases)`\n : `Suite failed (${suiteResult.summary.failed} failed, ${suiteResult.summary.errors} errors)`,\n },\n ];\n\n for (const suiteCase of suiteResult.cases) {\n if (suiteCase.status === \"pass\") continue;\n checks.push({\n id: \"suite\",\n name: `Case: ${suiteCase.id}`,\n ok: false,\n message: suiteCase.message ?? `Case status: ${suiteCase.status}`,\n });\n }\n\n return checks;\n}\n","import path from \"node:path\";\n\nimport { runSuite } from \"../suite/run.js\";\nimport type { GateCheckResult, GateExitCode, GateResult, RunGateOptions } from \"./types.js\";\nimport { checksFromSuiteResult, evaluateGateThresholds, gateHasThresholds } from \"./evaluate.js\";\n\nfunction resolveExitCode(input: {\n ok: boolean;\n configError: boolean;\n readError: boolean;\n}): GateExitCode {\n if (input.configError) return 2;\n if (input.readError) return 3;\n if (!input.ok) return 1;\n return 0;\n}\n\nfunction validateOptions(options: RunGateOptions): string[] {\n const errors: string[] = [];\n const hasSuite = options.suitePath !== undefined && options.suitePath.trim() !== \"\";\n const hasThresholds = gateHasThresholds(options);\n\n if (!hasSuite && !hasThresholds) {\n errors.push(\n \"No gate rules specified. Pass --suite or at least one threshold flag.\",\n );\n }\n\n if (hasThresholds && (options.traceDir === undefined || options.traceDir.trim() === \"\")) {\n if (!hasSuite) {\n errors.push(\"Threshold flags require --dir <trace-directory>.\");\n }\n }\n\n if (options.maxErrorRate !== undefined && options.maxErrorRate < 0) {\n errors.push(\"--max-error-rate must be a non-negative percentage.\");\n }\n if (options.maxErrorRate !== undefined && options.maxErrorRate > 100) {\n errors.push(\"--max-error-rate must be at most 100.\");\n }\n\n if (options.maxP95DurationMs !== undefined && options.maxP95DurationMs < 0) {\n errors.push(\"--max-p95-duration must be a non-negative millisecond value.\");\n }\n\n return errors;\n}\n\nfunction isConfigLoadError(error: unknown): boolean {\n if (!(error instanceof Error)) return false;\n const ext = path.extname(error.message);\n if (error.message.includes(\"Unsupported suite config extension\")) return true;\n if (error.message.includes(\"TypeScript suite configs require\")) return true;\n if (error.message.includes(\"No suite config found\")) return true;\n if (error.message.includes(\"AI_SUITE_CONFIG\")) return true;\n if (ext === \".ts\" || ext === \".mts\" || ext === \".cts\") return true;\n return \"diagnostics\" in error;\n}\n\nexport async function runGate(\n runs: readonly import(\"../sessions/types.js\").SessionRunRecord[],\n options: RunGateOptions,\n): Promise<GateResult> {\n const diagnostics: string[] = [];\n const checks: GateCheckResult[] = [];\n\n const validationErrors = validateOptions(options);\n if (validationErrors.length > 0) {\n return {\n ok: false,\n exitCode: 2,\n runCount: 0,\n checks,\n diagnostics: validationErrors,\n };\n }\n\n let traceDir = options.traceDir?.trim();\n let suiteResult: GateResult[\"suiteResult\"];\n\n if (options.suitePath !== undefined && options.suitePath.trim() !== \"\") {\n try {\n suiteResult = await runSuite({\n configPath: options.suitePath,\n cwd: options.cwd,\n });\n traceDir = traceDir ?? suiteResult.tracesDir;\n checks.push(...checksFromSuiteResult(suiteResult));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n diagnostics.push(message);\n return {\n ok: false,\n exitCode: isConfigLoadError(error) ? 2 : 3,\n traceDir,\n suitePath: options.suitePath,\n runCount: 0,\n checks,\n diagnostics,\n };\n }\n }\n\n if (gateHasThresholds(options)) {\n const thresholdDir = traceDir;\n if (thresholdDir === undefined || thresholdDir.trim() === \"\") {\n return {\n ok: false,\n exitCode: 2,\n traceDir,\n suitePath: options.suitePath,\n runCount: runs.length,\n checks,\n diagnostics: [\"Threshold evaluation requires a trace directory.\"],\n ...(suiteResult !== undefined ? { suiteResult } : {}),\n };\n }\n\n const thresholdRuns = runs.length > 0 ? runs : [];\n const { checks: thresholdChecks, readErrors } = await evaluateGateThresholds(\n thresholdRuns,\n options,\n );\n checks.push(...thresholdChecks);\n diagnostics.push(...readErrors);\n\n if (readErrors.length > 0) {\n const ok = checks.length > 0 && checks.every((item) => item.ok);\n return {\n ok,\n exitCode: resolveExitCode({\n ok,\n configError: false,\n readError: true,\n }),\n traceDir: thresholdDir,\n suitePath: options.suitePath,\n runCount: thresholdRuns.length,\n checks,\n diagnostics,\n ...(suiteResult !== undefined ? { suiteResult } : {}),\n };\n }\n }\n\n const ok = checks.length > 0 && checks.every((item) => item.ok);\n return {\n ok,\n exitCode: resolveExitCode({ ok, configError: false, readError: false }),\n traceDir,\n suitePath: options.suitePath,\n runCount: runs.length,\n checks,\n diagnostics,\n ...(suiteResult !== undefined ? { suiteResult } : {}),\n };\n}\n","import { escapeHtml } from \"../exporters/helpers.js\";\nimport type { GateResult, RenderGateReportOptions } from \"./types.js\";\n\nfunction escapeXml(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nexport function renderGateSummaryMarkdown(result: GateResult): string {\n const lines: string[] = [];\n lines.push(\"# AgentInspect gate\");\n lines.push(\"\");\n lines.push(`Status: **${result.ok ? \"PASS\" : \"FAIL\"}** (exit ${result.exitCode})`);\n if (result.traceDir !== undefined) {\n lines.push(`Trace directory: \\`${result.traceDir}\\``);\n }\n if (result.suitePath !== undefined) {\n lines.push(`Suite config: \\`${result.suitePath}\\``);\n }\n lines.push(`Runs evaluated: ${result.runCount}`);\n lines.push(\"\");\n\n if (result.diagnostics.length > 0) {\n lines.push(\"## Diagnostics\");\n for (const item of result.diagnostics) lines.push(`- ${item}`);\n lines.push(\"\");\n }\n\n lines.push(\"## Checks\");\n for (const check of result.checks) {\n const flag = check.ok ? \"PASS\" : \"FAIL\";\n lines.push(`- [${flag}] ${check.name}: ${check.message}`);\n }\n lines.push(\"\");\n\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderGateGithubStepSummary(result: GateResult): string {\n const lines: string[] = [];\n lines.push(`## AgentInspect gate: ${result.ok ? \"PASS\" : \"FAIL\"}`);\n lines.push(\"\");\n lines.push(\"| Check | Status | Details |\");\n lines.push(\"| --- | --- | --- |\");\n for (const check of result.checks) {\n lines.push(\n `| ${check.name} | ${check.ok ? \"pass\" : \"fail\"} | ${check.message.replace(/\\|/g, \"/\")} |`,\n );\n }\n if (result.diagnostics.length > 0) {\n lines.push(\"\");\n lines.push(\"**Diagnostics**\");\n for (const item of result.diagnostics) lines.push(`- ${item}`);\n }\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderGateReportHtml(result: GateResult): string {\n const rows = result.checks\n .map(\n (check) =>\n `<tr><td>${escapeHtml(check.name)}</td><td>${check.ok ? \"PASS\" : \"FAIL\"}</td><td>${escapeHtml(check.message)}</td></tr>`,\n )\n .join(\"\");\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\" />\n <title>Gate report</title>\n <style>\n body { font-family: system-ui, sans-serif; margin: 2rem; }\n table { border-collapse: collapse; width: 100%; }\n th, td { border: 1px solid #ddd; padding: 0.5rem; text-align: left; }\n th { background: #f6f6f6; }\n </style>\n</head>\n<body>\n <h1>AgentInspect gate</h1>\n <p>Status: <strong>${result.ok ? \"PASS\" : \"FAIL\"}</strong> (exit ${result.exitCode})</p>\n <h2>Checks</h2>\n <table>\n <thead><tr><th>Check</th><th>Status</th><th>Details</th></tr></thead>\n <tbody>${rows}</tbody>\n </table>\n</body>\n</html>`;\n}\n\nexport function renderGateJUnit(result: GateResult): string {\n const failures = result.checks.filter((check) => !check.ok).length;\n const tests = result.checks.length;\n const cases = result.checks\n .map((check) => {\n if (check.ok) {\n return ` <testcase name=\"${escapeXml(check.name)}\" classname=\"gate\" />`;\n }\n return ` <testcase name=\"${escapeXml(check.name)}\" classname=\"gate\">\n <failure message=\"${escapeXml(check.message)}\">${escapeXml(check.message)}</failure>\n </testcase>`;\n })\n .join(\"\\n\");\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites tests=\"${tests}\" failures=\"${failures}\" errors=\"0\" time=\"0\">\n <testsuite name=\"agent-inspect-gate\" tests=\"${tests}\" failures=\"${failures}\" errors=\"0\" time=\"0\">\n${cases}\n </testsuite>\n</testsuites>`;\n}\n\n/**\n * Compact GitHub Actions workflow-command annotations for failed checks.\n * File/line are omitted when the gate has no source locations (typical for\n * trajectory thresholds).\n */\nexport function renderGateGithubAnnotations(result: GateResult): string {\n return result.checks\n .filter((check) => !check.ok)\n .map((check) => {\n const message = check.message.replace(/\\r?\\n/g, \" \").replace(/%/g, \"%25\");\n return `::error title=${check.name}::${message}`;\n })\n .join(\"\\n\");\n}\n\nexport function renderGateReport(\n result: GateResult,\n options: RenderGateReportOptions = {},\n): string {\n const format = options.format ?? \"markdown\";\n if (format === \"json\") return JSON.stringify(result, null, 2);\n if (format === \"json-compact\") {\n return JSON.stringify({\n ok: result.ok,\n exitCode: result.exitCode,\n failed: result.checks.filter((check) => !check.ok).map((check) => check.name),\n checks: result.checks.map((check) => ({\n name: check.name,\n ok: check.ok,\n message: check.message,\n })),\n });\n }\n if (format === \"html\") return renderGateReportHtml(result);\n if (format === \"junit\") return renderGateJUnit(result);\n if (format === \"github\") return renderGateGithubStepSummary(result);\n if (format === \"github-annotations\") return renderGateGithubAnnotations(result);\n return renderGateSummaryMarkdown(result);\n}\n","/**\n * Optional omitted-payload digest commitment helpers (6.22; preflight bound in 6.25.1).\n *\n * A digest proves bytes were observed/omitted; it is not redaction, authorization,\n * or a secret-management feature. AgentInspect does not hold HMAC keys.\n *\n * @experimental Available through `agent-inspect/advanced`.\n */\n\nimport { createHash } from \"node:crypto\";\n\nexport type OmittedPayloadAlgorithm = \"sha256\";\n\n/**\n * Bounded commitment recorded when payload bytes are intentionally omitted.\n *\n * @experimental\n */\nexport interface OmittedPayloadCommitment {\n algorithm: OmittedPayloadAlgorithm;\n digest: string;\n byteLength: number;\n contentType?: string;\n shape?: string;\n capturePolicy: \"omitted\" | \"preview-only\" | \"digest-only\";\n}\n\n/** Maximum input size accepted for digest commitment (1 MiB). */\nexport const OMITTED_PAYLOAD_MAX_DIGEST_INPUT_BYTES = 1024 * 1024;\n\n/**\n * Preflight byte length without allocating a full Buffer copy for oversized input.\n */\nexport function omittedPayloadByteLength(payload: string | Uint8Array): number {\n if (typeof payload === \"string\") {\n return Buffer.byteLength(payload, \"utf8\");\n }\n return payload.byteLength;\n}\n\n/**\n * Build a SHA-256 digest commitment for omitted payload bytes.\n * Throws if input exceeds the 1 MiB bound (checked before copying oversized strings).\n */\nexport function createOmittedPayloadCommitment(\n payload: string | Uint8Array,\n options: {\n contentType?: string;\n shape?: string;\n capturePolicy?: OmittedPayloadCommitment[\"capturePolicy\"];\n } = {},\n): OmittedPayloadCommitment {\n const byteLength = omittedPayloadByteLength(payload);\n if (byteLength > OMITTED_PAYLOAD_MAX_DIGEST_INPUT_BYTES) {\n throw new RangeError(\n `Omitted payload exceeds ${OMITTED_PAYLOAD_MAX_DIGEST_INPUT_BYTES} byte digest bound.`,\n );\n }\n // Strings: only allocate after preflight. Uint8Array: hash without Buffer.from copy.\n const digest =\n typeof payload === \"string\"\n ? createHash(\"sha256\").update(Buffer.from(payload, \"utf8\")).digest(\"hex\")\n : createHash(\"sha256\").update(payload).digest(\"hex\");\n return {\n algorithm: \"sha256\",\n digest,\n byteLength,\n ...(options.contentType !== undefined ? { contentType: options.contentType } : {}),\n ...(options.shape !== undefined ? { shape: options.shape } : {}),\n capturePolicy: options.capturePolicy ?? \"digest-only\",\n };\n}\n"]}
|