- Add streaming tar-based export (--export produces .keep.tar) - Add streaming tar import (--import reads .keep.tar archives) - Add server endpoints GET /api/export and POST /api/import - Rename CompressionType::None to CompressionType::Raw with "none" as alias - Add DB migration to update existing "none" compression values to "raw" - Fix export endpoint to propagate errors to client instead of swallowing - Fix import endpoint to return 413 on max_body_size instead of truncating Export streams items as tar archives without loading entire files into memory. Import extracts items with new IDs, preserving original order. Both work locally and via client/server mode. Co-Authored-By: opencode <noreply@opencode.ai>
134 lines
3.7 KiB
TOML
134 lines
3.7 KiB
TOML
[package]
|
|
name = "keep"
|
|
version = "0.1.0"
|
|
edition = "2024"
|
|
rust-version = "1.85"
|
|
description = "Keep and manage temporary files with automatic compression and metadata generation"
|
|
readme = "README.md"
|
|
license = "MIT"
|
|
repository = "https://gitea.gt0.ca/asp/keep"
|
|
keywords = ["cli", "files", "compression", "metadata"]
|
|
categories = ["command-line-utilities"]
|
|
|
|
[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 }
|
|
zstd = { version = "0.13", optional = true }
|
|
magic = { version = "0.13", optional = true }
|
|
infer = { version = "0.19", optional = true }
|
|
tree_magic_mini = { version = "3.2", 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"
|
|
strfmt = "0.2"
|
|
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"
|
|
tar = "0.4"
|
|
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 }
|
|
tempfile = "3.3"
|
|
|
|
[features]
|
|
# Default features include core compression engines and swagger UI
|
|
default = [
|
|
"client",
|
|
"gzip",
|
|
"infer",
|
|
"lz4",
|
|
"tokens",
|
|
"tree_magic_mini",
|
|
"zstd"
|
|
]
|
|
|
|
# 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 = ["dep:zstd"]
|
|
|
|
# Plugin features (meta and filter)
|
|
all-meta-plugins = ["dep:magic", "dep:infer", "dep:tree_magic_mini"]
|
|
all-filter-plugins = []
|
|
|
|
# Individual plugin features
|
|
magic = ["dep:magic"]
|
|
infer = ["dep:infer"]
|
|
tree_magic_mini = ["dep:tree_magic_mini"]
|
|
|
|
# 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]
|
|
rand = "0.9"
|