agent-inspect 6.7.2 → 6.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +1 -1
- package/docs/EXPORTS.md +9 -0
- package/docs/PERFORMANCE.md +18 -0
- package/docs/STANDARDS.md +4 -0
- package/package.json +2 -2
- package/packages/cli/dist/{chunk-M6PC5KUT.mjs → chunk-EMYDJREA.mjs} +26 -10
- package/packages/cli/dist/chunk-EMYDJREA.mjs.map +1 -0
- package/packages/cli/dist/index.cjs +46 -21
- package/packages/cli/dist/index.cjs.map +1 -1
- package/packages/cli/dist/index.mjs +23 -14
- package/packages/cli/dist/index.mjs.map +1 -1
- package/packages/cli/dist/{src-27LC2BB3.mjs → src-IPJNFV37.mjs} +3 -3
- package/packages/cli/dist/{src-27LC2BB3.mjs.map → src-IPJNFV37.mjs.map} +1 -1
- package/packages/core/dist/advanced.cjs +24 -8
- package/packages/core/dist/advanced.cjs.map +1 -1
- package/packages/core/dist/advanced.mjs +25 -9
- package/packages/core/dist/advanced.mjs.map +1 -1
- package/packages/core/dist/checks.cjs +56 -4
- package/packages/core/dist/checks.cjs.map +1 -1
- package/packages/core/dist/checks.mjs +1 -1
- package/packages/core/dist/{chunk-EWHN6NA4.mjs → chunk-EQVXDGGU.mjs} +58 -6
- package/packages/core/dist/chunk-EQVXDGGU.mjs.map +1 -0
- package/packages/core/dist/diff.cjs +4 -0
- package/packages/core/dist/diff.cjs.map +1 -1
- package/packages/core/dist/diff.mjs +4 -0
- package/packages/core/dist/diff.mjs.map +1 -1
- package/packages/core/dist/exporters.cjs +9 -4
- package/packages/core/dist/exporters.cjs.map +1 -1
- package/packages/core/dist/exporters.d.cts +3 -2
- package/packages/core/dist/exporters.d.ts +3 -2
- package/packages/core/dist/exporters.mjs +9 -4
- package/packages/core/dist/exporters.mjs.map +1 -1
- package/packages/core/dist/logs.cjs +3 -2
- package/packages/core/dist/logs.cjs.map +1 -1
- package/packages/core/dist/logs.mjs +3 -2
- package/packages/core/dist/logs.mjs.map +1 -1
- package/packages/cli/dist/chunk-M6PC5KUT.mjs.map +0 -1
- package/packages/core/dist/chunk-EWHN6NA4.mjs.map +0 -1
|
@@ -71,8 +71,9 @@ interface OpenInferenceSpan {
|
|
|
71
71
|
span_id: string;
|
|
72
72
|
parent_span_id?: string;
|
|
73
73
|
name: string;
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
/** Decimal string: epoch-nanosecond values exceed Number.MAX_SAFE_INTEGER. */
|
|
75
|
+
start_time_unix_nano: string;
|
|
76
|
+
end_time_unix_nano?: string;
|
|
76
77
|
attributes: Record<string, unknown>;
|
|
77
78
|
status?: {
|
|
78
79
|
code: "OK" | "ERROR" | "UNSET";
|
|
@@ -71,8 +71,9 @@ interface OpenInferenceSpan {
|
|
|
71
71
|
span_id: string;
|
|
72
72
|
parent_span_id?: string;
|
|
73
73
|
name: string;
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
/** Decimal string: epoch-nanosecond values exceed Number.MAX_SAFE_INTEGER. */
|
|
75
|
+
start_time_unix_nano: string;
|
|
76
|
+
end_time_unix_nano?: string;
|
|
76
77
|
attributes: Record<string, unknown>;
|
|
77
78
|
status?: {
|
|
78
79
|
code: "OK" | "ERROR" | "UNSET";
|
|
@@ -520,6 +520,11 @@ function exportMarkdown(tree, options) {
|
|
|
520
520
|
function hexFrom(seed, byteLen) {
|
|
521
521
|
return crypto.createHash("sha256").update(seed, "utf8").digest("hex").slice(0, byteLen * 2);
|
|
522
522
|
}
|
|
523
|
+
function unixNano(ms) {
|
|
524
|
+
const whole = Math.trunc(ms);
|
|
525
|
+
const fractionNs = Math.round((ms - whole) * 1e6);
|
|
526
|
+
return BigInt(whole) * 1000000n + BigInt(fractionNs);
|
|
527
|
+
}
|
|
523
528
|
function mapInspectKindToOI(kind, warnings) {
|
|
524
529
|
switch (kind) {
|
|
525
530
|
case "LLM":
|
|
@@ -569,10 +574,10 @@ function exportOpenInference(tree, options) {
|
|
|
569
574
|
const ev = n.event;
|
|
570
575
|
const spanId = hexFrom(`${tree.runId}:${ev.eventId}`, 8);
|
|
571
576
|
const parentSpanHex = ev.parentId ? hexFrom(`${tree.runId}:${ev.parentId}`, 8) : void 0;
|
|
572
|
-
const startNs =
|
|
577
|
+
const startNs = unixNano(ev.timestamp);
|
|
573
578
|
let endNs;
|
|
574
579
|
if (ev.durationMs !== void 0 && Number.isFinite(ev.durationMs)) {
|
|
575
|
-
endNs = startNs +
|
|
580
|
+
endNs = startNs + unixNano(ev.durationMs);
|
|
576
581
|
}
|
|
577
582
|
const { openInferenceKind } = mapInspectKindToOI(ev.kind, warnings);
|
|
578
583
|
const attrs = {
|
|
@@ -620,8 +625,8 @@ function exportOpenInference(tree, options) {
|
|
|
620
625
|
span_id: spanId,
|
|
621
626
|
parent_span_id: parentSpanHex,
|
|
622
627
|
name: ev.name,
|
|
623
|
-
start_time_unix_nano: startNs,
|
|
624
|
-
end_time_unix_nano: endNs,
|
|
628
|
+
start_time_unix_nano: startNs.toString(),
|
|
629
|
+
end_time_unix_nano: endNs?.toString(),
|
|
625
630
|
attributes: attrs,
|
|
626
631
|
status
|
|
627
632
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/exporters/types.ts","../src/exporters/redact-export.ts","../src/exporters/html-exporter.ts","../src/exporters/markdown-exporter.ts","../src/exporters/openinference-exporter.ts","../src/exporters/otlp-json-exporter.ts","../src/exporters/validation.ts","../src/exporters/manual-trace-adapter.ts","../src/exporters/fixtures.ts","../src/exporters/semantic-validation.ts","../src/exporters/semconv.ts","../src/exporters/index.ts","../src/report.ts"],"names":["hexFrom","crypto","title"],"mappings":"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","file":"exporters.mjs","sourcesContent":["/**\n * v0.7 local export formats. No sinks — string output only.\n */\n\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\nimport type { RedactionProfile } from \"../types.js\";\n\nexport type ExportFormat = \"markdown\" | \"html\" | \"openinference\" | \"otlp-json\";\n\nexport interface ExportOptions {\n format: ExportFormat;\n includeMetadata?: boolean;\n includeAttributes?: boolean;\n includeErrors?: boolean;\n pretty?: boolean;\n redacted?: boolean;\n maxAttributeLength?: number;\n /**\n * Redaction preset for exported copies. Default `local`.\n * `share` and `strict` apply stronger key-based redaction before rendering.\n */\n redactionProfile?: RedactionProfile;\n}\n\nexport interface ExportResult {\n format: ExportFormat;\n content: string;\n contentType: string;\n fileExtension: string;\n warnings: string[];\n}\n\nexport interface ExportValidationResult {\n ok: boolean;\n format: ExportFormat;\n errors: string[];\n warnings: string[];\n}\n\nexport interface TraceExporter {\n name: string;\n format: ExportFormat;\n export(tree: InspectRunTree, options?: Partial<ExportOptions>): ExportResult;\n validate?(content: string): ExportValidationResult;\n}\n\n/** Library version string embedded in JSON exports (human-readable, not semver guarantee for formats). */\nexport const EXPORT_PAYLOAD_VERSION = \"0.1.2\";\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport { Redactor } from \"../logs/redactor.js\";\nimport {\n applyProfileMetadataCaps,\n resolveRedactionProfile,\n truncateStringForProfile,\n} from \"../redaction-profiles.js\";\nimport type { ErrorInfo, RedactionProfile, TraceEvent } from \"../types.js\";\n\nexport interface RedactRunTreeForExportOptions {\n redactionProfile?: RedactionProfile;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction deepClone<T>(value: T): T {\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((item) => deepClone(item)) as T;\n }\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[k] = deepClone(v);\n }\n return out as T;\n}\n\nfunction boundAttributeValues(\n record: Record<string, unknown>,\n maxMetadataValueLength: number,\n maxPreviewLength: number,\n seen: WeakSet<object>,\n depth: number,\n): Record<string, unknown> {\n if (depth > 32) {\n return { truncated: true, reason: \"maxDepth\" };\n }\n\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n out[key] = boundValue(value, key, maxMetadataValueLength, maxPreviewLength, seen, depth);\n }\n return out;\n}\n\nfunction boundValue(\n value: unknown,\n key: string,\n maxMetadataValueLength: number,\n maxPreviewLength: number,\n seen: WeakSet<object>,\n depth: number,\n): unknown {\n if (value === null || typeof value !== \"object\") {\n if (typeof value === \"string\") {\n return truncateStringForProfile(\n value,\n key,\n maxMetadataValueLength,\n maxPreviewLength,\n );\n }\n return value;\n }\n\n if (seen.has(value)) return \"[Circular]\";\n seen.add(value);\n\n if (Array.isArray(value)) {\n return value\n .slice(0, 50)\n .map((item, index) =>\n boundValue(\n item,\n String(index),\n maxMetadataValueLength,\n maxPreviewLength,\n seen,\n depth + 1,\n ),\n );\n }\n\n return boundAttributeValues(\n value as Record<string, unknown>,\n maxMetadataValueLength,\n maxPreviewLength,\n seen,\n depth + 1,\n );\n}\n\nfunction redactEventAttributes(\n attrs: Record<string, unknown> | undefined,\n redactor: Redactor,\n maxMetadataValueLength: number,\n maxPreviewLength: number,\n): Record<string, unknown> | undefined {\n if (!attrs || Object.keys(attrs).length === 0) {\n return attrs;\n }\n\n const redacted = redactor.redactRecord(attrs);\n const seen = new WeakSet<object>();\n const bounded = boundAttributeValues(\n redacted,\n maxMetadataValueLength,\n maxPreviewLength,\n seen,\n 0,\n );\n\n const err = bounded.error;\n if (isRecord(err) && typeof err.message === \"string\") {\n bounded.error = {\n ...err,\n message: truncateStringForProfile(\n err.message,\n \"message\",\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n ...(typeof err.stack === \"string\"\n ? {\n stack: truncateStringForProfile(\n err.stack,\n \"stack\",\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n }\n : {}),\n };\n }\n\n return bounded;\n}\n\nfunction redactErrorInfo(\n error: ErrorInfo | undefined,\n redactor: Redactor,\n maxMetadataValueLength: number,\n maxPreviewLength: number,\n): ErrorInfo | undefined {\n if (error === undefined) return undefined;\n\n const record = redactEventAttributes(\n { error },\n redactor,\n maxMetadataValueLength,\n maxPreviewLength,\n );\n const redacted = record?.error;\n if (!isRecord(redacted) || typeof redacted.message !== \"string\") {\n return undefined;\n }\n\n return {\n message: redacted.message,\n ...(typeof redacted.stack === \"string\" ? { stack: redacted.stack } : {}),\n };\n}\n\n/**\n * Returns structured trace-event copies that are safe to use across every report section.\n * Profile redaction and bounds are applied before any human-readable rendering.\n */\nexport function redactTraceEventsForReport(\n events: readonly TraceEvent[],\n options?: RedactRunTreeForExportOptions,\n): TraceEvent[] {\n const profile = options?.redactionProfile ?? \"local\";\n if (profile === \"local\") {\n return deepClone(events) as TraceEvent[];\n }\n\n const resolved = resolveRedactionProfile(profile);\n const { maxMetadataValueLength, maxPreviewLength } = applyProfileMetadataCaps(\n 2000,\n 500,\n resolved,\n );\n const redactor = new Redactor({ extraKeys: resolved.extraKeys });\n\n return events.map((event): TraceEvent => {\n switch (event.event) {\n case \"run_started\":\n return {\n ...event,\n name: truncateStringForProfile(\n event.name,\n \"name\",\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n ...(event.metadata !== undefined\n ? {\n metadata: redactEventAttributes(\n event.metadata,\n redactor,\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n }\n : {}),\n };\n case \"step_started\":\n return {\n ...event,\n name: truncateStringForProfile(\n event.name,\n \"name\",\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n ...(event.metadata !== undefined\n ? {\n metadata: redactEventAttributes(\n event.metadata,\n redactor,\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n }\n : {}),\n };\n case \"run_completed\":\n case \"step_completed\":\n return {\n ...event,\n ...(event.error !== undefined\n ? {\n error: redactErrorInfo(\n event.error,\n redactor,\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n }\n : {}),\n };\n case \"outcome_observed\": {\n const actualAttrs =\n event.actual !== undefined\n ? redactEventAttributes(\n { value: event.actual },\n redactor,\n maxMetadataValueLength,\n maxPreviewLength,\n )\n : undefined;\n const redactedActual =\n actualAttrs !== undefined && \"value\" in actualAttrs\n ? actualAttrs.value\n : undefined;\n const redactedEvidence =\n event.evidence !== undefined\n ? redactEventAttributes(\n isRecord(event.evidence) ? event.evidence : { value: event.evidence },\n redactor,\n maxMetadataValueLength,\n maxPreviewLength,\n )\n : undefined;\n return {\n ...event,\n name: truncateStringForProfile(\n event.name,\n \"name\",\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n expectation: truncateStringForProfile(\n event.expectation,\n \"expectation\",\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n ...(redactedActual !== undefined ? { actual: redactedActual } : {}),\n ...(redactedEvidence !== undefined ? { evidence: redactedEvidence } : {}),\n };\n }\n default:\n return event;\n }\n });\n}\n\n/**\n * Returns a deep copy of `tree` with profile-based redaction applied to event attributes.\n * Does not mutate the input tree.\n */\nexport function redactRunTreeForExport(\n tree: InspectRunTree,\n options?: RedactRunTreeForExportOptions,\n): InspectRunTree {\n const profile = options?.redactionProfile ?? \"local\";\n if (profile === \"local\") {\n return deepClone(tree);\n }\n\n const resolved = resolveRedactionProfile(profile);\n const { maxMetadataValueLength, maxPreviewLength } = applyProfileMetadataCaps(\n 2000,\n 500,\n resolved,\n );\n const redactor = new Redactor({ extraKeys: resolved.extraKeys });\n\n const clone = deepClone(tree);\n\n function walk(nodes: InspectNode[]): void {\n for (const node of nodes) {\n if (node.event.attributes !== undefined) {\n node.event.attributes = redactEventAttributes(\n node.event.attributes,\n redactor,\n maxMetadataValueLength,\n maxPreviewLength,\n );\n }\n if (node.children.length > 0) {\n walk(node.children);\n }\n }\n }\n\n walk(clone.children);\n return clone;\n}\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult } from \"./types.js\";\nimport {\n compactAttributes,\n escapeHtml,\n flattenTree,\n safeString,\n stableJson,\n} from \"./helpers.js\";\n\nfunction renderTreeHtml(nodes: InspectNode[], ulClass = \"tree\"): string {\n if (nodes.length === 0) return \"\";\n const parts: string[] = [`<ul class=\"${ulClass}\">`];\n for (const n of nodes) {\n const ev = n.event;\n const status = ev.status ?? \"?\";\n const dur =\n ev.durationMs !== undefined && Number.isFinite(ev.durationMs)\n ? `${ev.durationMs}ms`\n : \"-\";\n parts.push(\"<li>\");\n parts.push(\n `<span class=\"nm\">${escapeHtml(ev.name)}</span> <span class=\"meta\">[${escapeHtml(ev.kind)}] ${escapeHtml(status)} (${escapeHtml(dur)})</span>`,\n );\n if (n.children.length > 0) {\n parts.push(renderTreeHtml(n.children, \"tree nested\"));\n }\n parts.push(\"</li>\");\n }\n parts.push(\"</ul>\");\n return parts.join(\"\");\n}\n\nexport function exportHtml(tree: InspectRunTree, options?: Partial<ExportOptions>): ExportResult {\n const warnings: string[] = [];\n const includeMetadata = options?.includeMetadata ?? true;\n const includeAttributes = options?.includeAttributes ?? false;\n const includeErrors = options?.includeErrors ?? true;\n const maxLen = options?.maxAttributeLength ?? 500;\n const redacted = options?.redacted ?? true;\n\n const titleName = escapeHtml(tree.name ?? tree.runId);\n\n const summaryRows: string[] = [];\n summaryRows.push(\n `<tr><th scope=\"row\">runId</th><td><code>${escapeHtml(tree.runId)}</code></td></tr>`,\n );\n if (tree.name !== undefined) {\n summaryRows.push(`<tr><th scope=\"row\">name</th><td>${escapeHtml(tree.name)}</td></tr>`);\n }\n summaryRows.push(\n `<tr><th scope=\"row\">status</th><td>${escapeHtml(String(tree.status ?? \"unknown\"))}</td></tr>`,\n );\n summaryRows.push(\n `<tr><th scope=\"row\">durationMs</th><td>${tree.durationMs !== undefined ? escapeHtml(String(tree.durationMs)) : \"—\"}</td></tr>`,\n );\n summaryRows.push(\n `<tr><th scope=\"row\">startedAt</th><td>${tree.startedAt !== undefined ? escapeHtml(String(tree.startedAt)) : \"—\"}</td></tr>`,\n );\n summaryRows.push(\n `<tr><th scope=\"row\">endedAt</th><td>${tree.endedAt !== undefined ? escapeHtml(String(tree.endedAt)) : \"—\"}</td></tr>`,\n );\n summaryRows.push(\n `<tr><th scope=\"row\">totalEvents</th><td>${escapeHtml(String(tree.metadata.totalEvents))}</td></tr>`,\n );\n\n let confidenceHtml = \"\";\n if (includeMetadata) {\n const cb = tree.metadata.confidenceBreakdown;\n confidenceHtml += \"<h3>Confidence breakdown</h3><table><thead><tr><th>bucket</th><th>count</th></tr></thead><tbody>\";\n for (const k of Object.keys(cb).sort()) {\n const key = k as keyof typeof cb;\n confidenceHtml += `<tr><td>${escapeHtml(key)}</td><td>${cb[key]}</td></tr>`;\n }\n confidenceHtml += \"</tbody></table>\";\n\n confidenceHtml += \"<h3>Kind breakdown</h3><table><thead><tr><th>kind</th><th>count</th></tr></thead><tbody>\";\n for (const k of Object.keys(tree.metadata.kinds).sort()) {\n const key = k as keyof typeof tree.metadata.kinds;\n const c = tree.metadata.kinds[key];\n if (c > 0) confidenceHtml += `<tr><td>${escapeHtml(key)}</td><td>${c}</td></tr>`;\n }\n confidenceHtml += \"</tbody></table>\";\n }\n\n const flat = flattenTree(tree);\n const errors = flat.filter((n) => n.event.status === \"error\");\n let errorsHtml = \"\";\n if (includeErrors && errors.length > 0) {\n errorsHtml += \"<h2>Errors</h2><ul>\";\n for (const n of errors) {\n const msg =\n n.event.attributes && typeof n.event.attributes.error === \"object\"\n ? safeString(\n (n.event.attributes.error as { message?: string }).message,\n maxLen,\n )\n : \"\";\n errorsHtml += `<li><strong>${escapeHtml(n.event.name)}</strong> (${escapeHtml(n.event.eventId)}): ${escapeHtml(msg || \"error\")}</li>`;\n }\n errorsHtml += \"</ul>\";\n }\n\n let attrsHtml = \"\";\n if (includeAttributes) {\n attrsHtml += \"<h2>Attributes (bounded)</h2>\";\n for (const n of flat) {\n if (!n.event.attributes || Object.keys(n.event.attributes).length === 0) continue;\n const compact = compactAttributes(n.event.attributes, {\n maxLength: maxLen,\n redacted,\n });\n attrsHtml += `<h3>${escapeHtml(n.event.name)}</h3><pre class=\"json\">${escapeHtml(stableJson(compact, true))}</pre>`;\n }\n warnings.push(\n \"Attributes may still contain sensitive data; review exports before sharing.\",\n );\n }\n\n const css = `\nbody{font-family:system-ui,sans-serif;line-height:1.5;margin:1.5rem;max-width:960px;color:#111}\nh1{font-size:1.35rem}\nh2{font-size:1.1rem;margin-top:1.5rem}\ntable{border-collapse:collapse;margin:0.75rem 0}\nth,td{border:1px solid #ccc;padding:0.35rem 0.6rem;text-align:left}\nth{background:#f5f5f5}\npre.json{background:#f8f8f8;padding:0.75rem;overflow:auto;font-size:0.85rem}\nul.tree{list-style:none;padding-left:1rem}\nul.tree.nested{padding-left:1.25rem;border-left:1px solid #ddd;margin:0.25rem 0}\n.nm{font-weight:600}\n.meta{color:#555;font-size:0.9rem}\nfooter{margin-top:2rem;font-size:0.85rem;color:#555}\n`.trim();\n\n const html = `<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>${titleName}</title>\n<style>${css}</style>\n</head>\n<body>\n<header><h1>AgentInspect Run: ${titleName}</h1></header>\n<p class=\"note\">Generated locally by AgentInspect.</p>\n${includeMetadata ? `<section class=\"summary\"><h2>Summary</h2><table>${summaryRows.join(\"\")}</table>${confidenceHtml}</section>` : \"\"}\n<section class=\"tree\"><h2>Execution tree</h2>${tree.children.length > 0 ? renderTreeHtml(tree.children) : \"<p>No steps recorded.</p>\"}</section>\n${errorsHtml}\n${attrsHtml}\n<footer>Generated locally by AgentInspect. Review for sensitive data before sharing.</footer>\n</body>\n</html>`;\n\n return {\n format: \"html\",\n content: html,\n contentType: \"text/html\",\n fileExtension: \".html\",\n warnings,\n };\n}\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult } from \"./types.js\";\nimport {\n compactAttributes,\n escapeMarkdown,\n flattenTree,\n safeString,\n stableJson,\n} from \"./helpers.js\";\n\nfunction renderTreeAscii(nodes: InspectNode[], indent = \"\"): string {\n const lines: string[] = [];\n for (let i = 0; i < nodes.length; i++) {\n const n = nodes[i]!;\n const last = i === nodes.length - 1;\n const branch = last ? \"└─ \" : \"├─ \";\n const ev = n.event;\n const status = ev.status ?? \"?\";\n const dur =\n ev.durationMs !== undefined && Number.isFinite(ev.durationMs)\n ? `${ev.durationMs}ms`\n : \"-\";\n lines.push(`${indent}${branch}${escapeMarkdown(ev.name)} [${ev.kind}] ${status} (${dur})`);\n const nextIndent = indent + (last ? \" \" : \"│ \");\n if (n.children.length > 0) {\n const childStr = renderTreeAscii(n.children, nextIndent);\n if (childStr.length > 0) lines.push(childStr);\n }\n }\n return lines.join(\"\\n\");\n}\n\nexport function exportMarkdown(\n tree: InspectRunTree,\n options?: Partial<ExportOptions>,\n): ExportResult {\n const warnings: string[] = [];\n const includeMetadata = options?.includeMetadata ?? true;\n const includeAttributes = options?.includeAttributes ?? false;\n const includeErrors = options?.includeErrors ?? true;\n const maxLen = options?.maxAttributeLength ?? 500;\n const redacted = options?.redacted ?? true;\n\n const titleName = tree.name ?? tree.runId;\n const lines: string[] = [];\n lines.push(`# AgentInspect Run: ${escapeMarkdown(titleName)}`);\n lines.push(\"\");\n lines.push(\"Generated locally by AgentInspect. Review for sensitive data before sharing.\");\n lines.push(\"\");\n\n if (includeMetadata) {\n lines.push(\"## Summary\");\n lines.push(\"\");\n lines.push(`- **runId**: ${escapeMarkdown(tree.runId)}`);\n if (tree.name !== undefined) lines.push(`- **name**: ${escapeMarkdown(tree.name)}`);\n lines.push(`- **status**: ${escapeMarkdown(String(tree.status ?? \"unknown\"))}`);\n lines.push(\n `- **durationMs**: ${tree.durationMs !== undefined ? escapeMarkdown(String(tree.durationMs)) : \"-\"}`,\n );\n lines.push(\n `- **startedAt**: ${tree.startedAt !== undefined ? escapeMarkdown(String(tree.startedAt)) : \"-\"}`,\n );\n lines.push(\n `- **endedAt**: ${tree.endedAt !== undefined ? escapeMarkdown(String(tree.endedAt)) : \"-\"}`,\n );\n lines.push(`- **totalEvents**: ${tree.metadata.totalEvents}`);\n lines.push(\"\");\n lines.push(\"### Confidence breakdown\");\n lines.push(\"\");\n lines.push(\"| bucket | count |\");\n lines.push(\"| --- | --- |\");\n for (const k of Object.keys(tree.metadata.confidenceBreakdown).sort()) {\n const key = k as keyof typeof tree.metadata.confidenceBreakdown;\n lines.push(\n `| ${escapeMarkdown(key)} | ${tree.metadata.confidenceBreakdown[key]} |`,\n );\n }\n lines.push(\"\");\n lines.push(\"### Kind breakdown\");\n lines.push(\"\");\n lines.push(\"| kind | count |\");\n lines.push(\"| --- | --- |\");\n for (const k of Object.keys(tree.metadata.kinds).sort()) {\n const key = k as keyof typeof tree.metadata.kinds;\n const c = tree.metadata.kinds[key];\n if (c > 0) lines.push(`| ${escapeMarkdown(key)} | ${c} |`);\n }\n lines.push(\"\");\n }\n\n lines.push(\"## Execution tree\");\n lines.push(\"\");\n lines.push(\"```text\");\n lines.push(\n tree.children.length > 0 ? renderTreeAscii(tree.children) : \"(no steps)\",\n );\n lines.push(\"```\");\n lines.push(\"\");\n\n const flat = flattenTree(tree);\n const errors = flat.filter((n) => n.event.status === \"error\");\n if (includeErrors && errors.length > 0) {\n lines.push(\"## Errors\");\n lines.push(\"\");\n for (const n of errors) {\n const msg =\n n.event.attributes && typeof n.event.attributes.error === \"object\"\n ? safeString(\n (n.event.attributes.error as { message?: string }).message,\n maxLen,\n )\n : \"\";\n lines.push(\n `- **${escapeMarkdown(n.event.name)}** (${escapeMarkdown(n.event.eventId)}): ${escapeMarkdown(msg || \"error\")}`,\n );\n }\n lines.push(\"\");\n }\n\n if (includeAttributes) {\n lines.push(\"## Attributes (bounded)\");\n lines.push(\"\");\n for (const n of flat) {\n if (!n.event.attributes || Object.keys(n.event.attributes).length === 0) continue;\n const compact = compactAttributes(n.event.attributes, {\n maxLength: maxLen,\n redacted,\n });\n lines.push(`### ${escapeMarkdown(n.event.name)}`);\n lines.push(\"\");\n lines.push(\"```json\");\n lines.push(stableJson(compact, true));\n lines.push(\"```\");\n lines.push(\"\");\n }\n warnings.push(\n \"Attributes may still contain sensitive data; review exports before sharing.\",\n );\n }\n\n return {\n format: \"markdown\",\n content: lines.join(\"\\n\"),\n contentType: \"text/markdown\",\n fileExtension: \".md\",\n warnings,\n };\n}\n","import crypto from \"node:crypto\";\n\nimport type { InspectKind, InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult } from \"./types.js\";\nimport { EXPORT_PAYLOAD_VERSION } from \"./types.js\";\nimport { flattenTree } from \"./helpers.js\";\n\nexport interface OpenInferenceSpan {\n trace_id: string;\n span_id: string;\n parent_span_id?: string;\n name: string;\n start_time_unix_nano: number;\n end_time_unix_nano?: number;\n attributes: Record<string, unknown>;\n status?: {\n code: \"OK\" | \"ERROR\" | \"UNSET\";\n message?: string;\n };\n}\n\nexport interface OpenInferenceExport {\n exporter: \"agent-inspect\";\n format: \"openinference\";\n compatibility: \"openinference-compatible\";\n version: string;\n trace_id: string;\n spans: OpenInferenceSpan[];\n warnings: string[];\n}\n\nfunction hexFrom(seed: string, byteLen: number): string {\n return crypto.createHash(\"sha256\").update(seed, \"utf8\").digest(\"hex\").slice(0, byteLen * 2);\n}\n\nfunction mapInspectKindToOI(\n kind: InspectKind,\n warnings: string[],\n): { openInferenceKind: string; ambiguousNote?: string } {\n switch (kind) {\n case \"LLM\":\n return { openInferenceKind: \"LLM\" };\n case \"TOOL\":\n return { openInferenceKind: \"TOOL\" };\n case \"CHAIN\":\n return { openInferenceKind: \"CHAIN\" };\n case \"RETRIEVER\":\n return { openInferenceKind: \"RETRIEVER\" };\n case \"AGENT\":\n return { openInferenceKind: \"AGENT\" };\n case \"DECISION\":\n warnings.push(\n `Ambiguous kind DECISION mapped to CHAIN for span compatibility (${EXPORT_PAYLOAD_VERSION}).`,\n );\n return { openInferenceKind: \"CHAIN\" };\n case \"RESULT\":\n warnings.push(\n `Ambiguous kind RESULT mapped to UNKNOWN for span compatibility (${EXPORT_PAYLOAD_VERSION}).`,\n );\n return { openInferenceKind: \"UNKNOWN\" };\n case \"ERROR\":\n warnings.push(`ERROR kind mapped to CHAIN for span compatibility.`);\n return { openInferenceKind: \"CHAIN\" };\n case \"LOG\":\n case \"LOGIC\":\n case \"RUN\":\n warnings.push(`${kind} mapped to CHAIN for span compatibility.`);\n return { openInferenceKind: \"CHAIN\" };\n default:\n warnings.push(`Unhandled InspectKind ${kind} mapped to UNKNOWN.`);\n return { openInferenceKind: \"UNKNOWN\" };\n }\n}\n\nexport function exportOpenInference(\n tree: InspectRunTree,\n options?: Partial<ExportOptions>,\n): ExportResult {\n const warnings: string[] = [\n \"OpenInference-compatible JSON export is experimental until verified against specific backends.\",\n \"This file was generated locally and not sent anywhere.\",\n ];\n\n const traceId = hexFrom(`trace:${tree.runId}`, 16);\n const includeAttributes = options?.includeAttributes ?? false;\n const maxLen = options?.maxAttributeLength ?? 500;\n const pretty = options?.pretty ?? true;\n\n const spans: OpenInferenceSpan[] = [];\n\n for (const n of flattenTree(tree)) {\n const ev = n.event;\n const spanId = hexFrom(`${tree.runId}:${ev.eventId}`, 8);\n const parentSpanHex = ev.parentId\n ? hexFrom(`${tree.runId}:${ev.parentId}`, 8)\n : undefined;\n const startNs = Math.round(ev.timestamp * 1e6);\n let endNs: number | undefined;\n if (ev.durationMs !== undefined && Number.isFinite(ev.durationMs)) {\n endNs = startNs + Math.round(ev.durationMs * 1e6);\n }\n\n const { openInferenceKind } = mapInspectKindToOI(ev.kind, warnings);\n\n const attrs: Record<string, unknown> = {\n \"openinference.span.kind\": openInferenceKind,\n \"agent_inspect.kind\": ev.kind,\n \"agent_inspect.confidence\": ev.confidence,\n \"agent_inspect.source.type\": ev.source.type,\n \"agent_inspect.run_id\": tree.runId,\n \"agent_inspect.event_id\": ev.eventId,\n \"agent_inspect.status\": ev.status ?? \"unset\",\n };\n if (ev.durationMs !== undefined) {\n attrs[\"agent_inspect.duration_ms\"] = ev.durationMs;\n }\n\n const meta = ev.attributes;\n if (meta?.model !== undefined && typeof meta.model === \"string\") {\n attrs[\"llm.model_name\"] = meta.model;\n }\n const tokens = meta?.tokens;\n if (tokens && typeof tokens === \"object\" && tokens !== null) {\n const inp = (tokens as { input?: number }).input;\n const outp = (tokens as { output?: number }).output;\n if (typeof inp === \"number\") attrs[\"llm.token_count.prompt\"] = inp;\n if (typeof outp === \"number\") attrs[\"llm.token_count.completion\"] = outp;\n }\n\n if (includeAttributes && meta && typeof meta === \"object\") {\n for (const [k, v] of Object.entries(meta)) {\n if (k === \"tokens\" || k === \"model\") continue;\n if (v !== undefined && v !== null && typeof v !== \"object\") {\n attrs[`agent_inspect.preview.${k}`] =\n typeof v === \"string\" ? v.slice(0, maxLen) : v;\n }\n }\n }\n\n let status: OpenInferenceSpan[\"status\"];\n if (ev.status === \"error\") {\n const msg =\n meta && typeof meta.error === \"object\" && meta.error !== null\n ? String((meta.error as { message?: string }).message ?? \"error\")\n : \"error\";\n status = { code: \"ERROR\", message: msg.slice(0, maxLen) };\n } else if (ev.status === \"ok\") {\n status = { code: \"OK\" };\n } else {\n status = { code: \"UNSET\" };\n }\n\n spans.push({\n trace_id: traceId,\n span_id: spanId,\n parent_span_id: parentSpanHex,\n name: ev.name,\n start_time_unix_nano: startNs,\n end_time_unix_nano: endNs,\n attributes: attrs,\n status,\n });\n }\n\n const payload: OpenInferenceExport = {\n exporter: \"agent-inspect\",\n format: \"openinference\",\n compatibility: \"openinference-compatible\",\n version: EXPORT_PAYLOAD_VERSION,\n trace_id: traceId,\n spans,\n warnings,\n };\n\n return {\n format: \"openinference\",\n content: JSON.stringify(payload, null, pretty ? 2 : undefined),\n contentType: \"application/json\",\n fileExtension: \".openinference.json\",\n warnings,\n };\n}\n","import crypto from \"node:crypto\";\n\nimport type { InspectKind } from \"../types/inspect-event.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult } from \"./types.js\";\nimport { flattenTree } from \"./helpers.js\";\n\nfunction hexFrom(seed: string, byteLen: number): string {\n return crypto.createHash(\"sha256\").update(seed, \"utf8\").digest(\"hex\").slice(0, byteLen * 2);\n}\n\nfunction stringAttr(key: string, value: string): { key: string; value: { stringValue: string } } {\n return { key, value: { stringValue: value } };\n}\n\nfunction intAttr(key: string, value: number): { key: string; value: { intValue: string } } {\n return { key, value: { intValue: String(value) } };\n}\n\ntype OtlpAttr =\n | ReturnType<typeof stringAttr>\n | ReturnType<typeof intAttr>;\n\nfunction genAiOperationName(kind: InspectKind): string | undefined {\n switch (kind) {\n case \"LLM\":\n return \"generate_content\";\n case \"TOOL\":\n return \"execute_tool\";\n case \"AGENT\":\n return \"invoke_agent\";\n default:\n return undefined;\n }\n}\n\nexport function exportOtlpJson(\n tree: InspectRunTree,\n options?: Partial<ExportOptions>,\n): ExportResult {\n const warnings: string[] = [\n \"OTLP JSON export uses OTel GenAI-aligned attributes where applicable; experimental until verified against specific collectors.\",\n \"Not OTLP gRPC/protobuf — JSON mapping only. Generated locally; no network upload.\",\n ];\n\n const traceId = hexFrom(`trace:${tree.runId}`, 16);\n const includeAttributes = options?.includeAttributes ?? false;\n const maxLen = options?.maxAttributeLength ?? 500;\n const pretty = options?.pretty ?? true;\n\n const flat = flattenTree(tree);\n const spans: Record<string, unknown>[] = [];\n\n for (const n of flat) {\n const ev = n.event;\n const spanId = hexFrom(`${tree.runId}:${ev.eventId}`, 8);\n const parentSpanId = ev.parentId\n ? hexFrom(`${tree.runId}:${ev.parentId}`, 8)\n : undefined;\n\n const startNs = String(Math.round(ev.timestamp * 1e6));\n let endNs: string | undefined;\n if (ev.durationMs !== undefined && Number.isFinite(ev.durationMs)) {\n endNs = String(Math.round(ev.timestamp * 1e6 + ev.durationMs * 1e6));\n }\n\n const attrs: OtlpAttr[] = [\n stringAttr(\"agent_inspect.kind\", ev.kind),\n stringAttr(\"agent_inspect.confidence\", ev.confidence),\n stringAttr(\"agent_inspect.source.type\", ev.source.type),\n stringAttr(\"agent_inspect.run_id\", tree.runId),\n stringAttr(\"agent_inspect.event_id\", ev.eventId),\n stringAttr(\"agent_inspect.status\", ev.status ?? \"unset\"),\n ];\n\n if (ev.durationMs !== undefined) {\n attrs.push(intAttr(\"agent_inspect.duration_ms\", ev.durationMs));\n }\n\n const op = genAiOperationName(ev.kind);\n if (op !== undefined) {\n attrs.push(stringAttr(\"gen_ai.operation.name\", op));\n }\n\n const meta = ev.attributes;\n if (meta?.model !== undefined && typeof meta.model === \"string\") {\n attrs.push(stringAttr(\"gen_ai.request.model\", meta.model.slice(0, maxLen)));\n }\n\n const tokens = meta?.tokens;\n if (tokens && typeof tokens === \"object\" && tokens !== null) {\n const inp = (tokens as { input?: number }).input;\n const outp = (tokens as { output?: number }).output;\n if (typeof inp === \"number\") attrs.push(intAttr(\"gen_ai.usage.input_tokens\", inp));\n if (typeof outp === \"number\") attrs.push(intAttr(\"gen_ai.usage.output_tokens\", outp));\n }\n\n if (includeAttributes && meta && typeof meta === \"object\") {\n for (const [k, v] of Object.entries(meta)) {\n if (k === \"tokens\" || k === \"model\") continue;\n if (typeof v === \"string\" || typeof v === \"number\" || typeof v === \"boolean\") {\n attrs.push(\n stringAttr(\n `agent_inspect.preview.${k}`,\n typeof v === \"string\" ? v.slice(0, maxLen) : String(v),\n ),\n );\n }\n }\n }\n\n let statusCode = \"STATUS_CODE_UNSET\";\n let statusMessage: string | undefined;\n if (ev.status === \"error\") {\n statusCode = \"STATUS_CODE_ERROR\";\n statusMessage =\n meta && typeof meta.error === \"object\" && meta.error !== null\n ? String((meta.error as { message?: string }).message ?? \"error\").slice(0, maxLen)\n : \"error\";\n } else if (ev.status === \"ok\") {\n statusCode = \"STATUS_CODE_OK\";\n }\n\n const spanJson: Record<string, unknown> = {\n traceId,\n spanId,\n name: ev.name,\n kind: \"SPAN_KIND_INTERNAL\",\n startTimeUnixNano: startNs,\n attributes: attrs,\n status: {\n code: statusCode,\n ...(statusMessage !== undefined ? { message: statusMessage } : {}),\n },\n };\n\n if (parentSpanId !== undefined) {\n spanJson.parentSpanId = parentSpanId;\n }\n if (endNs !== undefined) {\n spanJson.endTimeUnixNano = endNs;\n }\n\n spans.push(spanJson);\n }\n\n const payload = {\n resourceSpans: [\n {\n resource: {\n attributes: [stringAttr(\"service.name\", \"agent-inspect\")],\n },\n scopeSpans: [\n {\n scope: { name: \"agent-inspect\" },\n spans,\n },\n ],\n },\n ],\n };\n\n return {\n format: \"otlp-json\",\n content: JSON.stringify(payload, null, pretty ? 2 : undefined),\n contentType: \"application/json\",\n fileExtension: \".otlp.json\",\n warnings,\n };\n}\n","import type { ExportFormat, ExportValidationResult } from \"./types.js\";\n\nconst EXPERIMENTAL =\n \"Experimental compatibility export — verify against your target tooling before relying on it.\";\n\nexport function validateExportContent(\n format: ExportFormat,\n content: string,\n): ExportValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [EXPERIMENTAL];\n\n if (format === \"markdown\") {\n if (!content.startsWith(\"# AgentInspect Run\")) {\n errors.push('Markdown export must start with \"# AgentInspect Run\"');\n }\n return { ok: errors.length === 0, format, errors, warnings };\n }\n\n if (format === \"html\") {\n const lower = content.toLowerCase();\n if (!lower.includes(\"<!doctype html\")) {\n errors.push(\"HTML export must include <!doctype html>\");\n }\n if (/<\\s*script\\b/i.test(content)) {\n errors.push(\"HTML export must not contain script tags\");\n }\n if (/<\\s*link\\b[^>]*href\\s*=/i.test(content)) {\n warnings.push(\"HTML export contains link tags — ensure no external stylesheets.\");\n }\n return { ok: errors.length === 0, format, errors, warnings };\n }\n\n if (format === \"openinference\") {\n let parsed: unknown;\n try {\n parsed = JSON.parse(content) as unknown;\n } catch {\n errors.push(\"OpenInference export is not valid JSON\");\n return { ok: false, format, errors, warnings };\n }\n if (!parsed || typeof parsed !== \"object\") {\n errors.push(\"OpenInference export JSON must be an object\");\n return { ok: false, format, errors, warnings };\n }\n const o = parsed as Record<string, unknown>;\n if (o.format !== \"openinference\") {\n errors.push('OpenInference export must include format: \"openinference\"');\n }\n if (!Array.isArray(o.spans)) {\n errors.push(\"OpenInference export must include a spans array\");\n }\n warnings.push(\"OpenInference-compatible JSON is not guaranteed for every backend.\");\n return { ok: errors.length === 0, format, errors, warnings };\n }\n\n if (format === \"otlp-json\") {\n let parsed: unknown;\n try {\n parsed = JSON.parse(content) as unknown;\n } catch {\n errors.push(\"OTLP JSON export is not valid JSON\");\n return { ok: false, format, errors, warnings };\n }\n if (!parsed || typeof parsed !== \"object\") {\n errors.push(\"OTLP JSON export must be an object\");\n return { ok: false, format, errors, warnings };\n }\n const o = parsed as Record<string, unknown>;\n if (!Array.isArray(o.resourceSpans)) {\n errors.push(\"OTLP JSON export must include resourceSpans array\");\n }\n warnings.push(\n \"OTLP JSON mapping uses OTel GenAI-aligned attributes where applicable; collectors may require transformation.\",\n );\n return { ok: errors.length === 0, format, errors, warnings };\n }\n\n errors.push(`Unsupported export format`);\n return { ok: false, format, errors, warnings };\n}\n","import type { InspectEvent, InspectKind, InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport type {\n StepStartedEvent,\n StepType,\n TraceEvent,\n} from \"../types.js\";\n\nimport { zeroKinds } from \"./helpers.js\";\n\nfunction stepTypeToInspectKind(t: StepType): InspectKind {\n switch (t) {\n case \"llm\":\n return \"LLM\";\n case \"tool\":\n return \"TOOL\";\n case \"decision\":\n return \"DECISION\";\n case \"run\":\n return \"CHAIN\";\n default:\n return \"LOGIC\";\n }\n}\n\nfunction mapStepStatus(\n s: \"success\" | \"error\" | undefined,\n): InspectEvent[\"status\"] | undefined {\n if (s === undefined) return \"running\";\n if (s === \"success\") return \"ok\";\n return \"error\";\n}\n\ntype StepAcc = {\n id: string;\n parentId?: string;\n name: string;\n type: StepType;\n startTime: number;\n timestamp: number;\n metadata?: Record<string, unknown>;\n status?: \"success\" | \"error\";\n endTime?: number;\n durationMs?: number;\n error?: { message: string; stack?: string };\n};\n\n/**\n * Build an {@link InspectRunTree} from v0.1 JSONL {@link TraceEvent} rows (manual tracing).\n * Does not mutate the input array or event objects.\n */\nexport function manualTraceEventsToRunTree(events: TraceEvent[]): InspectRunTree {\n const started = events.find((e) => e.event === \"run_started\");\n if (!started || started.event !== \"run_started\") {\n throw new Error(\"Invalid trace: missing run_started\");\n }\n\n const runId = started.runId;\n const runName = started.name;\n\n const completedAll = events.filter((e) => e.event === \"run_completed\");\n const lastCompleted = completedAll[completedAll.length - 1];\n\n let runStatus: InspectRunTree[\"status\"];\n if (lastCompleted === undefined) {\n runStatus = \"running\";\n } else if (lastCompleted.status === \"success\") {\n runStatus = \"ok\";\n } else {\n runStatus = \"error\";\n }\n\n const startedAt = started.startTime;\n const endedAt =\n lastCompleted !== undefined && runStatus !== \"running\" ? lastCompleted.endTime : undefined;\n const durationMs =\n lastCompleted !== undefined && Number.isFinite(lastCompleted.durationMs)\n ? lastCompleted.durationMs\n : undefined;\n\n const steps = new Map<string, StepAcc>();\n\n for (const e of events) {\n if (e.event !== \"step_started\") continue;\n const s = e as StepStartedEvent;\n steps.set(s.stepId, {\n id: s.stepId,\n parentId: s.parentId,\n name: s.name,\n type: s.type,\n startTime: s.startTime,\n timestamp: s.timestamp,\n metadata: s.metadata as Record<string, unknown> | undefined,\n });\n }\n\n for (const e of events) {\n if (e.event !== \"step_completed\") continue;\n const acc = steps.get(e.stepId);\n if (!acc) continue;\n acc.status = e.status;\n acc.endTime = e.endTime;\n acc.durationMs = e.durationMs;\n if (e.error?.message) {\n acc.error = e.error;\n }\n }\n\n const inspectNodes = new Map<string, InspectNode>();\n\n for (const acc of steps.values()) {\n const kind = stepTypeToInspectKind(acc.type);\n const status = mapStepStatus(acc.status);\n const attrs: Record<string, unknown> = { ...(acc.metadata ?? {}) };\n if (acc.error?.message) {\n attrs.error = acc.error;\n }\n\n const evt: InspectEvent = {\n eventId: acc.id,\n runId,\n parentId: acc.parentId,\n name: acc.name,\n kind,\n timestamp: acc.timestamp,\n status,\n durationMs: acc.durationMs,\n attributes: Object.keys(attrs).length > 0 ? attrs : undefined,\n confidence: \"explicit\",\n source: { type: \"manual\" },\n };\n\n inspectNodes.set(acc.id, { event: evt, children: [], depth: 0 });\n }\n\n const roots: InspectNode[] = [];\n const sortByStart = (a: InspectNode, b: InspectNode) =>\n a.event.timestamp - b.event.timestamp;\n\n for (const node of inspectNodes.values()) {\n const pid = node.event.parentId;\n if (pid !== undefined && inspectNodes.has(pid)) {\n inspectNodes.get(pid)!.children.push(node);\n } else {\n roots.push(node);\n }\n }\n\n roots.sort(sortByStart);\n for (const n of inspectNodes.values()) {\n n.children.sort(sortByStart);\n }\n\n const assignDepth = (n: InspectNode, depth: number) => {\n n.depth = depth;\n for (const c of n.children) assignDepth(c, depth + 1);\n };\n for (const r of roots) assignDepth(r, 0);\n\n const confidenceBreakdown = {\n explicit: 0,\n correlated: 0,\n heuristic: 0,\n unknown: 0,\n } as InspectRunTree[\"metadata\"][\"confidenceBreakdown\"];\n\n const kinds = zeroKinds();\n\n function countWalk(nodes: InspectNode[]): void {\n for (const n of nodes) {\n confidenceBreakdown[n.event.confidence] += 1;\n kinds[n.event.kind] += 1;\n if (n.children.length > 0) countWalk(n.children);\n }\n }\n countWalk(roots);\n\n return {\n runId,\n name: runName,\n status: runStatus,\n startedAt,\n endedAt,\n durationMs,\n children: roots,\n metadata: {\n totalEvents: inspectNodes.size,\n confidenceBreakdown,\n kinds,\n },\n };\n}\n","import type { ExportValidationResult } from \"./types.js\";\nimport { validateExportContent } from \"./validation.js\";\n\n/** Validate committed or exported OpenInference-compatible JSON fixtures. */\nexport function validateOpenInferenceFixture(content: string): ExportValidationResult {\n return validateExportContent(\"openinference\", content);\n}\n\n/** Validate committed or exported OTLP JSON fixtures. */\nexport function validateOtlpJsonFixture(content: string): ExportValidationResult {\n return validateExportContent(\"otlp-json\", content);\n}\n","/**\n * Semantic field checks beyond shape validation for standards fixtures.\n */\nimport type { ExportValidationResult } from \"./types.js\";\nimport { validateOpenInferenceFixture, validateOtlpJsonFixture } from \"./fixtures.js\";\n\nconst SEMCONV_PIN = \"OTEL_GEN_AI_SEMCONV_PIN\";\n\nfunction semanticWarnings(format: \"openinference\" | \"otlp-json\", parsed: Record<string, unknown>): string[] {\n const warnings: string[] = [];\n if (format === \"openinference\") {\n const spans = Array.isArray(parsed.spans) ? parsed.spans : [];\n if (spans.length > 0) {\n const first = spans[0] as Record<string, unknown>;\n if (first.trace_id === undefined && first.traceId === undefined) {\n warnings.push(\"OpenInference semantic: first span missing trace_id\");\n }\n }\n }\n if (format === \"otlp-json\") {\n warnings.push(`OTLP semantic validation pinned to ${SEMCONV_PIN} mapping docs`);\n }\n return warnings;\n}\n\nexport function validateOpenInferenceSemanticFixture(content: string): ExportValidationResult {\n const base = validateOpenInferenceFixture(content);\n if (!base.ok) return base;\n try {\n const parsed = JSON.parse(content) as Record<string, unknown>;\n return {\n ...base,\n warnings: [...base.warnings, ...semanticWarnings(\"openinference\", parsed)],\n };\n } catch {\n return base;\n }\n}\n\nexport function validateOtlpJsonSemanticFixture(content: string): ExportValidationResult {\n const base = validateOtlpJsonFixture(content);\n if (!base.ok) return base;\n try {\n const parsed = JSON.parse(content) as Record<string, unknown>;\n return {\n ...base,\n warnings: [...base.warnings, ...semanticWarnings(\"otlp-json\", parsed)],\n };\n } catch {\n return base;\n }\n}\n","/**\n * Documented OpenTelemetry GenAI semantic convention reference for OTLP JSON exports.\n * Local mapping only — no OTel SDK dependency in core.\n */\nexport const OTEL_GEN_AI_SEMCONV_PIN = {\n /** Human-readable pin label recorded in export metadata and docs. */\n version: \"1.36.0\",\n /** Public spec URL for maintainers validating attribute names. */\n specUrl: \"https://opentelemetry.io/docs/specs/semconv/gen-ai/\",\n /** Attribute families emitted by agent-inspect OTLP JSON export. */\n attributes: [\n \"gen_ai.operation.name\",\n \"gen_ai.request.model\",\n \"gen_ai.usage.input_tokens\",\n \"gen_ai.usage.output_tokens\",\n \"gen_ai.prompt\",\n \"gen_ai.completion\",\n ],\n} as const;\n","import type { InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult, ExportValidationResult } from \"./types.js\";\nimport { redactRunTreeForExport } from \"./redact-export.js\";\nimport { exportHtml } from \"./html-exporter.js\";\nimport { exportMarkdown } from \"./markdown-exporter.js\";\nimport { exportOpenInference } from \"./openinference-exporter.js\";\nimport { exportOtlpJson } from \"./otlp-json-exporter.js\";\nimport { validateExportContent } from \"./validation.js\";\n\nexport function mergeExportDefaults(options: ExportOptions): ExportOptions {\n return {\n format: options.format,\n includeMetadata: options.includeMetadata ?? true,\n includeAttributes: options.includeAttributes ?? false,\n includeErrors: options.includeErrors ?? true,\n pretty: options.pretty ?? true,\n redacted: options.redacted ?? true,\n maxAttributeLength: options.maxAttributeLength ?? 500,\n redactionProfile: options.redactionProfile ?? \"local\",\n };\n}\n\n/**\n * @experimental Compatibility-oriented export API. Exports are local-only and do not upload anywhere.\n * Subject to refinement before a future stability declaration.\n */\nexport function exportRunTree(tree: InspectRunTree, options: ExportOptions): ExportResult {\n const opts = mergeExportDefaults(options);\n const exportTree =\n opts.redactionProfile === \"local\"\n ? tree\n : redactRunTreeForExport(tree, { redactionProfile: opts.redactionProfile });\n switch (opts.format) {\n case \"markdown\":\n return exportMarkdown(exportTree, opts);\n case \"html\":\n return exportHtml(exportTree, opts);\n case \"openinference\":\n return exportOpenInference(exportTree, opts);\n case \"otlp-json\":\n return exportOtlpJson(exportTree, opts);\n default: {\n const _x: never = opts.format;\n throw new Error(`Unsupported export format: ${String(_x)}`);\n }\n }\n}\n\nexport function validateExport(result: ExportResult): ExportValidationResult {\n const base = validateExportContent(result.format, result.content);\n return {\n ok: base.ok,\n format: base.format,\n errors: base.errors,\n warnings: [...result.warnings, ...base.warnings],\n };\n}\n\nexport type {\n ExportFormat,\n ExportOptions,\n ExportResult,\n ExportValidationResult,\n TraceExporter,\n} from \"./types.js\";\nexport { EXPORT_PAYLOAD_VERSION } from \"./types.js\";\nexport * from \"./helpers.js\";\nexport { manualTraceEventsToRunTree } from \"./manual-trace-adapter.js\";\nexport { exportMarkdown } from \"./markdown-exporter.js\";\nexport { exportHtml } from \"./html-exporter.js\";\nexport type { OpenInferenceExport, OpenInferenceSpan } from \"./openinference-exporter.js\";\nexport { exportOpenInference } from \"./openinference-exporter.js\";\nexport { exportOtlpJson } from \"./otlp-json-exporter.js\";\nexport { validateExportContent } from \"./validation.js\";\nexport {\n validateOpenInferenceFixture,\n validateOtlpJsonFixture,\n} from \"./fixtures.js\";\nexport {\n validateOpenInferenceSemanticFixture,\n validateOtlpJsonSemanticFixture,\n} from \"./semantic-validation.js\";\nexport { OTEL_GEN_AI_SEMCONV_PIN } from \"./semconv.js\";\nexport { redactRunTreeForExport } from \"./redact-export.js\";\n","import type { TraceEvent } from \"./types.js\";\nimport type { RedactionProfile } from \"./types.js\";\nimport type { InspectRunTree } from \"./types/inspect-event.js\";\nimport { exportHtml } from \"./exporters/html-exporter.js\";\nimport { exportMarkdown } from \"./exporters/markdown-exporter.js\";\nimport { escapeHtml, escapeMarkdown } from \"./exporters/helpers.js\";\nimport { manualTraceEventsToRunTree } from \"./exporters/manual-trace-adapter.js\";\nimport {\n redactRunTreeForExport,\n redactTraceEventsForReport,\n} from \"./exporters/redact-export.js\";\nimport { buildRunTimeline, renderTimeline } from \"./timeline.js\";\nimport { buildRunWhatSummary, renderRunWhat } from \"./what.js\";\nimport {\n extractOutcomesFromTraceEvents,\n renderObservedOutcomesHtml,\n renderObservedOutcomesMarkdown,\n summarizeObservedOutcomes,\n} from \"./outcomes/index.js\";\n\nexport type ReportFormat = \"markdown\" | \"html\";\nexport type ReportSection = \"all\" | \"observations\" | \"what\" | \"timeline\" | \"tree\";\n\nexport interface ReportOptions {\n format: ReportFormat;\n includeAttributes?: boolean;\n includeErrors?: boolean;\n redactionProfile?: RedactionProfile;\n /** Include correlation ids in the what section (default true). */\n correlation?: boolean;\n /** Limit output to one section (`observations` shows observed outcomes only). */\n section?: ReportSection;\n}\n\nexport interface ReportResult {\n format: ReportFormat;\n content: string;\n contentType: string;\n fileExtension: string;\n}\n\nfunction resolveTree(\n events: TraceEvent[],\n profile: RedactionProfile,\n): InspectRunTree {\n const tree = manualTraceEventsToRunTree(events);\n return profile === \"local\"\n ? tree\n : redactRunTreeForExport(tree, { redactionProfile: profile });\n}\n\nfunction tailMarkdownSection(content: string, heading: string): string {\n const marker = `## ${heading}`;\n const idx = content.indexOf(marker);\n if (idx < 0) return \"\";\n return content.slice(idx).trimEnd();\n}\n\nfunction extractHtmlFragment(content: string, start: string, end: string): string {\n const startIdx = content.indexOf(start);\n if (startIdx < 0) return \"\";\n const endIdx = content.indexOf(end, startIdx + start.length);\n if (endIdx < 0) return content.slice(startIdx);\n return content.slice(startIdx, endIdx);\n}\n\nconst REPORT_HTML_CSS = `\nbody{font-family:system-ui,sans-serif;line-height:1.5;margin:1.5rem;max-width:960px;color:#111}\nh1{font-size:1.35rem}\nh2{font-size:1.1rem;margin-top:1.5rem}\npre{white-space:pre-wrap;background:#f8f8f8;padding:0.75rem;overflow:auto;font-size:0.9rem}\nul.tree{list-style:none;padding-left:1rem}\nul.tree.nested{padding-left:1.25rem;border-left:1px solid #ddd;margin:0.25rem 0}\n.nm{font-weight:600}\n.meta{color:#555;font-size:0.9rem}\nfooter{margin-top:2rem;font-size:0.85rem;color:#555}\n`.trim();\n\n/**\n * Build a local inspection report (markdown or HTML) from v0.1 trace events.\n * Composes `what`, timeline, and execution-tree sections.\n */\nexport function buildRunReport(\n events: TraceEvent[],\n options: ReportOptions,\n): ReportResult {\n const profile = options.redactionProfile ?? \"local\";\n const section = options.section ?? \"all\";\n const safeEvents = redactTraceEventsForReport(events, {\n redactionProfile: profile,\n });\n const outcomes = summarizeObservedOutcomes(\n extractOutcomesFromTraceEvents(safeEvents),\n );\n const observationsMarkdown = renderObservedOutcomesMarkdown(outcomes);\n const observationsHtml = renderObservedOutcomesHtml(outcomes);\n\n if (section === \"observations\") {\n if (options.format === \"markdown\") {\n return {\n format: \"markdown\",\n content: `## Observed outcomes\\n\\n${observationsMarkdown}\\n`,\n contentType: \"text/markdown\",\n fileExtension: \".md\",\n };\n }\n return {\n format: \"html\",\n content: `<!doctype html><html lang=\"en\"><head><meta charset=\"utf-8\"/><title>Observed outcomes</title><style>${REPORT_HTML_CSS}</style></head><body><h1>Observed outcomes</h1>${observationsHtml}</body></html>`,\n contentType: \"text/html\",\n fileExtension: \".html\",\n };\n }\n\n const whatSummary = buildRunWhatSummary(safeEvents);\n const whatText = renderRunWhat(whatSummary, {\n correlation: options.correlation !== false,\n });\n const timelineText = renderTimeline(buildRunTimeline(safeEvents));\n const tree = resolveTree(safeEvents, profile);\n\n const exportOpts = {\n includeMetadata: false,\n includeAttributes: options.includeAttributes === true,\n includeErrors: options.includeErrors !== false,\n redacted: true,\n redactionProfile: profile,\n maxAttributeLength: 500,\n };\n\n if (options.format === \"markdown\") {\n const treeMd = exportMarkdown(tree, exportOpts);\n const tail = tailMarkdownSection(treeMd.content, \"Execution tree\");\n const title = escapeMarkdown(whatSummary.name ?? whatSummary.runId);\n const lines = [\n `# AgentInspect Report: ${title}`,\n \"\",\n \"Generated locally by AgentInspect. Review for sensitive data before sharing.\",\n \"\",\n \"## What happened\",\n \"\",\n \"```text\",\n whatText,\n \"```\",\n \"\",\n \"## Timeline\",\n \"\",\n \"```text\",\n timelineText,\n \"```\",\n \"\",\n \"## Observed outcomes\",\n \"\",\n observationsMarkdown,\n \"\",\n ];\n if (tail) {\n lines.push(tail, \"\");\n } else {\n lines.push(\"## Execution tree\", \"\", \"(no steps)\", \"\");\n }\n\n return {\n format: \"markdown\",\n content: lines.join(\"\\n\"),\n contentType: \"text/markdown\",\n fileExtension: \".md\",\n };\n }\n\n const treeHtml = exportHtml(tree, exportOpts);\n const title = escapeHtml(whatSummary.name ?? whatSummary.runId);\n const treeSection = extractHtmlFragment(\n treeHtml.content,\n '<section class=\"tree\">',\n \"</section>\",\n );\n // The exporter emits Errors before Attributes, so the errors fragment must\n // stop at the attributes heading when both sections are present; ending at\n // <footer> would swallow the attributes section and duplicate it below.\n const errorsSectionEnd = treeHtml.content.includes(\n \"<h2>Attributes (bounded)</h2>\",\n )\n ? \"<h2>Attributes (bounded)</h2>\"\n : \"<footer>\";\n const errorsSection = treeHtml.content.includes(\"<h2>Errors</h2>\")\n ? extractHtmlFragment(treeHtml.content, \"<h2>Errors</h2>\", errorsSectionEnd)\n : \"\";\n const attrsSection = treeHtml.content.includes(\"<h2>Attributes (bounded)</h2>\")\n ? extractHtmlFragment(\n treeHtml.content,\n \"<h2>Attributes (bounded)</h2>\",\n \"<footer>\",\n )\n : \"\";\n\n const html = `<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>AgentInspect Report: ${title}</title>\n<style>${REPORT_HTML_CSS}</style>\n</head>\n<body>\n<header><h1>AgentInspect Report: ${title}</h1></header>\n<p class=\"note\">Generated locally by AgentInspect. Review for sensitive data before sharing.</p>\n<section class=\"what\"><h2>What happened</h2><pre>${escapeHtml(whatText)}</pre></section>\n<section class=\"timeline\"><h2>Timeline</h2><pre>${escapeHtml(timelineText)}</pre></section>\n<section class=\"observations\"><h2>Observed outcomes</h2>${observationsHtml}</section>\n${treeSection || \"<section class=\\\"tree\\\"><h2>Execution tree</h2><p>No steps recorded.</p></section>\"}\n${errorsSection}\n${attrsSection}\n<footer>Generated locally by AgentInspect. Review for sensitive data before sharing.</footer>\n</body>\n</html>`;\n\n return {\n format: \"html\",\n content: html,\n contentType: \"text/html\",\n fileExtension: \".html\",\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/exporters/types.ts","../src/exporters/redact-export.ts","../src/exporters/html-exporter.ts","../src/exporters/markdown-exporter.ts","../src/exporters/openinference-exporter.ts","../src/exporters/otlp-json-exporter.ts","../src/exporters/validation.ts","../src/exporters/manual-trace-adapter.ts","../src/exporters/fixtures.ts","../src/exporters/semantic-validation.ts","../src/exporters/semconv.ts","../src/exporters/index.ts","../src/report.ts"],"names":["hexFrom","crypto","title"],"mappings":"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","file":"exporters.mjs","sourcesContent":["/**\n * v0.7 local export formats. No sinks — string output only.\n */\n\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\nimport type { RedactionProfile } from \"../types.js\";\n\nexport type ExportFormat = \"markdown\" | \"html\" | \"openinference\" | \"otlp-json\";\n\nexport interface ExportOptions {\n format: ExportFormat;\n includeMetadata?: boolean;\n includeAttributes?: boolean;\n includeErrors?: boolean;\n pretty?: boolean;\n redacted?: boolean;\n maxAttributeLength?: number;\n /**\n * Redaction preset for exported copies. Default `local`.\n * `share` and `strict` apply stronger key-based redaction before rendering.\n */\n redactionProfile?: RedactionProfile;\n}\n\nexport interface ExportResult {\n format: ExportFormat;\n content: string;\n contentType: string;\n fileExtension: string;\n warnings: string[];\n}\n\nexport interface ExportValidationResult {\n ok: boolean;\n format: ExportFormat;\n errors: string[];\n warnings: string[];\n}\n\nexport interface TraceExporter {\n name: string;\n format: ExportFormat;\n export(tree: InspectRunTree, options?: Partial<ExportOptions>): ExportResult;\n validate?(content: string): ExportValidationResult;\n}\n\n/** Library version string embedded in JSON exports (human-readable, not semver guarantee for formats). */\nexport const EXPORT_PAYLOAD_VERSION = \"0.1.2\";\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport { Redactor } from \"../logs/redactor.js\";\nimport {\n applyProfileMetadataCaps,\n resolveRedactionProfile,\n truncateStringForProfile,\n} from \"../redaction-profiles.js\";\nimport type { ErrorInfo, RedactionProfile, TraceEvent } from \"../types.js\";\n\nexport interface RedactRunTreeForExportOptions {\n redactionProfile?: RedactionProfile;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction deepClone<T>(value: T): T {\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((item) => deepClone(item)) as T;\n }\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[k] = deepClone(v);\n }\n return out as T;\n}\n\nfunction boundAttributeValues(\n record: Record<string, unknown>,\n maxMetadataValueLength: number,\n maxPreviewLength: number,\n seen: WeakSet<object>,\n depth: number,\n): Record<string, unknown> {\n if (depth > 32) {\n return { truncated: true, reason: \"maxDepth\" };\n }\n\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n out[key] = boundValue(value, key, maxMetadataValueLength, maxPreviewLength, seen, depth);\n }\n return out;\n}\n\nfunction boundValue(\n value: unknown,\n key: string,\n maxMetadataValueLength: number,\n maxPreviewLength: number,\n seen: WeakSet<object>,\n depth: number,\n): unknown {\n if (value === null || typeof value !== \"object\") {\n if (typeof value === \"string\") {\n return truncateStringForProfile(\n value,\n key,\n maxMetadataValueLength,\n maxPreviewLength,\n );\n }\n return value;\n }\n\n if (seen.has(value)) return \"[Circular]\";\n seen.add(value);\n\n if (Array.isArray(value)) {\n return value\n .slice(0, 50)\n .map((item, index) =>\n boundValue(\n item,\n String(index),\n maxMetadataValueLength,\n maxPreviewLength,\n seen,\n depth + 1,\n ),\n );\n }\n\n return boundAttributeValues(\n value as Record<string, unknown>,\n maxMetadataValueLength,\n maxPreviewLength,\n seen,\n depth + 1,\n );\n}\n\nfunction redactEventAttributes(\n attrs: Record<string, unknown> | undefined,\n redactor: Redactor,\n maxMetadataValueLength: number,\n maxPreviewLength: number,\n): Record<string, unknown> | undefined {\n if (!attrs || Object.keys(attrs).length === 0) {\n return attrs;\n }\n\n const redacted = redactor.redactRecord(attrs);\n const seen = new WeakSet<object>();\n const bounded = boundAttributeValues(\n redacted,\n maxMetadataValueLength,\n maxPreviewLength,\n seen,\n 0,\n );\n\n const err = bounded.error;\n if (isRecord(err) && typeof err.message === \"string\") {\n bounded.error = {\n ...err,\n message: truncateStringForProfile(\n err.message,\n \"message\",\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n ...(typeof err.stack === \"string\"\n ? {\n stack: truncateStringForProfile(\n err.stack,\n \"stack\",\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n }\n : {}),\n };\n }\n\n return bounded;\n}\n\nfunction redactErrorInfo(\n error: ErrorInfo | undefined,\n redactor: Redactor,\n maxMetadataValueLength: number,\n maxPreviewLength: number,\n): ErrorInfo | undefined {\n if (error === undefined) return undefined;\n\n const record = redactEventAttributes(\n { error },\n redactor,\n maxMetadataValueLength,\n maxPreviewLength,\n );\n const redacted = record?.error;\n if (!isRecord(redacted) || typeof redacted.message !== \"string\") {\n return undefined;\n }\n\n return {\n message: redacted.message,\n ...(typeof redacted.stack === \"string\" ? { stack: redacted.stack } : {}),\n };\n}\n\n/**\n * Returns structured trace-event copies that are safe to use across every report section.\n * Profile redaction and bounds are applied before any human-readable rendering.\n */\nexport function redactTraceEventsForReport(\n events: readonly TraceEvent[],\n options?: RedactRunTreeForExportOptions,\n): TraceEvent[] {\n const profile = options?.redactionProfile ?? \"local\";\n if (profile === \"local\") {\n return deepClone(events) as TraceEvent[];\n }\n\n const resolved = resolveRedactionProfile(profile);\n const { maxMetadataValueLength, maxPreviewLength } = applyProfileMetadataCaps(\n 2000,\n 500,\n resolved,\n );\n const redactor = new Redactor({ extraKeys: resolved.extraKeys });\n\n return events.map((event): TraceEvent => {\n switch (event.event) {\n case \"run_started\":\n return {\n ...event,\n name: truncateStringForProfile(\n event.name,\n \"name\",\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n ...(event.metadata !== undefined\n ? {\n metadata: redactEventAttributes(\n event.metadata,\n redactor,\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n }\n : {}),\n };\n case \"step_started\":\n return {\n ...event,\n name: truncateStringForProfile(\n event.name,\n \"name\",\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n ...(event.metadata !== undefined\n ? {\n metadata: redactEventAttributes(\n event.metadata,\n redactor,\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n }\n : {}),\n };\n case \"run_completed\":\n case \"step_completed\":\n return {\n ...event,\n ...(event.error !== undefined\n ? {\n error: redactErrorInfo(\n event.error,\n redactor,\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n }\n : {}),\n };\n case \"outcome_observed\": {\n const actualAttrs =\n event.actual !== undefined\n ? redactEventAttributes(\n { value: event.actual },\n redactor,\n maxMetadataValueLength,\n maxPreviewLength,\n )\n : undefined;\n const redactedActual =\n actualAttrs !== undefined && \"value\" in actualAttrs\n ? actualAttrs.value\n : undefined;\n const redactedEvidence =\n event.evidence !== undefined\n ? redactEventAttributes(\n isRecord(event.evidence) ? event.evidence : { value: event.evidence },\n redactor,\n maxMetadataValueLength,\n maxPreviewLength,\n )\n : undefined;\n return {\n ...event,\n name: truncateStringForProfile(\n event.name,\n \"name\",\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n expectation: truncateStringForProfile(\n event.expectation,\n \"expectation\",\n maxMetadataValueLength,\n maxPreviewLength,\n ),\n ...(redactedActual !== undefined ? { actual: redactedActual } : {}),\n ...(redactedEvidence !== undefined ? { evidence: redactedEvidence } : {}),\n };\n }\n default:\n return event;\n }\n });\n}\n\n/**\n * Returns a deep copy of `tree` with profile-based redaction applied to event attributes.\n * Does not mutate the input tree.\n */\nexport function redactRunTreeForExport(\n tree: InspectRunTree,\n options?: RedactRunTreeForExportOptions,\n): InspectRunTree {\n const profile = options?.redactionProfile ?? \"local\";\n if (profile === \"local\") {\n return deepClone(tree);\n }\n\n const resolved = resolveRedactionProfile(profile);\n const { maxMetadataValueLength, maxPreviewLength } = applyProfileMetadataCaps(\n 2000,\n 500,\n resolved,\n );\n const redactor = new Redactor({ extraKeys: resolved.extraKeys });\n\n const clone = deepClone(tree);\n\n function walk(nodes: InspectNode[]): void {\n for (const node of nodes) {\n if (node.event.attributes !== undefined) {\n node.event.attributes = redactEventAttributes(\n node.event.attributes,\n redactor,\n maxMetadataValueLength,\n maxPreviewLength,\n );\n }\n if (node.children.length > 0) {\n walk(node.children);\n }\n }\n }\n\n walk(clone.children);\n return clone;\n}\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult } from \"./types.js\";\nimport {\n compactAttributes,\n escapeHtml,\n flattenTree,\n safeString,\n stableJson,\n} from \"./helpers.js\";\n\nfunction renderTreeHtml(nodes: InspectNode[], ulClass = \"tree\"): string {\n if (nodes.length === 0) return \"\";\n const parts: string[] = [`<ul class=\"${ulClass}\">`];\n for (const n of nodes) {\n const ev = n.event;\n const status = ev.status ?? \"?\";\n const dur =\n ev.durationMs !== undefined && Number.isFinite(ev.durationMs)\n ? `${ev.durationMs}ms`\n : \"-\";\n parts.push(\"<li>\");\n parts.push(\n `<span class=\"nm\">${escapeHtml(ev.name)}</span> <span class=\"meta\">[${escapeHtml(ev.kind)}] ${escapeHtml(status)} (${escapeHtml(dur)})</span>`,\n );\n if (n.children.length > 0) {\n parts.push(renderTreeHtml(n.children, \"tree nested\"));\n }\n parts.push(\"</li>\");\n }\n parts.push(\"</ul>\");\n return parts.join(\"\");\n}\n\nexport function exportHtml(tree: InspectRunTree, options?: Partial<ExportOptions>): ExportResult {\n const warnings: string[] = [];\n const includeMetadata = options?.includeMetadata ?? true;\n const includeAttributes = options?.includeAttributes ?? false;\n const includeErrors = options?.includeErrors ?? true;\n const maxLen = options?.maxAttributeLength ?? 500;\n const redacted = options?.redacted ?? true;\n\n const titleName = escapeHtml(tree.name ?? tree.runId);\n\n const summaryRows: string[] = [];\n summaryRows.push(\n `<tr><th scope=\"row\">runId</th><td><code>${escapeHtml(tree.runId)}</code></td></tr>`,\n );\n if (tree.name !== undefined) {\n summaryRows.push(`<tr><th scope=\"row\">name</th><td>${escapeHtml(tree.name)}</td></tr>`);\n }\n summaryRows.push(\n `<tr><th scope=\"row\">status</th><td>${escapeHtml(String(tree.status ?? \"unknown\"))}</td></tr>`,\n );\n summaryRows.push(\n `<tr><th scope=\"row\">durationMs</th><td>${tree.durationMs !== undefined ? escapeHtml(String(tree.durationMs)) : \"—\"}</td></tr>`,\n );\n summaryRows.push(\n `<tr><th scope=\"row\">startedAt</th><td>${tree.startedAt !== undefined ? escapeHtml(String(tree.startedAt)) : \"—\"}</td></tr>`,\n );\n summaryRows.push(\n `<tr><th scope=\"row\">endedAt</th><td>${tree.endedAt !== undefined ? escapeHtml(String(tree.endedAt)) : \"—\"}</td></tr>`,\n );\n summaryRows.push(\n `<tr><th scope=\"row\">totalEvents</th><td>${escapeHtml(String(tree.metadata.totalEvents))}</td></tr>`,\n );\n\n let confidenceHtml = \"\";\n if (includeMetadata) {\n const cb = tree.metadata.confidenceBreakdown;\n confidenceHtml += \"<h3>Confidence breakdown</h3><table><thead><tr><th>bucket</th><th>count</th></tr></thead><tbody>\";\n for (const k of Object.keys(cb).sort()) {\n const key = k as keyof typeof cb;\n confidenceHtml += `<tr><td>${escapeHtml(key)}</td><td>${cb[key]}</td></tr>`;\n }\n confidenceHtml += \"</tbody></table>\";\n\n confidenceHtml += \"<h3>Kind breakdown</h3><table><thead><tr><th>kind</th><th>count</th></tr></thead><tbody>\";\n for (const k of Object.keys(tree.metadata.kinds).sort()) {\n const key = k as keyof typeof tree.metadata.kinds;\n const c = tree.metadata.kinds[key];\n if (c > 0) confidenceHtml += `<tr><td>${escapeHtml(key)}</td><td>${c}</td></tr>`;\n }\n confidenceHtml += \"</tbody></table>\";\n }\n\n const flat = flattenTree(tree);\n const errors = flat.filter((n) => n.event.status === \"error\");\n let errorsHtml = \"\";\n if (includeErrors && errors.length > 0) {\n errorsHtml += \"<h2>Errors</h2><ul>\";\n for (const n of errors) {\n const msg =\n n.event.attributes && typeof n.event.attributes.error === \"object\"\n ? safeString(\n (n.event.attributes.error as { message?: string }).message,\n maxLen,\n )\n : \"\";\n errorsHtml += `<li><strong>${escapeHtml(n.event.name)}</strong> (${escapeHtml(n.event.eventId)}): ${escapeHtml(msg || \"error\")}</li>`;\n }\n errorsHtml += \"</ul>\";\n }\n\n let attrsHtml = \"\";\n if (includeAttributes) {\n attrsHtml += \"<h2>Attributes (bounded)</h2>\";\n for (const n of flat) {\n if (!n.event.attributes || Object.keys(n.event.attributes).length === 0) continue;\n const compact = compactAttributes(n.event.attributes, {\n maxLength: maxLen,\n redacted,\n });\n attrsHtml += `<h3>${escapeHtml(n.event.name)}</h3><pre class=\"json\">${escapeHtml(stableJson(compact, true))}</pre>`;\n }\n warnings.push(\n \"Attributes may still contain sensitive data; review exports before sharing.\",\n );\n }\n\n const css = `\nbody{font-family:system-ui,sans-serif;line-height:1.5;margin:1.5rem;max-width:960px;color:#111}\nh1{font-size:1.35rem}\nh2{font-size:1.1rem;margin-top:1.5rem}\ntable{border-collapse:collapse;margin:0.75rem 0}\nth,td{border:1px solid #ccc;padding:0.35rem 0.6rem;text-align:left}\nth{background:#f5f5f5}\npre.json{background:#f8f8f8;padding:0.75rem;overflow:auto;font-size:0.85rem}\nul.tree{list-style:none;padding-left:1rem}\nul.tree.nested{padding-left:1.25rem;border-left:1px solid #ddd;margin:0.25rem 0}\n.nm{font-weight:600}\n.meta{color:#555;font-size:0.9rem}\nfooter{margin-top:2rem;font-size:0.85rem;color:#555}\n`.trim();\n\n const html = `<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>${titleName}</title>\n<style>${css}</style>\n</head>\n<body>\n<header><h1>AgentInspect Run: ${titleName}</h1></header>\n<p class=\"note\">Generated locally by AgentInspect.</p>\n${includeMetadata ? `<section class=\"summary\"><h2>Summary</h2><table>${summaryRows.join(\"\")}</table>${confidenceHtml}</section>` : \"\"}\n<section class=\"tree\"><h2>Execution tree</h2>${tree.children.length > 0 ? renderTreeHtml(tree.children) : \"<p>No steps recorded.</p>\"}</section>\n${errorsHtml}\n${attrsHtml}\n<footer>Generated locally by AgentInspect. Review for sensitive data before sharing.</footer>\n</body>\n</html>`;\n\n return {\n format: \"html\",\n content: html,\n contentType: \"text/html\",\n fileExtension: \".html\",\n warnings,\n };\n}\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult } from \"./types.js\";\nimport {\n compactAttributes,\n escapeMarkdown,\n flattenTree,\n safeString,\n stableJson,\n} from \"./helpers.js\";\n\nfunction renderTreeAscii(nodes: InspectNode[], indent = \"\"): string {\n const lines: string[] = [];\n for (let i = 0; i < nodes.length; i++) {\n const n = nodes[i]!;\n const last = i === nodes.length - 1;\n const branch = last ? \"└─ \" : \"├─ \";\n const ev = n.event;\n const status = ev.status ?? \"?\";\n const dur =\n ev.durationMs !== undefined && Number.isFinite(ev.durationMs)\n ? `${ev.durationMs}ms`\n : \"-\";\n lines.push(`${indent}${branch}${escapeMarkdown(ev.name)} [${ev.kind}] ${status} (${dur})`);\n const nextIndent = indent + (last ? \" \" : \"│ \");\n if (n.children.length > 0) {\n const childStr = renderTreeAscii(n.children, nextIndent);\n if (childStr.length > 0) lines.push(childStr);\n }\n }\n return lines.join(\"\\n\");\n}\n\nexport function exportMarkdown(\n tree: InspectRunTree,\n options?: Partial<ExportOptions>,\n): ExportResult {\n const warnings: string[] = [];\n const includeMetadata = options?.includeMetadata ?? true;\n const includeAttributes = options?.includeAttributes ?? false;\n const includeErrors = options?.includeErrors ?? true;\n const maxLen = options?.maxAttributeLength ?? 500;\n const redacted = options?.redacted ?? true;\n\n const titleName = tree.name ?? tree.runId;\n const lines: string[] = [];\n lines.push(`# AgentInspect Run: ${escapeMarkdown(titleName)}`);\n lines.push(\"\");\n lines.push(\"Generated locally by AgentInspect. Review for sensitive data before sharing.\");\n lines.push(\"\");\n\n if (includeMetadata) {\n lines.push(\"## Summary\");\n lines.push(\"\");\n lines.push(`- **runId**: ${escapeMarkdown(tree.runId)}`);\n if (tree.name !== undefined) lines.push(`- **name**: ${escapeMarkdown(tree.name)}`);\n lines.push(`- **status**: ${escapeMarkdown(String(tree.status ?? \"unknown\"))}`);\n lines.push(\n `- **durationMs**: ${tree.durationMs !== undefined ? escapeMarkdown(String(tree.durationMs)) : \"-\"}`,\n );\n lines.push(\n `- **startedAt**: ${tree.startedAt !== undefined ? escapeMarkdown(String(tree.startedAt)) : \"-\"}`,\n );\n lines.push(\n `- **endedAt**: ${tree.endedAt !== undefined ? escapeMarkdown(String(tree.endedAt)) : \"-\"}`,\n );\n lines.push(`- **totalEvents**: ${tree.metadata.totalEvents}`);\n lines.push(\"\");\n lines.push(\"### Confidence breakdown\");\n lines.push(\"\");\n lines.push(\"| bucket | count |\");\n lines.push(\"| --- | --- |\");\n for (const k of Object.keys(tree.metadata.confidenceBreakdown).sort()) {\n const key = k as keyof typeof tree.metadata.confidenceBreakdown;\n lines.push(\n `| ${escapeMarkdown(key)} | ${tree.metadata.confidenceBreakdown[key]} |`,\n );\n }\n lines.push(\"\");\n lines.push(\"### Kind breakdown\");\n lines.push(\"\");\n lines.push(\"| kind | count |\");\n lines.push(\"| --- | --- |\");\n for (const k of Object.keys(tree.metadata.kinds).sort()) {\n const key = k as keyof typeof tree.metadata.kinds;\n const c = tree.metadata.kinds[key];\n if (c > 0) lines.push(`| ${escapeMarkdown(key)} | ${c} |`);\n }\n lines.push(\"\");\n }\n\n lines.push(\"## Execution tree\");\n lines.push(\"\");\n lines.push(\"```text\");\n lines.push(\n tree.children.length > 0 ? renderTreeAscii(tree.children) : \"(no steps)\",\n );\n lines.push(\"```\");\n lines.push(\"\");\n\n const flat = flattenTree(tree);\n const errors = flat.filter((n) => n.event.status === \"error\");\n if (includeErrors && errors.length > 0) {\n lines.push(\"## Errors\");\n lines.push(\"\");\n for (const n of errors) {\n const msg =\n n.event.attributes && typeof n.event.attributes.error === \"object\"\n ? safeString(\n (n.event.attributes.error as { message?: string }).message,\n maxLen,\n )\n : \"\";\n lines.push(\n `- **${escapeMarkdown(n.event.name)}** (${escapeMarkdown(n.event.eventId)}): ${escapeMarkdown(msg || \"error\")}`,\n );\n }\n lines.push(\"\");\n }\n\n if (includeAttributes) {\n lines.push(\"## Attributes (bounded)\");\n lines.push(\"\");\n for (const n of flat) {\n if (!n.event.attributes || Object.keys(n.event.attributes).length === 0) continue;\n const compact = compactAttributes(n.event.attributes, {\n maxLength: maxLen,\n redacted,\n });\n lines.push(`### ${escapeMarkdown(n.event.name)}`);\n lines.push(\"\");\n lines.push(\"```json\");\n lines.push(stableJson(compact, true));\n lines.push(\"```\");\n lines.push(\"\");\n }\n warnings.push(\n \"Attributes may still contain sensitive data; review exports before sharing.\",\n );\n }\n\n return {\n format: \"markdown\",\n content: lines.join(\"\\n\"),\n contentType: \"text/markdown\",\n fileExtension: \".md\",\n warnings,\n };\n}\n","import crypto from \"node:crypto\";\n\nimport type { InspectKind, InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult } from \"./types.js\";\nimport { EXPORT_PAYLOAD_VERSION } from \"./types.js\";\nimport { flattenTree } from \"./helpers.js\";\n\nexport interface OpenInferenceSpan {\n trace_id: string;\n span_id: string;\n parent_span_id?: string;\n name: string;\n /** Decimal string: epoch-nanosecond values exceed Number.MAX_SAFE_INTEGER. */\n start_time_unix_nano: string;\n end_time_unix_nano?: string;\n attributes: Record<string, unknown>;\n status?: {\n code: \"OK\" | \"ERROR\" | \"UNSET\";\n message?: string;\n };\n}\n\nexport interface OpenInferenceExport {\n exporter: \"agent-inspect\";\n format: \"openinference\";\n compatibility: \"openinference-compatible\";\n version: string;\n trace_id: string;\n spans: OpenInferenceSpan[];\n warnings: string[];\n}\n\nfunction hexFrom(seed: string, byteLen: number): string {\n return crypto.createHash(\"sha256\").update(seed, \"utf8\").digest(\"hex\").slice(0, byteLen * 2);\n}\n\n/**\n * Convert epoch milliseconds to exact epoch nanoseconds. Computed in BigInt\n * because realistic epochs exceed Number.MAX_SAFE_INTEGER once scaled to\n * nanoseconds (1.7e18 vs 9.0e15), which silently loses precision in doubles.\n */\nfunction unixNano(ms: number): bigint {\n const whole = Math.trunc(ms);\n const fractionNs = Math.round((ms - whole) * 1e6);\n return BigInt(whole) * 1_000_000n + BigInt(fractionNs);\n}\n\nfunction mapInspectKindToOI(\n kind: InspectKind,\n warnings: string[],\n): { openInferenceKind: string; ambiguousNote?: string } {\n switch (kind) {\n case \"LLM\":\n return { openInferenceKind: \"LLM\" };\n case \"TOOL\":\n return { openInferenceKind: \"TOOL\" };\n case \"CHAIN\":\n return { openInferenceKind: \"CHAIN\" };\n case \"RETRIEVER\":\n return { openInferenceKind: \"RETRIEVER\" };\n case \"AGENT\":\n return { openInferenceKind: \"AGENT\" };\n case \"DECISION\":\n warnings.push(\n `Ambiguous kind DECISION mapped to CHAIN for span compatibility (${EXPORT_PAYLOAD_VERSION}).`,\n );\n return { openInferenceKind: \"CHAIN\" };\n case \"RESULT\":\n warnings.push(\n `Ambiguous kind RESULT mapped to UNKNOWN for span compatibility (${EXPORT_PAYLOAD_VERSION}).`,\n );\n return { openInferenceKind: \"UNKNOWN\" };\n case \"ERROR\":\n warnings.push(`ERROR kind mapped to CHAIN for span compatibility.`);\n return { openInferenceKind: \"CHAIN\" };\n case \"LOG\":\n case \"LOGIC\":\n case \"RUN\":\n warnings.push(`${kind} mapped to CHAIN for span compatibility.`);\n return { openInferenceKind: \"CHAIN\" };\n default:\n warnings.push(`Unhandled InspectKind ${kind} mapped to UNKNOWN.`);\n return { openInferenceKind: \"UNKNOWN\" };\n }\n}\n\nexport function exportOpenInference(\n tree: InspectRunTree,\n options?: Partial<ExportOptions>,\n): ExportResult {\n const warnings: string[] = [\n \"OpenInference-compatible JSON export is experimental until verified against specific backends.\",\n \"This file was generated locally and not sent anywhere.\",\n ];\n\n const traceId = hexFrom(`trace:${tree.runId}`, 16);\n const includeAttributes = options?.includeAttributes ?? false;\n const maxLen = options?.maxAttributeLength ?? 500;\n const pretty = options?.pretty ?? true;\n\n const spans: OpenInferenceSpan[] = [];\n\n for (const n of flattenTree(tree)) {\n const ev = n.event;\n const spanId = hexFrom(`${tree.runId}:${ev.eventId}`, 8);\n const parentSpanHex = ev.parentId\n ? hexFrom(`${tree.runId}:${ev.parentId}`, 8)\n : undefined;\n const startNs = unixNano(ev.timestamp);\n let endNs: bigint | undefined;\n if (ev.durationMs !== undefined && Number.isFinite(ev.durationMs)) {\n endNs = startNs + unixNano(ev.durationMs);\n }\n\n const { openInferenceKind } = mapInspectKindToOI(ev.kind, warnings);\n\n const attrs: Record<string, unknown> = {\n \"openinference.span.kind\": openInferenceKind,\n \"agent_inspect.kind\": ev.kind,\n \"agent_inspect.confidence\": ev.confidence,\n \"agent_inspect.source.type\": ev.source.type,\n \"agent_inspect.run_id\": tree.runId,\n \"agent_inspect.event_id\": ev.eventId,\n \"agent_inspect.status\": ev.status ?? \"unset\",\n };\n if (ev.durationMs !== undefined) {\n attrs[\"agent_inspect.duration_ms\"] = ev.durationMs;\n }\n\n const meta = ev.attributes;\n if (meta?.model !== undefined && typeof meta.model === \"string\") {\n attrs[\"llm.model_name\"] = meta.model;\n }\n const tokens = meta?.tokens;\n if (tokens && typeof tokens === \"object\" && tokens !== null) {\n const inp = (tokens as { input?: number }).input;\n const outp = (tokens as { output?: number }).output;\n if (typeof inp === \"number\") attrs[\"llm.token_count.prompt\"] = inp;\n if (typeof outp === \"number\") attrs[\"llm.token_count.completion\"] = outp;\n }\n\n if (includeAttributes && meta && typeof meta === \"object\") {\n for (const [k, v] of Object.entries(meta)) {\n if (k === \"tokens\" || k === \"model\") continue;\n if (v !== undefined && v !== null && typeof v !== \"object\") {\n attrs[`agent_inspect.preview.${k}`] =\n typeof v === \"string\" ? v.slice(0, maxLen) : v;\n }\n }\n }\n\n let status: OpenInferenceSpan[\"status\"];\n if (ev.status === \"error\") {\n const msg =\n meta && typeof meta.error === \"object\" && meta.error !== null\n ? String((meta.error as { message?: string }).message ?? \"error\")\n : \"error\";\n status = { code: \"ERROR\", message: msg.slice(0, maxLen) };\n } else if (ev.status === \"ok\") {\n status = { code: \"OK\" };\n } else {\n status = { code: \"UNSET\" };\n }\n\n spans.push({\n trace_id: traceId,\n span_id: spanId,\n parent_span_id: parentSpanHex,\n name: ev.name,\n start_time_unix_nano: startNs.toString(),\n end_time_unix_nano: endNs?.toString(),\n attributes: attrs,\n status,\n });\n }\n\n const payload: OpenInferenceExport = {\n exporter: \"agent-inspect\",\n format: \"openinference\",\n compatibility: \"openinference-compatible\",\n version: EXPORT_PAYLOAD_VERSION,\n trace_id: traceId,\n spans,\n warnings,\n };\n\n return {\n format: \"openinference\",\n content: JSON.stringify(payload, null, pretty ? 2 : undefined),\n contentType: \"application/json\",\n fileExtension: \".openinference.json\",\n warnings,\n };\n}\n","import crypto from \"node:crypto\";\n\nimport type { InspectKind } from \"../types/inspect-event.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult } from \"./types.js\";\nimport { flattenTree } from \"./helpers.js\";\n\nfunction hexFrom(seed: string, byteLen: number): string {\n return crypto.createHash(\"sha256\").update(seed, \"utf8\").digest(\"hex\").slice(0, byteLen * 2);\n}\n\nfunction stringAttr(key: string, value: string): { key: string; value: { stringValue: string } } {\n return { key, value: { stringValue: value } };\n}\n\nfunction intAttr(key: string, value: number): { key: string; value: { intValue: string } } {\n return { key, value: { intValue: String(value) } };\n}\n\ntype OtlpAttr =\n | ReturnType<typeof stringAttr>\n | ReturnType<typeof intAttr>;\n\nfunction genAiOperationName(kind: InspectKind): string | undefined {\n switch (kind) {\n case \"LLM\":\n return \"generate_content\";\n case \"TOOL\":\n return \"execute_tool\";\n case \"AGENT\":\n return \"invoke_agent\";\n default:\n return undefined;\n }\n}\n\nexport function exportOtlpJson(\n tree: InspectRunTree,\n options?: Partial<ExportOptions>,\n): ExportResult {\n const warnings: string[] = [\n \"OTLP JSON export uses OTel GenAI-aligned attributes where applicable; experimental until verified against specific collectors.\",\n \"Not OTLP gRPC/protobuf — JSON mapping only. Generated locally; no network upload.\",\n ];\n\n const traceId = hexFrom(`trace:${tree.runId}`, 16);\n const includeAttributes = options?.includeAttributes ?? false;\n const maxLen = options?.maxAttributeLength ?? 500;\n const pretty = options?.pretty ?? true;\n\n const flat = flattenTree(tree);\n const spans: Record<string, unknown>[] = [];\n\n for (const n of flat) {\n const ev = n.event;\n const spanId = hexFrom(`${tree.runId}:${ev.eventId}`, 8);\n const parentSpanId = ev.parentId\n ? hexFrom(`${tree.runId}:${ev.parentId}`, 8)\n : undefined;\n\n const startNs = String(Math.round(ev.timestamp * 1e6));\n let endNs: string | undefined;\n if (ev.durationMs !== undefined && Number.isFinite(ev.durationMs)) {\n endNs = String(Math.round(ev.timestamp * 1e6 + ev.durationMs * 1e6));\n }\n\n const attrs: OtlpAttr[] = [\n stringAttr(\"agent_inspect.kind\", ev.kind),\n stringAttr(\"agent_inspect.confidence\", ev.confidence),\n stringAttr(\"agent_inspect.source.type\", ev.source.type),\n stringAttr(\"agent_inspect.run_id\", tree.runId),\n stringAttr(\"agent_inspect.event_id\", ev.eventId),\n stringAttr(\"agent_inspect.status\", ev.status ?? \"unset\"),\n ];\n\n if (ev.durationMs !== undefined) {\n attrs.push(intAttr(\"agent_inspect.duration_ms\", ev.durationMs));\n }\n\n const op = genAiOperationName(ev.kind);\n if (op !== undefined) {\n attrs.push(stringAttr(\"gen_ai.operation.name\", op));\n }\n\n const meta = ev.attributes;\n if (meta?.model !== undefined && typeof meta.model === \"string\") {\n attrs.push(stringAttr(\"gen_ai.request.model\", meta.model.slice(0, maxLen)));\n }\n\n const tokens = meta?.tokens;\n if (tokens && typeof tokens === \"object\" && tokens !== null) {\n const inp = (tokens as { input?: number }).input;\n const outp = (tokens as { output?: number }).output;\n if (typeof inp === \"number\") attrs.push(intAttr(\"gen_ai.usage.input_tokens\", inp));\n if (typeof outp === \"number\") attrs.push(intAttr(\"gen_ai.usage.output_tokens\", outp));\n }\n\n if (includeAttributes && meta && typeof meta === \"object\") {\n for (const [k, v] of Object.entries(meta)) {\n if (k === \"tokens\" || k === \"model\") continue;\n if (typeof v === \"string\" || typeof v === \"number\" || typeof v === \"boolean\") {\n attrs.push(\n stringAttr(\n `agent_inspect.preview.${k}`,\n typeof v === \"string\" ? v.slice(0, maxLen) : String(v),\n ),\n );\n }\n }\n }\n\n let statusCode = \"STATUS_CODE_UNSET\";\n let statusMessage: string | undefined;\n if (ev.status === \"error\") {\n statusCode = \"STATUS_CODE_ERROR\";\n statusMessage =\n meta && typeof meta.error === \"object\" && meta.error !== null\n ? String((meta.error as { message?: string }).message ?? \"error\").slice(0, maxLen)\n : \"error\";\n } else if (ev.status === \"ok\") {\n statusCode = \"STATUS_CODE_OK\";\n }\n\n const spanJson: Record<string, unknown> = {\n traceId,\n spanId,\n name: ev.name,\n kind: \"SPAN_KIND_INTERNAL\",\n startTimeUnixNano: startNs,\n attributes: attrs,\n status: {\n code: statusCode,\n ...(statusMessage !== undefined ? { message: statusMessage } : {}),\n },\n };\n\n if (parentSpanId !== undefined) {\n spanJson.parentSpanId = parentSpanId;\n }\n if (endNs !== undefined) {\n spanJson.endTimeUnixNano = endNs;\n }\n\n spans.push(spanJson);\n }\n\n const payload = {\n resourceSpans: [\n {\n resource: {\n attributes: [stringAttr(\"service.name\", \"agent-inspect\")],\n },\n scopeSpans: [\n {\n scope: { name: \"agent-inspect\" },\n spans,\n },\n ],\n },\n ],\n };\n\n return {\n format: \"otlp-json\",\n content: JSON.stringify(payload, null, pretty ? 2 : undefined),\n contentType: \"application/json\",\n fileExtension: \".otlp.json\",\n warnings,\n };\n}\n","import type { ExportFormat, ExportValidationResult } from \"./types.js\";\n\nconst EXPERIMENTAL =\n \"Experimental compatibility export — verify against your target tooling before relying on it.\";\n\nexport function validateExportContent(\n format: ExportFormat,\n content: string,\n): ExportValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [EXPERIMENTAL];\n\n if (format === \"markdown\") {\n if (!content.startsWith(\"# AgentInspect Run\")) {\n errors.push('Markdown export must start with \"# AgentInspect Run\"');\n }\n return { ok: errors.length === 0, format, errors, warnings };\n }\n\n if (format === \"html\") {\n const lower = content.toLowerCase();\n if (!lower.includes(\"<!doctype html\")) {\n errors.push(\"HTML export must include <!doctype html>\");\n }\n if (/<\\s*script\\b/i.test(content)) {\n errors.push(\"HTML export must not contain script tags\");\n }\n if (/<\\s*link\\b[^>]*href\\s*=/i.test(content)) {\n warnings.push(\"HTML export contains link tags — ensure no external stylesheets.\");\n }\n return { ok: errors.length === 0, format, errors, warnings };\n }\n\n if (format === \"openinference\") {\n let parsed: unknown;\n try {\n parsed = JSON.parse(content) as unknown;\n } catch {\n errors.push(\"OpenInference export is not valid JSON\");\n return { ok: false, format, errors, warnings };\n }\n if (!parsed || typeof parsed !== \"object\") {\n errors.push(\"OpenInference export JSON must be an object\");\n return { ok: false, format, errors, warnings };\n }\n const o = parsed as Record<string, unknown>;\n if (o.format !== \"openinference\") {\n errors.push('OpenInference export must include format: \"openinference\"');\n }\n if (!Array.isArray(o.spans)) {\n errors.push(\"OpenInference export must include a spans array\");\n }\n warnings.push(\"OpenInference-compatible JSON is not guaranteed for every backend.\");\n return { ok: errors.length === 0, format, errors, warnings };\n }\n\n if (format === \"otlp-json\") {\n let parsed: unknown;\n try {\n parsed = JSON.parse(content) as unknown;\n } catch {\n errors.push(\"OTLP JSON export is not valid JSON\");\n return { ok: false, format, errors, warnings };\n }\n if (!parsed || typeof parsed !== \"object\") {\n errors.push(\"OTLP JSON export must be an object\");\n return { ok: false, format, errors, warnings };\n }\n const o = parsed as Record<string, unknown>;\n if (!Array.isArray(o.resourceSpans)) {\n errors.push(\"OTLP JSON export must include resourceSpans array\");\n }\n warnings.push(\n \"OTLP JSON mapping uses OTel GenAI-aligned attributes where applicable; collectors may require transformation.\",\n );\n return { ok: errors.length === 0, format, errors, warnings };\n }\n\n errors.push(`Unsupported export format`);\n return { ok: false, format, errors, warnings };\n}\n","import type { InspectEvent, InspectKind, InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport type {\n StepStartedEvent,\n StepType,\n TraceEvent,\n} from \"../types.js\";\n\nimport { zeroKinds } from \"./helpers.js\";\n\nfunction stepTypeToInspectKind(t: StepType): InspectKind {\n switch (t) {\n case \"llm\":\n return \"LLM\";\n case \"tool\":\n return \"TOOL\";\n case \"decision\":\n return \"DECISION\";\n case \"run\":\n return \"CHAIN\";\n default:\n return \"LOGIC\";\n }\n}\n\nfunction mapStepStatus(\n s: \"success\" | \"error\" | undefined,\n): InspectEvent[\"status\"] | undefined {\n if (s === undefined) return \"running\";\n if (s === \"success\") return \"ok\";\n return \"error\";\n}\n\ntype StepAcc = {\n id: string;\n parentId?: string;\n name: string;\n type: StepType;\n startTime: number;\n timestamp: number;\n metadata?: Record<string, unknown>;\n status?: \"success\" | \"error\";\n endTime?: number;\n durationMs?: number;\n error?: { message: string; stack?: string };\n};\n\n/**\n * Build an {@link InspectRunTree} from v0.1 JSONL {@link TraceEvent} rows (manual tracing).\n * Does not mutate the input array or event objects.\n */\nexport function manualTraceEventsToRunTree(events: TraceEvent[]): InspectRunTree {\n const started = events.find((e) => e.event === \"run_started\");\n if (!started || started.event !== \"run_started\") {\n throw new Error(\"Invalid trace: missing run_started\");\n }\n\n const runId = started.runId;\n const runName = started.name;\n\n const completedAll = events.filter((e) => e.event === \"run_completed\");\n const lastCompleted = completedAll[completedAll.length - 1];\n\n let runStatus: InspectRunTree[\"status\"];\n if (lastCompleted === undefined) {\n runStatus = \"running\";\n } else if (lastCompleted.status === \"success\") {\n runStatus = \"ok\";\n } else {\n runStatus = \"error\";\n }\n\n const startedAt = started.startTime;\n const endedAt =\n lastCompleted !== undefined && runStatus !== \"running\" ? lastCompleted.endTime : undefined;\n const durationMs =\n lastCompleted !== undefined && Number.isFinite(lastCompleted.durationMs)\n ? lastCompleted.durationMs\n : undefined;\n\n const steps = new Map<string, StepAcc>();\n\n for (const e of events) {\n if (e.event !== \"step_started\") continue;\n const s = e as StepStartedEvent;\n steps.set(s.stepId, {\n id: s.stepId,\n parentId: s.parentId,\n name: s.name,\n type: s.type,\n startTime: s.startTime,\n timestamp: s.timestamp,\n metadata: s.metadata as Record<string, unknown> | undefined,\n });\n }\n\n for (const e of events) {\n if (e.event !== \"step_completed\") continue;\n const acc = steps.get(e.stepId);\n if (!acc) continue;\n acc.status = e.status;\n acc.endTime = e.endTime;\n acc.durationMs = e.durationMs;\n if (e.error?.message) {\n acc.error = e.error;\n }\n }\n\n const inspectNodes = new Map<string, InspectNode>();\n\n for (const acc of steps.values()) {\n const kind = stepTypeToInspectKind(acc.type);\n const status = mapStepStatus(acc.status);\n const attrs: Record<string, unknown> = { ...(acc.metadata ?? {}) };\n if (acc.error?.message) {\n attrs.error = acc.error;\n }\n\n const evt: InspectEvent = {\n eventId: acc.id,\n runId,\n parentId: acc.parentId,\n name: acc.name,\n kind,\n timestamp: acc.timestamp,\n status,\n durationMs: acc.durationMs,\n attributes: Object.keys(attrs).length > 0 ? attrs : undefined,\n confidence: \"explicit\",\n source: { type: \"manual\" },\n };\n\n inspectNodes.set(acc.id, { event: evt, children: [], depth: 0 });\n }\n\n const roots: InspectNode[] = [];\n const sortByStart = (a: InspectNode, b: InspectNode) =>\n a.event.timestamp - b.event.timestamp;\n\n for (const node of inspectNodes.values()) {\n const pid = node.event.parentId;\n if (pid !== undefined && inspectNodes.has(pid)) {\n inspectNodes.get(pid)!.children.push(node);\n } else {\n roots.push(node);\n }\n }\n\n roots.sort(sortByStart);\n for (const n of inspectNodes.values()) {\n n.children.sort(sortByStart);\n }\n\n const assignDepth = (n: InspectNode, depth: number) => {\n n.depth = depth;\n for (const c of n.children) assignDepth(c, depth + 1);\n };\n for (const r of roots) assignDepth(r, 0);\n\n const confidenceBreakdown = {\n explicit: 0,\n correlated: 0,\n heuristic: 0,\n unknown: 0,\n } as InspectRunTree[\"metadata\"][\"confidenceBreakdown\"];\n\n const kinds = zeroKinds();\n\n function countWalk(nodes: InspectNode[]): void {\n for (const n of nodes) {\n confidenceBreakdown[n.event.confidence] += 1;\n kinds[n.event.kind] += 1;\n if (n.children.length > 0) countWalk(n.children);\n }\n }\n countWalk(roots);\n\n return {\n runId,\n name: runName,\n status: runStatus,\n startedAt,\n endedAt,\n durationMs,\n children: roots,\n metadata: {\n totalEvents: inspectNodes.size,\n confidenceBreakdown,\n kinds,\n },\n };\n}\n","import type { ExportValidationResult } from \"./types.js\";\nimport { validateExportContent } from \"./validation.js\";\n\n/** Validate committed or exported OpenInference-compatible JSON fixtures. */\nexport function validateOpenInferenceFixture(content: string): ExportValidationResult {\n return validateExportContent(\"openinference\", content);\n}\n\n/** Validate committed or exported OTLP JSON fixtures. */\nexport function validateOtlpJsonFixture(content: string): ExportValidationResult {\n return validateExportContent(\"otlp-json\", content);\n}\n","/**\n * Semantic field checks beyond shape validation for standards fixtures.\n */\nimport type { ExportValidationResult } from \"./types.js\";\nimport { validateOpenInferenceFixture, validateOtlpJsonFixture } from \"./fixtures.js\";\n\nconst SEMCONV_PIN = \"OTEL_GEN_AI_SEMCONV_PIN\";\n\nfunction semanticWarnings(format: \"openinference\" | \"otlp-json\", parsed: Record<string, unknown>): string[] {\n const warnings: string[] = [];\n if (format === \"openinference\") {\n const spans = Array.isArray(parsed.spans) ? parsed.spans : [];\n if (spans.length > 0) {\n const first = spans[0] as Record<string, unknown>;\n if (first.trace_id === undefined && first.traceId === undefined) {\n warnings.push(\"OpenInference semantic: first span missing trace_id\");\n }\n }\n }\n if (format === \"otlp-json\") {\n warnings.push(`OTLP semantic validation pinned to ${SEMCONV_PIN} mapping docs`);\n }\n return warnings;\n}\n\nexport function validateOpenInferenceSemanticFixture(content: string): ExportValidationResult {\n const base = validateOpenInferenceFixture(content);\n if (!base.ok) return base;\n try {\n const parsed = JSON.parse(content) as Record<string, unknown>;\n return {\n ...base,\n warnings: [...base.warnings, ...semanticWarnings(\"openinference\", parsed)],\n };\n } catch {\n return base;\n }\n}\n\nexport function validateOtlpJsonSemanticFixture(content: string): ExportValidationResult {\n const base = validateOtlpJsonFixture(content);\n if (!base.ok) return base;\n try {\n const parsed = JSON.parse(content) as Record<string, unknown>;\n return {\n ...base,\n warnings: [...base.warnings, ...semanticWarnings(\"otlp-json\", parsed)],\n };\n } catch {\n return base;\n }\n}\n","/**\n * Documented OpenTelemetry GenAI semantic convention reference for OTLP JSON exports.\n * Local mapping only — no OTel SDK dependency in core.\n */\nexport const OTEL_GEN_AI_SEMCONV_PIN = {\n /** Human-readable pin label recorded in export metadata and docs. */\n version: \"1.36.0\",\n /** Public spec URL for maintainers validating attribute names. */\n specUrl: \"https://opentelemetry.io/docs/specs/semconv/gen-ai/\",\n /** Attribute families emitted by agent-inspect OTLP JSON export. */\n attributes: [\n \"gen_ai.operation.name\",\n \"gen_ai.request.model\",\n \"gen_ai.usage.input_tokens\",\n \"gen_ai.usage.output_tokens\",\n \"gen_ai.prompt\",\n \"gen_ai.completion\",\n ],\n} as const;\n","import type { InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { ExportOptions, ExportResult, ExportValidationResult } from \"./types.js\";\nimport { redactRunTreeForExport } from \"./redact-export.js\";\nimport { exportHtml } from \"./html-exporter.js\";\nimport { exportMarkdown } from \"./markdown-exporter.js\";\nimport { exportOpenInference } from \"./openinference-exporter.js\";\nimport { exportOtlpJson } from \"./otlp-json-exporter.js\";\nimport { validateExportContent } from \"./validation.js\";\n\nexport function mergeExportDefaults(options: ExportOptions): ExportOptions {\n return {\n format: options.format,\n includeMetadata: options.includeMetadata ?? true,\n includeAttributes: options.includeAttributes ?? false,\n includeErrors: options.includeErrors ?? true,\n pretty: options.pretty ?? true,\n redacted: options.redacted ?? true,\n maxAttributeLength: options.maxAttributeLength ?? 500,\n redactionProfile: options.redactionProfile ?? \"local\",\n };\n}\n\n/**\n * @experimental Compatibility-oriented export API. Exports are local-only and do not upload anywhere.\n * Subject to refinement before a future stability declaration.\n */\nexport function exportRunTree(tree: InspectRunTree, options: ExportOptions): ExportResult {\n const opts = mergeExportDefaults(options);\n const exportTree =\n opts.redactionProfile === \"local\"\n ? tree\n : redactRunTreeForExport(tree, { redactionProfile: opts.redactionProfile });\n switch (opts.format) {\n case \"markdown\":\n return exportMarkdown(exportTree, opts);\n case \"html\":\n return exportHtml(exportTree, opts);\n case \"openinference\":\n return exportOpenInference(exportTree, opts);\n case \"otlp-json\":\n return exportOtlpJson(exportTree, opts);\n default: {\n const _x: never = opts.format;\n throw new Error(`Unsupported export format: ${String(_x)}`);\n }\n }\n}\n\nexport function validateExport(result: ExportResult): ExportValidationResult {\n const base = validateExportContent(result.format, result.content);\n return {\n ok: base.ok,\n format: base.format,\n errors: base.errors,\n warnings: [...result.warnings, ...base.warnings],\n };\n}\n\nexport type {\n ExportFormat,\n ExportOptions,\n ExportResult,\n ExportValidationResult,\n TraceExporter,\n} from \"./types.js\";\nexport { EXPORT_PAYLOAD_VERSION } from \"./types.js\";\nexport * from \"./helpers.js\";\nexport { manualTraceEventsToRunTree } from \"./manual-trace-adapter.js\";\nexport { exportMarkdown } from \"./markdown-exporter.js\";\nexport { exportHtml } from \"./html-exporter.js\";\nexport type { OpenInferenceExport, OpenInferenceSpan } from \"./openinference-exporter.js\";\nexport { exportOpenInference } from \"./openinference-exporter.js\";\nexport { exportOtlpJson } from \"./otlp-json-exporter.js\";\nexport { validateExportContent } from \"./validation.js\";\nexport {\n validateOpenInferenceFixture,\n validateOtlpJsonFixture,\n} from \"./fixtures.js\";\nexport {\n validateOpenInferenceSemanticFixture,\n validateOtlpJsonSemanticFixture,\n} from \"./semantic-validation.js\";\nexport { OTEL_GEN_AI_SEMCONV_PIN } from \"./semconv.js\";\nexport { redactRunTreeForExport } from \"./redact-export.js\";\n","import type { TraceEvent } from \"./types.js\";\nimport type { RedactionProfile } from \"./types.js\";\nimport type { InspectRunTree } from \"./types/inspect-event.js\";\nimport { exportHtml } from \"./exporters/html-exporter.js\";\nimport { exportMarkdown } from \"./exporters/markdown-exporter.js\";\nimport { escapeHtml, escapeMarkdown } from \"./exporters/helpers.js\";\nimport { manualTraceEventsToRunTree } from \"./exporters/manual-trace-adapter.js\";\nimport {\n redactRunTreeForExport,\n redactTraceEventsForReport,\n} from \"./exporters/redact-export.js\";\nimport { buildRunTimeline, renderTimeline } from \"./timeline.js\";\nimport { buildRunWhatSummary, renderRunWhat } from \"./what.js\";\nimport {\n extractOutcomesFromTraceEvents,\n renderObservedOutcomesHtml,\n renderObservedOutcomesMarkdown,\n summarizeObservedOutcomes,\n} from \"./outcomes/index.js\";\n\nexport type ReportFormat = \"markdown\" | \"html\";\nexport type ReportSection = \"all\" | \"observations\" | \"what\" | \"timeline\" | \"tree\";\n\nexport interface ReportOptions {\n format: ReportFormat;\n includeAttributes?: boolean;\n includeErrors?: boolean;\n redactionProfile?: RedactionProfile;\n /** Include correlation ids in the what section (default true). */\n correlation?: boolean;\n /** Limit output to one section (`observations` shows observed outcomes only). */\n section?: ReportSection;\n}\n\nexport interface ReportResult {\n format: ReportFormat;\n content: string;\n contentType: string;\n fileExtension: string;\n}\n\nfunction resolveTree(\n events: TraceEvent[],\n profile: RedactionProfile,\n): InspectRunTree {\n const tree = manualTraceEventsToRunTree(events);\n return profile === \"local\"\n ? tree\n : redactRunTreeForExport(tree, { redactionProfile: profile });\n}\n\nfunction tailMarkdownSection(content: string, heading: string): string {\n const marker = `## ${heading}`;\n const idx = content.indexOf(marker);\n if (idx < 0) return \"\";\n return content.slice(idx).trimEnd();\n}\n\nfunction extractHtmlFragment(content: string, start: string, end: string): string {\n const startIdx = content.indexOf(start);\n if (startIdx < 0) return \"\";\n const endIdx = content.indexOf(end, startIdx + start.length);\n if (endIdx < 0) return content.slice(startIdx);\n return content.slice(startIdx, endIdx);\n}\n\nconst REPORT_HTML_CSS = `\nbody{font-family:system-ui,sans-serif;line-height:1.5;margin:1.5rem;max-width:960px;color:#111}\nh1{font-size:1.35rem}\nh2{font-size:1.1rem;margin-top:1.5rem}\npre{white-space:pre-wrap;background:#f8f8f8;padding:0.75rem;overflow:auto;font-size:0.9rem}\nul.tree{list-style:none;padding-left:1rem}\nul.tree.nested{padding-left:1.25rem;border-left:1px solid #ddd;margin:0.25rem 0}\n.nm{font-weight:600}\n.meta{color:#555;font-size:0.9rem}\nfooter{margin-top:2rem;font-size:0.85rem;color:#555}\n`.trim();\n\n/**\n * Build a local inspection report (markdown or HTML) from v0.1 trace events.\n * Composes `what`, timeline, and execution-tree sections.\n */\nexport function buildRunReport(\n events: TraceEvent[],\n options: ReportOptions,\n): ReportResult {\n const profile = options.redactionProfile ?? \"local\";\n const section = options.section ?? \"all\";\n const safeEvents = redactTraceEventsForReport(events, {\n redactionProfile: profile,\n });\n const outcomes = summarizeObservedOutcomes(\n extractOutcomesFromTraceEvents(safeEvents),\n );\n const observationsMarkdown = renderObservedOutcomesMarkdown(outcomes);\n const observationsHtml = renderObservedOutcomesHtml(outcomes);\n\n if (section === \"observations\") {\n if (options.format === \"markdown\") {\n return {\n format: \"markdown\",\n content: `## Observed outcomes\\n\\n${observationsMarkdown}\\n`,\n contentType: \"text/markdown\",\n fileExtension: \".md\",\n };\n }\n return {\n format: \"html\",\n content: `<!doctype html><html lang=\"en\"><head><meta charset=\"utf-8\"/><title>Observed outcomes</title><style>${REPORT_HTML_CSS}</style></head><body><h1>Observed outcomes</h1>${observationsHtml}</body></html>`,\n contentType: \"text/html\",\n fileExtension: \".html\",\n };\n }\n\n const whatSummary = buildRunWhatSummary(safeEvents);\n const whatText = renderRunWhat(whatSummary, {\n correlation: options.correlation !== false,\n });\n const timelineText = renderTimeline(buildRunTimeline(safeEvents));\n const tree = resolveTree(safeEvents, profile);\n\n const exportOpts = {\n includeMetadata: false,\n includeAttributes: options.includeAttributes === true,\n includeErrors: options.includeErrors !== false,\n redacted: true,\n redactionProfile: profile,\n maxAttributeLength: 500,\n };\n\n if (options.format === \"markdown\") {\n const treeMd = exportMarkdown(tree, exportOpts);\n const tail = tailMarkdownSection(treeMd.content, \"Execution tree\");\n const title = escapeMarkdown(whatSummary.name ?? whatSummary.runId);\n const lines = [\n `# AgentInspect Report: ${title}`,\n \"\",\n \"Generated locally by AgentInspect. Review for sensitive data before sharing.\",\n \"\",\n \"## What happened\",\n \"\",\n \"```text\",\n whatText,\n \"```\",\n \"\",\n \"## Timeline\",\n \"\",\n \"```text\",\n timelineText,\n \"```\",\n \"\",\n \"## Observed outcomes\",\n \"\",\n observationsMarkdown,\n \"\",\n ];\n if (tail) {\n lines.push(tail, \"\");\n } else {\n lines.push(\"## Execution tree\", \"\", \"(no steps)\", \"\");\n }\n\n return {\n format: \"markdown\",\n content: lines.join(\"\\n\"),\n contentType: \"text/markdown\",\n fileExtension: \".md\",\n };\n }\n\n const treeHtml = exportHtml(tree, exportOpts);\n const title = escapeHtml(whatSummary.name ?? whatSummary.runId);\n const treeSection = extractHtmlFragment(\n treeHtml.content,\n '<section class=\"tree\">',\n \"</section>\",\n );\n // The exporter emits Errors before Attributes, so the errors fragment must\n // stop at the attributes heading when both sections are present; ending at\n // <footer> would swallow the attributes section and duplicate it below.\n const errorsSectionEnd = treeHtml.content.includes(\n \"<h2>Attributes (bounded)</h2>\",\n )\n ? \"<h2>Attributes (bounded)</h2>\"\n : \"<footer>\";\n const errorsSection = treeHtml.content.includes(\"<h2>Errors</h2>\")\n ? extractHtmlFragment(treeHtml.content, \"<h2>Errors</h2>\", errorsSectionEnd)\n : \"\";\n const attrsSection = treeHtml.content.includes(\"<h2>Attributes (bounded)</h2>\")\n ? extractHtmlFragment(\n treeHtml.content,\n \"<h2>Attributes (bounded)</h2>\",\n \"<footer>\",\n )\n : \"\";\n\n const html = `<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<title>AgentInspect Report: ${title}</title>\n<style>${REPORT_HTML_CSS}</style>\n</head>\n<body>\n<header><h1>AgentInspect Report: ${title}</h1></header>\n<p class=\"note\">Generated locally by AgentInspect. Review for sensitive data before sharing.</p>\n<section class=\"what\"><h2>What happened</h2><pre>${escapeHtml(whatText)}</pre></section>\n<section class=\"timeline\"><h2>Timeline</h2><pre>${escapeHtml(timelineText)}</pre></section>\n<section class=\"observations\"><h2>Observed outcomes</h2>${observationsHtml}</section>\n${treeSection || \"<section class=\\\"tree\\\"><h2>Execution tree</h2><p>No steps recorded.</p></section>\"}\n${errorsSection}\n${attrsSection}\n<footer>Generated locally by AgentInspect. Review for sensitive data before sharing.</footer>\n</body>\n</html>`;\n\n return {\n format: \"html\",\n content: html,\n contentType: \"text/html\",\n fileExtension: \".html\",\n };\n}\n"]}
|
|
@@ -468,13 +468,14 @@ function parseTimestamp(v) {
|
|
|
468
468
|
function hasToken(hay, token) {
|
|
469
469
|
return hay.includes(token);
|
|
470
470
|
}
|
|
471
|
+
var ERROR_TOKEN_RE = /\.(error|failed)(\.|$)/;
|
|
471
472
|
function inferKind(eventName) {
|
|
472
473
|
if (hasToken(eventName, ".llm.")) return "LLM";
|
|
473
474
|
if (hasToken(eventName, ".tool.")) return "TOOL";
|
|
474
475
|
if (hasToken(eventName, ".agent.")) return "AGENT";
|
|
475
476
|
if (hasToken(eventName, ".retriever.")) return "RETRIEVER";
|
|
476
477
|
if (hasToken(eventName, ".result.")) return "RESULT";
|
|
477
|
-
if (
|
|
478
|
+
if (ERROR_TOKEN_RE.test(eventName)) {
|
|
478
479
|
return "ERROR";
|
|
479
480
|
}
|
|
480
481
|
return "LOG";
|
|
@@ -554,7 +555,7 @@ var EventNormalizer = class {
|
|
|
554
555
|
status = mapping.status;
|
|
555
556
|
} else if (mapping?.kind === "ERROR") {
|
|
556
557
|
status = "error";
|
|
557
|
-
} else if (
|
|
558
|
+
} else if (ERROR_TOKEN_RE.test(eventName)) {
|
|
558
559
|
status = "error";
|
|
559
560
|
} else if (mapping?.startsRun || mapping?.startsStep) {
|
|
560
561
|
status = "running";
|