/** * Per-run tracer: spans, token totals, Mermaid/HTML/timeline exports, OTel-shaped JSON. */ import { type OTelExport } from "./otel"; import { toTimeline, toHtml, writeDebugBundle, type DebugBundlePaths } from "./reports"; export type SpanType = "model_call" | "tool_call" | "handoff" | "guardrail" | "retry" | "error"; export interface TraceSpan { type: SpanType; name: string; startedAt: number; endedAt?: number; durationMs?: number; metadata?: Record; } export interface TraceData { runId: string; agentName: string; startedAt: number; endedAt?: number; spans: TraceSpan[]; tokenUsage: { input: number; output: number; }; finalOutput?: unknown; error?: string; } export type SpanHook = (span: TraceSpan) => void; export declare class Tracer { readonly runId: string; agentName: string; readonly startedAt: number; endedAt?: number; spans: TraceSpan[]; tokenUsage: { input: number; output: number; }; finalOutput?: unknown; error?: string; private onSpan?; constructor(runId: string, agentName: string, onSpan?: SpanHook); startSpan(type: SpanType, name: string, metadata?: Record): TraceSpan; endSpan(span: TraceSpan, metadata?: Record): void; addTokenUsage(input: number, output: number): void; complete(finalOutput: unknown): void; fail(error: Error | string): void; toJSON(): TraceData; print(options?: { verbose?: boolean; timeline?: boolean; }): void; /** ASCII waterfall of span timings. */ toTimeline(): string; /** Pasteable Mermaid flowchart for https://mermaid.live */ toMermaid(): string; /** Self-contained HTML report (waterfall + metadata + Mermaid). */ toHtml(): string; /** * Write a debug bundle under `.clearloop/debug//`: * trace.json, timeline.txt, flow.mmd, report.html, events.jsonl, otel.json */ writeDebugBundle(options?: { dir?: string; events?: unknown[]; }): DebugBundlePaths; toOpenTelemetry(): OTelExport; } export type { OTelExport, DebugBundlePaths }; export { toTimeline, toHtml, writeDebugBundle }; //# sourceMappingURL=index.d.ts.map