[package] license = "Apache-2.0" name = "xai-grok-telemetry" version = "0.1.0" edition.workspace = true description = "Telemetry engine: product events + Mixpanel emission + Sentry error reporting for Grok Build sessions" authors = ["xAI"] [features] default = [] default-bazel = [] memory-log = [] [dependencies] anyhow = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } strum = { workspace = true } tracing = { workspace = true } tracing-appender = "0.2.4" tracing-chrome = "0.7.2" tracing-subscriber = { workspace = true, features = [ "env-filter", "fmt", "json", "time", ] } chrono = { workspace = true } git2 = { version = "0.20", default-features = false, features = [ "vendored-libgit2", ] } reqwest = { workspace = true } url = { workspace = true } xai-grok-env = { workspace = true } xai-grok-secrets = { workspace = true } xai-mixpanel = { workspace = true } xai-grok-config = { workspace = true } xai-grok-sampler = { workspace = true } xai-token-estimation = { workspace = true } dirs = { workspace = true } sentry = { version = "0.42.0", default-features = false, features = [ "panic", "anyhow", "tracing", "backtrace", "contexts", "reqwest", "rustls", "debug-images", ] } # Single cross-edge: `events::ToolCallCompleted.outcome` reuses # `xai_file_utils::events::types::ToolOutcome` so the local event log and # the product telemetry event share the same enum surface. Semantically this enum # lives with the events module in data-collector; not worth a third crate. xai-file-utils = { path = "../xai-file-utils" } # `session_metrics::TraceUploadReason::from_upload_method` matches on the shared # `UploadMethod` enum (small, dependency-light types crate) so the reason->wire # mapping lives next to the trace-upload lifecycle events it labels. whoami = { workspace = true } uuid = { workspace = true, features = ["v5", "v7"] } obfstr = { workspace = true, optional = true } mid = "4.0.0" tokio = { workspace = true, features = ["macros", "sync", "rt"] } parking_lot = { workspace = true } xai-grok-auth = { workspace = true } opentelemetry = { workspace = true } opentelemetry_sdk = { workspace = true, features = [ "experimental_logs_batch_log_processor_with_async_runtime", "experimental_metrics_periodicreader_with_async_runtime", "rt-tokio-current-thread", ] } opentelemetry-otlp = { workspace = true } opentelemetry-http = { workspace = true } http = { workspace = true } bytes = { workspace = true } async-trait = { workspace = true } futures-executor = "0.3" tokio-stream = { workspace = true } tracing-opentelemetry = { workspace = true } [dev-dependencies] tonic = { workspace = true, features = ["transport"] } # In-memory log/metric exporters for the external-stream wire-shape tests. opentelemetry_sdk = { workspace = true, features = ["testing"] } # In-process OTLP collector fixture (tests/external_otlp.rs). axum = { workspace = true } opentelemetry-proto = { workspace = true } prost = { workspace = true } tokio = { workspace = true, features = ["macros", "net", "rt-multi-thread", "time"] } # Sets a symlink's own mtime (std's `set_modified` follows links) for prune tests. filetime = { workspace = true } futures-executor = "0.3" tempfile = { workspace = true } [lints] workspace = true