[package]
name = "fault-cli"
authors = ["Sylvain Hellegouarch <sylvain@rebound.how>"]
description = "fault CLI"
keywords = ["fault", "ebpf"]
readme = "README.md"
repository.workspace = true
license-file.workspace = true
edition.workspace = true
rust-version.workspace = true
include.workspace = true
version.workspace = true
[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs", "--generate-link-to-definition"]
[dependencies]
axum = { version = "0.8", features = ["http2", "json", "macros"] }
tokio = { version = "1.45", features = ["full", "tracing", "sync"] }
tonic = { version = "0.13", features = ["transport"] }
tower = { version = "0.5.2", features = ["full", "make", "util"] }
hyper = { version = "1.6", features = ["client", "server", "full"] }
anyhow = "1.0"
thiserror = "2.0"
clap = { version = "4.5.39", features = ["derive", "env"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
tracing-subscriber = { version = "=0.3.19", features = ["fmt", "env-filter", "json"] }
prost = "0.13"
prost-types = "0.13"
futures = "0.3"
rand = "0.9"
tokio-stream = "0.1"
rand_distr = "0.5"
bytes = "1.10.1"
async-trait = "0.1.88"
serde_yaml = "0.9.34"
url = "2.5.4"
oneshot = "0.1.11"
tracing-appender = "0.2.3"
hickory-resolver = "0.25"
chrono = { version = "0.4.41", features = ["serde"] }
libc = "0.2.172"
tracing-log = "0.2.0"
reqwest = { version = "0.12.16", features = ["stream", "json"] }
tokio-util = { version = "0.7.15", features = ["compat"] }
hyper-util = "0.1.13"
pin-project = "1.1.10"
async-std-resolver = "0.24.4"
local-ip-address = "0.6.5"
tower-http = { version = "0.6.4", features = ["compression-gzip", "decompression-gzip", "trace"] }
colorful = "0.3.2"
walkdir = "2.5.0"
async-stream = "0.3.6"
prettytable = "0.10.0"
tera = { version = "1.20.0", optional = true }
governor = "0.10"
opentelemetry = "0.29"
opentelemetry-appender-tracing = "0.29"
opentelemetry-semantic-conventions = { version = "0.29", features = ["semconv_experimental"] }
opentelemetry-stdout = "0.29"
opentelemetry-otlp = { version = "0.29", features = ["grpc-tonic"] }
opentelemetry_sdk = { version = "0.29", features = ["rt-tokio"] }
tracing-opentelemetry = "0.30"
axum-tracing-opentelemetry = "0.28"
tracing = { version = "0.1.41", features = ["attributes"] }
openssl = { version = "0.10", features = ["vendored"] }
log = "0.4.27"
parse_duration = "2.1.1"
chrono-humanize = "0.2.3"
indicatif = { version = "0.17.11", features = ["tokio", "improved_unicode"] }
tokio-rustls = "0.26.2"
rustls-pki-types = "1.12.0"
rustls-native-certs = "0.8.1"
rustls-platform-verifier = "0.6.0"
arc-swap = "1.7.1"
uuid = { version = "1.17.0", features = ["fast-rng", "serde", "v4"] }
kanal = "0.1.1"
scc = "2.3.4"
http = "1.3.1"
minijinja = { version = "2.10.2", features = ["loader"], optional = true }
openapiv3 = { version = "2.1.0", optional = true }
oas3 = { version = "0.16.1", optional = true }
percent-encoding = { version = "2.3.1", optional = true }
regex = { version = "1.11.1", default-features = false, features = ["std"], optional = true }
swiftide = { version = "0.28.1", optional = true, features = ["duckdb", "fastembed", "ollama", "openai", "qdrant", "tree-sitter", "open-router", "gemini"] }
swiftide-macros = { version = "0.28.1", optional = true }
swiftide-core = { version = "0.28.1", optional = true }
swiftide-agents = { version = "0.28.1", optional = true, features = ["mcp"] }
swiftide-indexing = { version = "0.28.1", features = ["tree-sitter"], optional = true }
duckdb = { version = "1.2.2", optional = true, features = ["bundled"] }
ignore = { version = "0.4.23", optional = true }
similar = { version = "2.7.0", optional = true, features = ["serde"] }
inquire = { version = "0.7.5", optional = true }
derive_builder = { version = "0.20.2", optional = true }
similar-string = { version = "1.4.3", optional = true }
pulldown-cmark = { version = "0.13.0", default-features = false, optional = true }
pulldown-cmark-to-cmark = { version = "21.0.0", default-features = false, optional = true }
rustls = { version = "0.23.27", features = ["ring"], optional = true }
rmcp = { version = "0.1.5", optional = true, features = ["transport-io"] }
tree-sitter = { version = "0.25.6", optional = true }
tree-sitter-python = { version = "0.23.6", optional = true }
tree-sitter-rust = { version = "0.24.0", optional = true }
tree-sitter-javascript = { version = "0.23.1", optional = true }
tree-sitter-go = { version = "0.23.4", optional = true }
tree-sitter-yaml = { version = "0.7.1", optional = true }
schemars = { version = "0.9.0", optional = true }
qdrant-client = { version = "1.14.0", optional = true }
kube = { version = "1.1.0", features = ["jsonpatch"], optional = true }
k8s-openapi = { version = "0.25.0", features = ["latest"], optional = true }
jsonpath-rust = { version = "1.0.2", optional = true }
json-patch = { version = "4.0.0", features = ["utoipa"], optional = true }
google-cloud-run-v2 = { version = "0.3.0", optional = true }
google-cloud-gax = { version = "0.22.0", optional = true }
google-cloud-longrunning = { version = "0.24.0", optional = true }
aws-config = { version = "1.8.1", optional = true }
aws-sdk-ecs = { version = "1.86.0", optional = true }
[target.'cfg(target_os = "linux")'.dependencies]
aya-ebpf = { version = "0.1.1", optional = true }
aya-log-ebpf = { version = "0.1.1", optional = true }
aya = { version = "0.13.1", optional = true }
aya-log = { version = "0.2.1", optional = true }
nix = { version = "0.30.1", features = ["net"], optional = true }
fault-ebpf-programs = { version = "0.6.0", optional = true }
[build-dependencies]
anyhow = { workspace = true }
which = { workspace = true }
tonic-build = "0.13"
[target.'cfg(target_os = "linux")'.build-dependencies]
aya-build = "0.1.2"
[[bin]]
name = "fault"
path = "src/main.rs"
[features]
default = [
"demo",
"scenario",
"injection"
]
demo = []
scenario = [
"openapi",
"dep:regex",
"dep:tera"
]
stealth = [
"aya-ebpf",
"aya-log-ebpf",
"aya",
"aya-log",
"nix",
"fault-ebpf-programs"
]
stealth-auto-build = [
"aya-ebpf",
"aya-log-ebpf",
"aya",
"aya-log",
"nix",
]
agent = [
"dep:swiftide",
"dep:swiftide-macros",
"dep:swiftide-core",
"dep:swiftide-agents",
"dep:swiftide-indexing",
"dep:duckdb",
"dep:ignore",
"dep:similar",
"dep:derive_builder",
"dep:inquire",
"dep:similar-string",
"dep:pulldown-cmark",
"dep:pulldown-cmark-to-cmark",
"dep:rustls",
"dep:tera",
"dep:rmcp",
"dep:tree-sitter",
"dep:tree-sitter-javascript",
"dep:tree-sitter-yaml",
"dep:tree-sitter-rust",
"dep:tree-sitter-go",
"dep:tree-sitter-python",
"dep:schemars",
"dep:qdrant-client"
]
openapi = [
"dep:oas3",
"dep:openapiv3",
"dep:minijinja",
"dep:percent-encoding"
]
discovery = [
"dep:kube",
"dep:k8s-openapi",
"dep:jsonpath-rust",
"dep:json-patch",
"dep:google-cloud-run-v2",
"dep:google-cloud-gax",
"dep:google-cloud-longrunning",
"dep:aws-config",
"dep:aws-sdk-ecs"
]
injection = [
"discovery",
"dep:inquire",
]