[package]
name = "smooai-smooth-operator"
version = "1.22.11"
edition.workspace = true
license.workspace = true
repository.workspace = true
readme = "README.md"
description = "Reference core for smooth-operator: domain model + StorageAdapter seam over smooth-operator."

[lib]
name = "smooth_operator"

[dependencies]
# TODO: switch to crates.io once smooth-operator is published (roadmap Phase 0)
smooai-smooth-operator-core = { workspace = true }
async-trait = { workspace = true }
# Identity-intake tools: the park-and-resume channel pair + timeout-bounded wait
# (mirrors core's ConfirmationHook plumbing).
tokio = { workspace = true }
anyhow = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
chrono = { workspace = true }
uuid = { workspace = true }
# `AUTH_MODE=trusted`: decode the base64url(JSON) forwarded-identity blob.
base64 = { workspace = true }
# Embeddable-widget authContext HMAC-SHA256 verification (widget_auth).
hmac = { workspace = true }
sha2 = { workspace = true }
hex = { workspace = true }
# `fetch_url` built-in tool: HTTP GET + URL parsing for the SSRF guard.
# `blocking` adds the JWKS fetcher's synchronous HTTPS GET (run on a dedicated
# thread so `AuthVerifier::verify` can stay sync — see `auth::HttpJwksFetcher`).
reqwest = { workspace = true, features = ["blocking"] }
url = { workspace = true }
# `github_search` tool: live GitHub code/issue search via the GitHub API.
octocrab = { workspace = true }
# GitHub-App auth for `github_search` (build an `EncodingKey` from a PEM key).
jsonwebtoken = { workspace = true }
# Install the `ring` rustls CryptoProvider before the GitHub client's first TLS
# use (the workspace graph has both ring + aws-lc-rs, so rustls can't auto-pick).
rustls = { workspace = true }

# OpenTelemetry GenAI instrumentation (`telemetry.rs`): tracing spans mapped to
# OTLP via tracing-opentelemetry. The OTLP exporter is gated on
# OTEL_EXPORTER_OTLP_ENDPOINT so tests/binaries never need a live collector.
tracing = { workspace = true }
tracing-subscriber = { workspace = true }
tracing-opentelemetry = { workspace = true }
opentelemetry = { workspace = true }
opentelemetry_sdk = { workspace = true }
opentelemetry-otlp = { workspace = true }

[dev-dependencies]
tokio = { workspace = true }
# The telemetry TDD test installs a capturing tracing layer to assert on the
# recorded `gen_ai.*` span fields without a live OTLP collector.
tracing-subscriber = { workspace = true }
# Integration tests drive the runtime through the in-memory adapter (the
# conformance baseline). Dev-dep only — the lib has no backend dependency.
smooai-smooth-operator-adapter-memory = { path = "../adapters/in-memory" }
# The live-gateway e2e test (`tests/e2e_llm_smoo_ai.rs`) consumes the engine's
# `LlmClient::chat_stream` response, which is a `futures::Stream`.
futures-util = "0.3"
# Mock HTTP policy service for the HttpWidgetAuth tests (no network).
wiremock = { workspace = true }
