embacle 0.10.2

LLM runner library — wraps AI CLI tools and SDKs as pluggable LLM providers
Documentation
# ABOUTME: Standalone LLM runner library wrapping AI CLI tools and SDKs as pluggable providers
# ABOUTME: Wraps CLI tools (Claude Code, Copilot, Cursor Agent, OpenCode, Gemini, Codex) and ACP (Copilot Headless)

[workspace]
members = [".", "crates/embacle-mcp", "crates/embacle-server"]

[package]
name = "embacle"
version = "0.10.2"
edition = "2021"
license = "Apache-2.0"
description = "LLM runner library — wraps AI CLI tools and SDKs as pluggable LLM providers"
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", "claude", "gemini"]
categories = ["command-line-utilities", "api-bindings"]
readme = "README.md"
exclude = [".claude/", ".githooks/", ".github/", "scripts/", "AGENTS.md", "crates/"]

[features]
default = []
# Enable Copilot Headless provider (ACP protocol via copilot --acp)
copilot-headless = ["dep:agent-client-protocol-schema", "tokio/sync"]
# Enable OpenAI-compatible HTTP API client runner (reqwest-based)
openai-api = ["dep:reqwest", "tokio/sync"]

[dependencies]
async-trait = "0.1"
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"
which = "7"

# Optional: ACP schema types for Copilot Headless (copilot --acp)
agent-client-protocol-schema = { version = "0.11", optional = true }

# Optional: HTTP client for OpenAI-compatible API runner
reqwest = { version = "0.12", default-features = false, features = ["json", "stream", "rustls-tls"], 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.rust]
unsafe_code = "deny"

[lints.clippy]
pedantic = { level = "warn", priority = -1 }
nursery = { level = "warn", priority = -1 }
cargo = { level = "warn", priority = -1 }

# Allow these clippy lints project-wide
module_name_repetitions = "allow"
missing_errors_doc = "allow"
must_use_candidate = "allow"
return_self_not_must_use = "allow"
redundant_pub_crate = "allow"
multiple_crate_versions = "allow"
unnecessary_literal_bound = "allow"