Replace 4 unsafe sites with safe wrappers: - libc::pipe2 → nix::unistd::pipe2 (safe OwnedFd return) - File::from_raw_fd → File::from(OwnedFd) (safe ownership transfer) - unsafe impl Send for SendCookie → thread_local! lazy Cookie (each thread gets its own independent Cookie, no Send needed) - pre_exec + libc::fcntl → command-fds crate fd_mappings() (handles CLOEXEC clearing safely, also fixes potential fd leak on spawn failure via OwnedFd RAII) Only libc::umask remains as a single unavoidable unsafe site (no safe Rust wrapper exists for the umask syscall). Also updates AGENTS.md to remove stale SendCookie exception.
122 lines
3.4 KiB
TOML
122 lines
3.4 KiB
TOML
[package]
|
|
name = "keep"
|
|
version = "0.1.0"
|
|
edition = "2024"
|
|
description = "Keep and manage temporary files with automatic compression and metadata generation"
|
|
readme = "README.md"
|
|
categories = ["command-line-utilities"]
|
|
|
|
|
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
|
|
[dependencies]
|
|
anyhow = "1.0"
|
|
axum = { version = "0.8", optional = true }
|
|
derive_more = { version = "2.0", features = ["full"] }
|
|
smart-default = "0.7"
|
|
thiserror = "2.0"
|
|
base64 = "0.22"
|
|
chrono = { version = "0.4", features = ["serde"] }
|
|
clap = { version = "4.6", features = ["derive", "env"] }
|
|
clap_complete = "4"
|
|
command-fds = "0.3"
|
|
config = "0.15"
|
|
ctor = "0.2"
|
|
directories = "6.0"
|
|
dns-lookup = "3.0"
|
|
enum-map = "2.7"
|
|
flate2 = { version = "1.0", features = ["zlib-ng-compat"], optional = true }
|
|
futures = "0.3"
|
|
gethostname = "1.0"
|
|
humansize = "2.1"
|
|
async-stream = "0.3"
|
|
hyper = { version = "1.0", features = ["full"] }
|
|
http-body-util = "0.1"
|
|
inventory = "0.3"
|
|
is-terminal = "0.4"
|
|
lazy_static = "1.5"
|
|
libc = "0.2"
|
|
local-ip-address = "0.6"
|
|
log = "0.4"
|
|
lz4_flex = { version = "0.12", optional = true }
|
|
magic = { version = "0.13", optional = true }
|
|
nix = { version = "0.30", features = ["fs", "process"] }
|
|
once_cell = "1.21"
|
|
comfy-table = "7.2"
|
|
pwhash = "1.0"
|
|
regex = "1.10"
|
|
ringbuf = "0.4"
|
|
rusqlite = { version = "0.37", features = ["bundled", "array", "chrono"] }
|
|
rusqlite_migration = "2.3"
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
serde_json = "1.0"
|
|
serde_yaml = "0.9"
|
|
sha2 = "0.10"
|
|
md5 = "0.7"
|
|
subtle = "2.6"
|
|
env_logger = "0.11"
|
|
strum = { version = "0.27", features = ["derive"] }
|
|
term = "1.2"
|
|
tokio = { version = "1.0", features = ["full"] }
|
|
tokio-stream = "0.1"
|
|
tokio-util = "0.7"
|
|
tower = { version = "0.5", optional = true }
|
|
tower-http = { version = "0.6", features = ["cors", "fs", "trace"], optional = true }
|
|
utoipa = { version = "5.4", features = ["axum_extras"], optional = true }
|
|
utoipa-swagger-ui = { version = "9.0", features = ["axum"], optional = true }
|
|
uzers = "0.12"
|
|
which = "8.0"
|
|
xdg = "2.5"
|
|
strip-ansi-escapes = "0.2"
|
|
pest = "2.8"
|
|
pest_derive = "2.8"
|
|
dirs = "6.0"
|
|
similar = { version = "2.7", default-features = false, features = ["text"] }
|
|
html-escape = "0.2"
|
|
ureq = { version = "3", features = ["json"], optional = true }
|
|
os_pipe = { version = "1", optional = true }
|
|
axum-server = { version = "0.8", features = ["tls-rustls"], optional = true }
|
|
jsonwebtoken = { version = "10", optional = true, features = ["aws_lc_rs"] }
|
|
tiktoken-rs = { version = "0.9", optional = true }
|
|
|
|
[features]
|
|
# Default features include core compression engines and swagger UI
|
|
default = ["magic", "lz4", "gzip", "client", "tokens"]
|
|
|
|
# Full
|
|
#default = ["server", "magic", "lz4", "swagger"]
|
|
|
|
|
|
# Server feature (includes axum and related dependencies)
|
|
server = ["dep:axum", "dep:tower", "dep:tower-http", "dep:utoipa", "dep:jsonwebtoken"]
|
|
|
|
# Compression features
|
|
gzip = ["flate2"]
|
|
lz4 = ["lz4_flex"]
|
|
bzip2 = []
|
|
xz = []
|
|
zstd = []
|
|
|
|
# Plugin features (meta and filter)
|
|
all-meta-plugins = ["dep:magic"]
|
|
all-filter-plugins = []
|
|
|
|
# Individual plugin features
|
|
magic = ["dep:magic"]
|
|
|
|
# Swagger UI feature
|
|
swagger = ["dep:utoipa-swagger-ui"]
|
|
|
|
# Client feature (HTTP client for remote server)
|
|
client = ["dep:ureq", "dep:os_pipe"]
|
|
|
|
# TLS feature (HTTPS server support)
|
|
tls = ["dep:axum-server"]
|
|
|
|
# Token counting feature (LLM token support via tiktoken)
|
|
tokens = ["dep:tiktoken-rs"]
|
|
|
|
[dev-dependencies]
|
|
tempfile = "3.3"
|
|
rand = "0.9"
|