Back to Changelog
v0.13.0
March 27, 2026

OpenTelemetry Tracing & CLI Extraction

AddedChanged

#[0.13.0] - 2026-03-27

This release replaces the bespoke internal tracing engine with a full OpenTelemetry backend, extracts the daita CLI into a standalone daita-cli package, and substantially expands the unit test suite.

#Added

  • OpenTelemetry Tracing Backend

    The internal tracing engine has been rewritten on top of the OpenTelemetry SDK. TraceManager is now a thin facade over a TracerProvider with a multi-exporter pipeline:

    python
    TracerProvider
      ├── BatchSpanProcessor → BoundedInMemorySpanExporter   (powers local query APIs)
      ├── BatchSpanProcessor → DaitaSpanExporter              (dashboard, when configured)
      └── BatchSpanProcessor → [user exporters]               (Datadog / Jaeger / Honeycomb …)

    Trace IDs are W3C hex format (32-char trace ID, 16-char span ID). The existing agent.trace_id, agent.current_span_id, and all query methods (get_recent_operations, get_agent_metrics, get_workflow_communications, etc.) are fully preserved — no changes to user-facing code are required.

  • configure_tracing() — Custom Exporter API

    A new top-level function lets you attach any OTel-compatible exporter before creating agents, enabling first-class integration with observability platforms:

    python
    from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
    from daita.core.tracing import configure_tracing
     
    configure_tracing(exporters=[OTLPSpanExporter(endpoint="http://localhost:4317")])

    Call configure_tracing() once, before instantiating any Agent. Adding exporters after agents have been created is not supported.

  • otlp Extra

    A new optional extra installs the OTLP gRPC/HTTP exporter for use with Datadog, Jaeger, Honeycomb, and any other OTLP-compatible backend:

    bash
    pip install 'daita-agents[otlp]'

    opentelemetry-api and opentelemetry-sdk are now core dependencies (they are small and have no optional-install implications).

  • BoundedInMemorySpanExporter and DaitaSpanExporter (daita/core/otel_exporter.py)

    • BoundedInMemorySpanExporter — thread-safe, bounded in-memory span store (capped at 500 spans by default) that backs the local query APIs. Replaces the previous deque-based buffer.
    • DaitaSpanExporter — sends completed spans to the Daita dashboard API, replacing the old fire-and-forget DashboardReporter. Uses standard OTel BatchSpanProcessor semantics for reliable, non-blocking delivery.

#Changed

  • CLI extracted to daita-cli package

    All CLI source (daita/cli/) has been removed from daita-agents and now lives in the standalone daita-cli package. The daita command continues to work exactly as before — daita-cli is a core dependency and is installed automatically with pip install daita-agents.

    This separation keeps the daita-agents library free of CLI-only dependencies (click, complex deploy machinery) and allows the CLI to be versioned and distributed independently. No changes to existing daita <command> invocations are required.

  • opentelemetry-api and opentelemetry-sdk promoted to core dependencies

    Previously absent from the package, both OTel packages are now listed under [dependencies] in pyproject.toml. They are lightweight (no C extensions, no optional sub-dependencies) and are required by the tracing backend that runs for every agent.

  • click removed from core dependencies

    click was previously a core dependency due to CLI code living in this package. Now that the CLI is in daita-cli, click is no longer a direct dependency of daita-agents.