import { type SpanProcessor } from '@opentelemetry/sdk-trace-base'; import { type MetricReader } from '@opentelemetry/sdk-metrics'; import type { LlmGenerationEvent, LlmRunSpan, LlmStepSpan, LlmToolSpan, LlmToolSpanContext, LlmTraceSink, Logger } from '@cat-factory/kernel'; export interface NodeOtelSinkConfig { /** OTLP/HTTP base URL, e.g. `http://collector:4318` (the `/v1/*` paths are appended). */ endpoint: string; /** Extra headers merged onto every OTLP request (auth tokens, tenant ids, …). */ headers?: Record; /** OTLP resource `service.name`; defaults to `cat-factory`. */ serviceName?: string; /** Optional logger for swallowed errors. */ logger?: Logger; /** Test seam: override the span processor (e.g. a SimpleSpanProcessor over an in-memory exporter). */ spanProcessor?: SpanProcessor; /** Test seam: override the metric reader (e.g. one over an InMemoryMetricExporter). */ metricReader?: MetricReader; } export declare class NodeOtelTraceSink implements LlmTraceSink { private readonly tracerProvider; private readonly meterProvider; private readonly idGenerator; private readonly logger?; private readonly startMappedSpan; private readonly tokenCounter; private readonly durationHistogram; constructor(config: NodeOtelSinkConfig); recordGeneration(event: LlmGenerationEvent): void; recordToolSpans(context: LlmToolSpanContext, spans: LlmToolSpan[]): void; /** The settled run's root + step spans: the parents everything else already named. */ recordRunSpans(run: LlmRunSpan, steps: LlmStepSpan[]): void; private emitSpan; /** Flush any buffered spans/metrics (e.g. before shutdown). Best-effort. */ forceFlush(): Promise; /** Shut the providers down, flushing first. Wire into the facade's stop path. */ shutdown(): Promise; private warn; } /** Build an SDK-backed {@link NodeOtelTraceSink}. The Node/local facades' OTLP exporter. */ export declare function createNodeOtelSink(config: NodeOtelSinkConfig): NodeOtelTraceSink; //# sourceMappingURL=node.d.ts.map