[package] name = "ops-exec" version = "0.1.0" edition = "2024" license = "MIT" description = "The trusted executor: run a typed, capability-gated step on a host and observe a host, over local exec, SSH, or an in-session agent. Trust root is SSH keys + Tailscale/Headscale only. Used by sando and bento." [features] default = [] # AgentRpc transport (the client half) — used by drivers that talk to ops-agent. rpc = ["dep:reqwest", "dep:serde_json", "dep:futures-util"] # The ops-agent binary (the on-host half). Pulls in the HTTP server + rpc. agent = ["rpc", "dep:axum", "dep:tokio-stream", "dep:tracing-subscriber", "dep:toml"] [dependencies] tokio = { version = "1.50.0", features = ["macros", "rt-multi-thread", "io-util", "fs", "process", "sync"] } async-trait = "0.1.83" serde = { version = "1.0.228", features = ["derive"] } anyhow = "1.0.102" thiserror = "2.0.18" tracing = "0.1.44" # rpc / agent only reqwest = { version = "0.13", default-features = false, features = ["rustls", "stream", "json", "query"], optional = true } serde_json = { version = "1", optional = true } futures-util = { version = "0.3", optional = true } axum = { version = "0.8.8", optional = true } tokio-stream = { version = "0.1", optional = true } tracing-subscriber = { version = "0.3.22", features = ["env-filter"], optional = true } toml = { version = "1.1", optional = true } glob = "0.3.3" [[bin]] name = "ops-agent" path = "src/bin/ops-agent.rs" required-features = ["agent"] [dev-dependencies] tempfile = "3.20" tokio = { version = "1.50.0", features = ["macros", "rt-multi-thread", "time"] } [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"