[package]
name = "shadow-diff"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
authors.workspace = true
keywords.workspace = true
categories.workspace = true
description = "Behavior contracts for AI agents — tested in your PR, enforced at runtime. Core engine: parser, writer, content-addressed store, replay, and nine-axis behavioral differ."
documentation = "https://docs.rs/shadow-diff"
readme = "../../README.md"
include = [
"src/**/*.rs",
"src/**/*.sql",
"Cargo.toml",
"LICENSE-APACHE",
]
[package.metadata.docs.rs]
features = ["python"]
rustdoc-args = ["--cfg", "docsrs"]
[lib]
name = "shadow_core"
crate-type = ["cdylib", "rlib"]
[features]
default = []
python = ["dep:pyo3", "dep:pythonize"]
extension = ["python"]
[dependencies]
serde = { version = "=1.0.228", features = ["derive"] }
serde_json = { version = "=1.0.133", features = ["preserve_order"] }
sha2 = "=0.10.9"
tokio = { version = "=1.52.1", features = ["rt-multi-thread", "macros", "sync", "fs", "io-util"] }
async-trait = "=0.1.89"
rusqlite = { version = "=0.32.1", features = ["bundled"] }
thiserror = "=2.0.18"
rand = "=0.8.6"
rand_distr = "=0.4.3"
statrs = "=0.18.0"
tracing = "=0.1.41"
unicode-normalization = "=0.1.24"
pyo3 = { version = "=0.24.2", features = ["abi3-py311"], optional = true }
pythonize = { version = "=0.24.0", optional = true }
[dev-dependencies]
insta = { version = "=1.41.1", features = ["yaml", "json"] }
tempfile = "=3.14.0"
proptest = "=1.6.0"
tokio = { version = "=1.52.1", features = ["rt-multi-thread", "macros", "test-util", "time"] }