runx-runtime 0.6.19

Native Rust runtime for local runx execution, adapters, harness replay, receipts, and sandboxing.
Documentation
[package]
name = "runx-runtime"
version = "0.6.19"
edition.workspace = true
rust-version.workspace = true
description = "Native Rust runtime for local runx execution, adapters, harness replay, receipts, and sandboxing."
license.workspace = true
repository.workspace = true
homepage.workspace = true
readme = "README.md"
keywords = ["runx", "runtime", "agents", "sandbox", "mcp"]
categories = ["development-tools"]
include = ["Cargo.toml", "README.md", "src/**/*.rs"]
# Integration tests are compiled as a single binary (tests/integration.rs) so the
# crate and its heavy deps link once instead of once per test file. Each test file
# is a module of that binary; see .scafld/specs/active/test-surface-build-consolidation.md.
autotests = false

[lints]
workspace = true

[features]
default = []
async-http = ["dep:reqwest", "dep:tokio", "dep:rustls"]
cli-tool = ["async-http"]
mcp = ["dep:rmcp", "dep:tokio", "tokio/process", "tokio/io-util", "tokio/sync", "tokio/rt-multi-thread"]
# Expose the governed MCP server over streamable HTTP/SSE (rmcp's tower service
# driven by hyper). Inbound HTTP server surface; gated behind its own feature.
mcp-http-server = [
    "mcp",
    "rmcp/transport-streamable-http-server",
    "dep:bytes",
    "dep:http",
    "dep:http-body-util",
    "dep:hyper",
    "dep:hyper-util",
    "dep:tower-service",
]
a2a = []
agent = ["async-http", "catalog"]
catalog = ["cli-tool"]
external-adapter = []
http = ["async-http"]
thread-outbox-provider = []

[dependencies]
aes-gcm = "0.11.0"
base64 = "0.22.1"
bytes = { version = "1.11.1", optional = true }
http = { version = "1.4.0", optional = true }
http-body-util = { version = "0.1.3", optional = true }
runx-contracts.workspace = true
runx-core.workspace = true
runx-parser.workspace = true
runx-receipts.workspace = true
# gzip/brotli/deflate/zstd + http2 so the governed fetch transport negotiates and
# decodes like a real browser; a no-compression, http1-only client is a bot tell to
# Cloudflare and friends. The response cap measures DECODED bytes (streaming guard in
# read_limited_response_body), so a decompression bomb stays bounded.
reqwest = { version = "=0.13.4", default-features = false, features = ["rustls-no-provider", "json", "gzip", "brotli", "deflate", "zstd", "http2"], optional = true }
ring = "0.17.14"
# Drive rustls with the ring provider (already linked via `ring`) instead of
# reqwest's default aws-lc-rs, so the vendored aws-lc-sys C crypto blob is not
# compiled in. ring is then the single, unambiguous process-default provider.
rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12"], optional = true }
rustix = { version = "1.1.4", features = ["process"] }
rmcp = { version = "=1.8.0", default-features = false, features = ["client", "server"], optional = true }
# Drive rmcp's StreamableHttpService (a tower service) over a TCP listener for the
# MCP-over-HTTP server. Both crates are already in the tree via reqwest/rmcp.
hyper = { version = "=1.10.1", default-features = false, features = ["server", "http1"], optional = true }
# http1 only (MCP streamable-http is http1.1 + SSE); avoids pulling http2/h2 into
# the inbound server. service = TowerToHyperService, tokio = TokioIo.
hyper-util = { version = "=0.1.20", default-features = false, features = ["service", "tokio"], optional = true }
serde.workspace = true
serde_json.workspace = true
serde_norway.workspace = true
sha2.workspace = true
thiserror.workspace = true
tokio = { version = "=1.52.3", default-features = false, features = ["rt", "net", "time"], optional = true }
tower-service = { version = "0.3.3", optional = true }
url = "2.5.7"
wait-timeout = "0.2.1"

[dev-dependencies]
criterion = "0.7.0"
proptest = { version = "1.11.0", default-features = false, features = ["std"] }
tempfile = "3.23.0"

[lib]
name = "runx_runtime"
path = "src/lib.rs"

[[bin]]
name = "runx-harness-fixture-oracles"
path = "src/bin/runx-harness-fixture-oracles.rs"
test = false
bench = false

[[bin]]
name = "runx-mcp-session-probe"
path = "src/bin/runx-mcp-session-probe.rs"
test = false
bench = false

[[test]]
name = "integration"
path = "tests/integration.rs"

[[bench]]
name = "graph_throughput"
harness = false