/**
 * OBSERVE.1 — OpenTelemetry OTLP/JSON export.
 *
 * Subset of the OTLP/JSON trace format (spec:
 * https://opentelemetry.io/docs/specs/otel/protocol/otlp/#otlpjson) —
 * enough for AgentOps / LangSmith / Jaeger to import a single run's
 * timeline as a trace with one span per primitive call.
 *
 * ID derivation (locked):
 *
 *   trace_id  =  sha256(runId).slice(0, 32)              // 16 bytes / 32 hex
 *   span_id   =  sha256(runId + ':' + stepIdx).slice(0, 16)  // 8 bytes / 16 hex
 *
 * Hex-string IDs satisfy the OTLP/JSON encoding spec (the binary protocol
 * uses raw bytes; the JSON encoding uses hex strings).
 *
 * Imports from: node:crypto, ./trace_types.js.
 * Imported by: ./trace_reader.ts.
 */
import type { TraceTimeline } from './trace_types.js';
interface OtelAttrValue {
    stringValue?: string;
    intValue?: string;
}
interface OtelAttr {
    key: string;
    value: OtelAttrValue;
}
interface OtelSpan {
    trace_id: string;
    span_id: string;
    name: string;
    start_time_unix_nano: string;
    end_time_unix_nano: string;
    status: {
        code: 'STATUS_CODE_OK' | 'STATUS_CODE_ERROR';
        message?: string;
    };
    attributes: OtelAttr[];
}
export interface OtelExport {
    resourceSpans: {
        resource: {
            attributes: OtelAttr[];
        };
        scopeSpans: {
            scope: {
                name: string;
                version: string;
            };
            spans: OtelSpan[];
        }[];
    }[];
}
/** Convert a TraceTimeline to OTLP/JSON. trace_id = 32 hex; span_id = 16 hex. */
export declare function toOtel(t: TraceTimeline): OtelExport;
export {};
//# sourceMappingURL=otel_export.d.ts.map