[workspace]
members = [".", "crates/embacle-mcp", "crates/embacle-server"]
[package]
name = "embacle"
version = "0.15.13"
edition = "2021"
license = "Apache-2.0"
description = "LLM runner library — wraps 12 AI CLI tools as pluggable LLM providers with agent loop, guardrails, and cost tracking"
repository = "https://github.com/dravr-ai/dravr-embacle"
homepage = "https://github.com/dravr-ai/dravr-embacle"
documentation = "https://docs.rs/embacle"
keywords = ["llm", "cli", "ai", "mcp", "openai"]
categories = ["command-line-utilities", "api-bindings"]
readme = "README.md"
exclude = [".claude/", ".githooks/", ".github/", "scripts/", "AGENTS.md", "crates/"]
[profile.release]
lto = "thin"
codegen-units = 1
panic = "abort"
strip = true
[workspace.lints.rust]
unsafe_code = "deny"
[workspace.lints.clippy]
all = { level = "deny", priority = -1 }
pedantic = { level = "deny", priority = -1 }
nursery = { level = "deny", priority = -1 }
cast_possible_truncation = "allow"
cast_sign_loss = "allow"
cast_precision_loss = "allow"
missing_const_for_fn = "allow"
significant_drop_tightening = "allow"
module_name_repetitions = "allow"
absolute_paths = "deny"
multiple_crate_versions = "allow"
missing_errors_doc = "allow"
must_use_candidate = "allow"
return_self_not_must_use = "allow"
redundant_pub_crate = "allow"
unnecessary_literal_bound = "allow"
[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]
[lib]
crate-type = ["lib", "staticlib"]
[features]
default = []
agui = []
copilot-headless = ["dep:agent-client-protocol-schema", "tokio/sync"]
openai-api = ["dep:reqwest", "tokio/sync"]
config-file = ["dep:toml", "dep:dirs"]
otel = ["dep:opentelemetry", "dep:opentelemetry_sdk"]
ffi = ["copilot-headless"]
[dependencies]
async-trait = "0.1"
base64 = "0.22"
bitflags = { version = "2", features = ["serde"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
tempfile = "3"
tokio = { version = "1.45", features = ["process", "io-util", "time", "rt", "rt-multi-thread", "macros", "fs"] }
tokio-stream = { version = "0.1", features = ["io-util"] }
tracing = "0.1"
uuid = { version = "1.22", features = ["v4", "serde"] }
which = "7"
agent-client-protocol-schema = { version = "0.12", optional = true }
reqwest = { version = "0.12", default-features = false, features = ["json", "stream", "rustls-tls"], optional = true }
toml = { version = "1.1", optional = true }
dirs = { version = "6", optional = true }
opentelemetry = { version = "0.32", optional = true }
opentelemetry_sdk = { version = "0.32", optional = true }
[dev-dependencies]
tokio = { version = "1.45", features = ["full", "test-util"] }
serde_json = "1.0"
[[example]]
name = "test_claude_e2e"
path = "examples/test_claude_e2e.rs"
[lints]
workspace = true