[package]
name         = "indusagi-core"
version.workspace      = true
edition.workspace      = true
rust-version.workspace = true
license.workspace      = true
authors.workspace      = true
repository.workspace   = true
description  = "Cross-cutting primitives every indusagi crate depends on: cancellation, env registry, brand, locator, canonical-JSON, version, ids, errors, re-iterable channel."
# Recommended crates.io listing fields — inherited from [workspace.package] so the
# whole tree stays DRY. `readme` is per-crate (a README must live inside the package
# dir to be bundled in the sdist; each crate ships a tiny one pointing at the root).
homepage.workspace     = true
keywords.workspace     = true
categories.workspace   = true
readme       = "README.md"

[dependencies]
# tokio-util's CancellationToken needs the `sync` feature (the workspace pin is
# default-features off, so opt in here — this crate is the only cancel surface).
tokio        = { workspace = true }
tokio-util   = { workspace = true, features = ["rt"] }   # CancellationToken; `rt` pulls in the `sync` cancel module
tokio-stream = { workspace = true }
futures      = { workspace = true }
async-stream = { workspace = true }
serde        = { workspace = true }
serde_json   = { workspace = true }
sha2         = { workspace = true }
hex          = { workspace = true }
ulid         = { workspace = true }
thiserror    = { workspace = true }

[dev-dependencies]
tokio = { workspace = true, features = ["full", "test-util"] }
criterion = { workspace = true }

# §6.3 hot path: canonical_json encode + content_hash (sha256) on a session node.
[[bench]]
name    = "session_hash"
harness = false
