/**
 * OTEL span exporter — streams spans to an OTLP/HTTP collector.
 *
 * Reads OTEL_EXPORTER_OTLP_ENDPOINT + OTEL_EXPORTER_OTLP_HEADERS from env
 * when no explicit config is given. Batches spans and flushes periodically
 * or when the batch fills. No @opentelemetry SDK dependency — minimal
 * OTLP/JSON serializer (~120 LOC) using the existing otel.ts helpers.
 */
export interface OtelExportConfig {
    /** OTLP endpoint. Reads OTEL_EXPORTER_OTLP_ENDPOINT env by default. */
    endpoint?: string;
    /** OTLP headers. Reads OTEL_EXPORTER_OTLP_HEADERS env by default. */
    headers?: Record<string, string>;
    /** Batch size before flush. Default 64. */
    batchSize?: number;
    /** Flush interval ms. Default 5000. */
    flushIntervalMs?: number;
    /** Resource attributes stamped on every export. */
    resourceAttributes?: Record<string, string | number | boolean>;
    /** Service name. Default 'agent-eval'. */
    serviceName?: string;
}
export interface OtelExporter {
    /** Called by the TraceEmitter on every span close. */
    exportSpan(span: ExportableSpan): void;
    /** Force flush pending spans. */
    flush(): Promise<void>;
    /** Shutdown cleanly — flushes remaining spans and stops the timer. */
    shutdown(): Promise<void>;
}
export interface ExportableSpan {
    traceId: string;
    spanId: string;
    parentSpanId?: string;
    name: string;
    kind: string;
    startedAt: number;
    endedAt?: number;
    status?: string;
    error?: string;
    model?: string;
    inputTokens?: number;
    outputTokens?: number;
    costUsd?: number;
    attributes?: Record<string, unknown>;
}
/**
 * Create an OTEL exporter. Returns undefined when no endpoint is configured
 * (neither via config nor env) — callers should check before attaching.
 */
export declare function createOtelExporter(config?: OtelExportConfig): OtelExporter | undefined;
//# sourceMappingURL=otel-export.d.ts.map