import { type Span, type Tracer } from "@opentelemetry/api";
import type { GenerationOperation } from "../types/index.js";
/**
 * @description Reads which public API call the active span belongs to, following the span's ancestry up to a `generate`, `stream`, `provider.generate` or `provider.stream` span.
 * @returns {GenerationOperation | undefined} The enclosing operation, or `undefined` when no such span is active.
 */
export declare function activeOperation(): GenerationOperation | undefined;
/**
 * @description Reports whether a `generate` or `stream` span started inside another operation's span tree.
 * @param span {Span} - Span returned by a scrubbed tracer.
 * @returns {boolean} `true` when the span is nested in an enclosing operation, `false` for a trace root.
 */
export declare function isNestedOperation(span: Span): boolean;
/**
 * @description Resolves a tracer whose spans record exceptions as type and message only, without stack traces or product-name references that would reach trace backends as event metadata.
 * @param name {string} - Instrumentation scope name.
 * @returns {Tracer} A tracer delegating to the globally registered provider.
 */
export declare function scrubbedTracer(name: string): Tracer;
/**
 * Pre-resolved tracers cached at module load.
 *
 * Module-load timing is intentional and safe: `trace.getTracer(name)` from
 * `@opentelemetry/api` always returns a proxy that defers to whatever
 * `TracerProvider` is registered globally at the moment a span is created.
 * If the OTel SDK initializes *after* this module is imported (the common
 * case — telemetry setup typically runs once at app boot, after lazy
 * imports have already pulled this file), the tracer reference is still
 * valid; spans created via it correctly route to the SDK once registered.
 *
 * Pre-SDK calls produce a noop span — `span.end()` etc. are valid; nothing
 * is exported. This is OTel's documented contract:
 * https://opentelemetry.io/docs/specs/otel/trace/api/#tracerprovider
 *
 * If a future refactor moves to a non-proxy TracerProvider API (e.g. a
 * custom provider where `getTracer` returns the live instance), revisit
 * this file and switch to lazy accessors.
 */
export declare const tracers: {
    readonly sdk: Tracer;
    readonly provider: Tracer;
    readonly generation: Tracer;
    readonly decision: Tracer;
    readonly stream: Tracer;
    readonly http: Tracer;
    readonly mcp: Tracer;
    readonly memory: Tracer;
    readonly redis: Tracer;
    readonly factory: Tracer;
    readonly rag: Tracer;
    readonly context: Tracer;
    readonly middleware: Tracer;
    readonly processor: Tracer;
    readonly file: Tracer;
    readonly autoresearch: Tracer;
    readonly auth: Tracer;
    readonly workflow: Tracer;
};
