[package]
name = "libra"
version = "0.17.711"
edition = "2024"

[features]
default        = []
worktree-fuse  = []   # Unix FUSE-backed worktree commands (optional)
test-network   = []   # L2: tests requiring outbound network but no secrets
test-live-ai   = []   # L3: tests calling real LLM APIs
test-live-cloud = []  # L3: tests hitting real D1/R2 endpoints
test-provider  = []   # deterministic hidden provider for local TUI automation tests
subagent-scaffold = []  # CEX-S2-10 schema-only scaffold (Step 2 sub-agent contracts; gated on CP-4 in production — see docs/improvement/agent.md "Step 2 audit closure")

[dependencies]
uuid = { version = "1.23.1", features = ["v4", "v5", "v7"] }
git-internal = "0.7.4"
anyhow = "1.0.102"
byte-unit = "5.2.0"
byteorder = "1.5.0"
bytes = "1.11.1"
object_store = { version = "0.13.2", features = ["aws", "azure", "gcp", "http"] }
async-trait = "0.1.89"
chrono = { version = "0.4.44", features = ["serde"] }
clap = { version = "4.6.1", features = ["derive"] }
colored = "3.1.1"
flate2 = "1.1.9"  # add features = ["zlib"] if slow
futures = "0.3.32"
futures-util = "0.3.32"
hex = "0.4.3"
http = "1.4.0"
ignore = "0.4.25"
indicatif = "0.18.4"
lazy_static = "1.5.0"
lru-mem = "0.3.0"
once_cell = "1.21.4"
openssl = { version = "0.10.78", features = ["vendored"] }
regex = "1.12.3"
reqwest = { version = "0.13.2", default-features = false, features = [
    "stream",
    "json",
    "query",
    "rustls"
]}
ring = "0.17.14"
rpassword = "7.4.0"
scopeguard = "1.2.0"
sea-orm = { version = "1.1.20", features = [
    "sqlx-sqlite",
    "runtime-tokio-rustls",
    "macros",
]}
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.149"
sha1 = "0.11.0"
thiserror = "2.0.18"
tokio = { version = "1.52.1", features = [
    "rt-multi-thread",
    "rt",
    "macros",
    "process"
]}
tokio-util = { version = "0.7.18", features = ["io"] }
tokio-tungstenite = { version = "0.29.0", features = ["native-tls"] }
toml = "0.8.23"
tracing = "0.1.44"
tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
url = "2.5.8"
walkdir = "2.5.0"
wax = "0.7.0"
diffs = "0.5.1"
path-absolutize = "3.1.1"
infer = "0.19.0"
pathdiff = "0.2.3"
crc32fast = "1.5.0"
dirs = "6.0.0"
dagrs = "0.8.1"
rig-core = { version = "0.35.0", default-features = false, features = ["rmcp", "reqwest", "rustls"] }
rmcp = { version = "1.5.0", features = [
    "macros",
    "transport-streamable-http-server",
    "transport-streamable-http-server-session",
    "transport-io"
] }
hyper-util = { version = "0.1.20", features = ["full"] }
axum = "0.8.9"
tower = "0.5.3"
tower-http = { version = "0.6.8", features = ["fs"] }
rust-embed = { version = "8.11.0", features = ["mime-guess", "include-exclude"] }
mime_guess = "2.0.5"
tempfile = "3.27.0"

# TUI
ratatui = "0.30.0"
crossterm = { version = "0.29.0", features = ["bracketed-paste", "event-stream"] }
tokio-stream = { version = "0.1.18", features = ["sync"] }
async-stream = "0.3.6"
futures-core = "0.3.32"

# Diff parsing
diffy = "0.4.2"
shlex = "1.3.0"
tree-sitter = "0.26.8"
tree-sitter-bash = "0.25"
tree-sitter-rust = "0.24"

# Markdown rendering
pulldown-cmark = "0.13.3"

# Unicode handling
unicode-width = "0.2.2"
libvault = { version = "0.2.2", features = ["storage_sqlite"] }
base64 = "0.22.1"

[target.'cfg(unix)'.dependencies] # only on Unix
libfuse-fs = "0.1.13"
pager = "0.16.1"
libc = "0.2"
rfuse3 = { version = "0.0.8", features = ["tokio-runtime", "unprivileged"] }

[dev-dependencies]
serial_test = { version = "3.4.0", default-features = false, features = ["async"] }
tokio = { version = "1.52.1", features = [
    "rt-multi-thread",
    "rt",
    "macros",
    "process"
]}
testcontainers = { version = "0.27.3", features = [
    "http_wait",
    "reusable-containers",
] }
reqwest = { version = "0.13.2", default-features = false, features = ["blocking", "query", "rustls"] }
assert_cmd = "2.2.1"
pgp = "0.19.0"
gag = "1.0.0"
portable-pty = "0.9.0"

# Compatibility-surface integration tests live under tests/compat/. Cargo's
# default test discovery only picks up *.rs directly under tests/, so each
# compat surface file must be registered here.
[[test]]
name = "compat_stash_subcommand_surface"
path = "tests/compat/stash_subcommand_surface.rs"

[[test]]
name = "compat_bisect_subcommand_surface"
path = "tests/compat/bisect_subcommand_surface.rs"

[[test]]
name = "compat_worktree_delete_dir"
path = "tests/compat/worktree_delete_dir.rs"

[[test]]
name = "compat_checkout_alias_help"
path = "tests/compat/checkout_alias_help.rs"

[[test]]
name = "compat_matrix_alignment"
path = "tests/compat/matrix_alignment.rs"

[[test]]
name = "compat_branch_lossy_wrapper_guard"
path = "tests/compat/branch_lossy_wrapper_guard.rs"

[[test]]
name = "compat_lfs_client_production_unwrap_guard"
path = "tests/compat/lfs_client_production_unwrap_guard.rs"

[[test]]
name = "compat_config_production_unwrap_guard"
path = "tests/compat/config_production_unwrap_guard.rs"

[[test]]
name = "compat_head_production_unwrap_guard"
path = "tests/compat/head_production_unwrap_guard.rs"

[[test]]
name = "compat_util_production_unwrap_guard"
path = "tests/compat/util_production_unwrap_guard.rs"

[[test]]
name = "compat_client_storage_production_unwrap_guard"
path = "tests/compat/client_storage_production_unwrap_guard.rs"

[[test]]
name = "compat_extra_production_unwrap_guard"
path = "tests/compat/extra_production_unwrap_guard.rs"

[[test]]
name = "compat_all_production_unwrap_guard"
path = "tests/compat/all_production_unwrap_guard.rs"

[[test]]
name = "compat_agent_run_non_exhaustive_guard"
path = "tests/compat/agent_run_non_exhaustive_guard.rs"
