[package] name = "bento-daemon" version = "0.1.0" edition = "2024" license = "MIT" [[bin]] name = "bentod" path = "src/main.rs" [dependencies] ops-artifact = { path = "../../shared/ops-artifact" } ops-core = { path = "../../shared/ops-core" } ops-status = { path = "../../shared/ops-status" } ops-exec = { path = "../../shared/ops-exec", features = ["rpc"] } axum = { version = "0.8.8", features = ["macros", "ws"] } tokio = { version = "1.50.0", features = ["macros", "rt-multi-thread", "net", "signal", "fs", "process", "sync", "io-util"] } tokio-stream = "0.1" serde = { version = "1.0.228", features = ["derive"] } serde_json = "1" toml = "1.1" sqlx = { version = "0.9", features = ["runtime-tokio", "sqlite", "chrono", "migrate"] } rhai = { version = "1.20", features = ["sync"] } tracing = "0.1.44" tracing-subscriber = { version = "0.3.22", features = ["env-filter", "json"] } metrics = "0.24" metrics-exporter-prometheus = { version = "0.18.1", default-features = false } anyhow = "1.0.102" thiserror = "2.0.18" chrono = { version = "0.4", features = ["serde"] } semver = { version = "1.0", features = ["serde"] } sha2 = "0.10" async-trait = "0.1" # Staging dir for a service deploy: the binary lands here on the daemon between # the pull off the build host and the push onto the service host. tempfile = "3.20" # Reads MNW's public OTA endpoint to answer whether a built version is actually # downloadable. rustls rather than native-tls to keep the TLS stack the same one # every other crate here links. # `rustls-no-provider` rather than `rustls`: the latter is an alias for # `__rustls-aws-lc-rs`, which links a C crypto backend. The provider is ring # (pure Rust), installed process-wide by `crate::tls` before any client is built. reqwest = { version = "0.13", default-features = false, features = ["json", "rustls-no-provider"] } rustls = { version = "0.23", default-features = false, features = ["std", "tls12", "logging", "ring"] } [dev-dependencies] async-trait = "0.1" tempfile = "3.20" tower = { version = "0.5", features = ["util"] } http-body-util = "0.1" # WS client for the /events end-to-end test. No TLS backend (the test dials # plaintext ws://127.0.0.1), matching the transitive copy axum's `ws` feature # already compiles. tokio-tungstenite = { version = "0.29", default-features = false, features = ["connect"] } futures-util = "0.3" [lints.rust] unused = "warn" unreachable_pub = "warn" [lints.clippy] pedantic = { level = "warn", priority = -1 } # Allow-list tuned from a measured breakdown across server/multithreaded/pter # (2026-07-22). These are the high-churn / low-signal pedantic lints; everything # else in `pedantic` stays a warning. Keep this block identical across repos. module_name_repetitions = "allow" # Doc lints. No docs-completeness push is underway. missing_errors_doc = "allow" missing_panics_doc = "allow" doc_markdown = "allow" # Numeric casts. Endemic and mostly intentional in size and byte math. cast_possible_truncation = "allow" cast_sign_loss = "allow" cast_precision_loss = "allow" cast_possible_wrap = "allow" cast_lossless = "allow" # Subjective structure and style nags. High churn, low signal. must_use_candidate = "allow" too_many_lines = "allow" struct_excessive_bools = "allow" similar_names = "allow" items_after_statements = "allow" single_match_else = "allow" # Frequent false-positives in TUI and router-heavy code. match_same_arms = "allow" unnecessary_wraps = "allow" type_complexity = "allow"