[package] name = "claw-store" version = "0.3.0" edition = "2021" [[bin]] name = "claw-store" path = "src/main.rs" # Phase 5b: fingerprint-keyed cargo build cache CLI. Wraps `cargo build` # with a peer-cache lookup: hit → download+restore, miss → build+capture+upload. # Uses the same identity/config surface as claw-store daemon. [[bin]] name = "claw-cargo" path = "src/claw_cargo.rs" [dependencies] clap = { version = "4", features = ["derive"] } serde = { version = "1", features = ["derive"] } toml = "0.8" tokio = { version = "1", features = ["full"] } sysinfo = "0.30" anyhow = "1" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } chrono = { version = "0.4", features = ["serde"] } axum = { version = "0.7", features = ["macros"] } tower-http = { version = "0.5", features = ["cors", "fs"] } tokio-stream = "0.1" serde_json = "1" # v0.2.0 — flock(2) wrapper for atomic+locked manifest writes # (manifest.rs). Already a transitive dep; declaring it directly # makes the call site obvious. libc = "0.2" # v0.2.0 — sibling-tempfile + rename for atomic manifest persistence. # Was previously dev-dep only; promoted to main. tempfile = "3" # v0.11.1 — cluster membership via scuttlebutt gossip + phi-accrual failure # detection. Wraps in cluster/gossip.rs. UDP transport, keyed KV state per # node, seed_nodes bootstrap from [[cluster.peers]] config. chitchat = "0.11" # v0.11 — QUIC transport for peer RPC (Phase 1c). UDP-based; runs on a # separate port from chitchat gossip. TLS 1.3 by default; we wire mTLS # against a fleet root CA in cluster/transport.rs. quinn = { version = "0.11", default-features = false, features = ["runtime-tokio", "rustls-ring"] } # v0.23 — TLS 1.3 provider driving quinn's crypto. Pinned to the ring # provider so a single CryptoProvider is installed process-wide. rustls = { version = "0.23", default-features = false, features = ["ring"] } # v0.13 — X.509 cert generation for the fleet CA + per-node leaf certs. # Used both by production bootstrap (writes PEM to /etc/claw-store/tls/) # and by tests (in-memory ephemeral CA). rcgen = { version = "0.13", features = ["pem", "x509-parser"] } # v2 — parse PEM files into DER for rustls consumption. Used in # NodeIdentity::from_pem_files (Phase 1d) so persistent identity round-trips # through the file system on daemon restart. rustls-pemfile = "2" # v1 — content-addressed hashing for the Phase 2 blob store. BLAKE3 is # used both for whole-blob addressing (BlobId) and for per-chunk # addressing (dedup). Fast enough that a full-blob rehash on read # verification stays cheap. blake3 = "1" # v0.4 — tar archive writer/reader for the Phase 5 build-artifact # capture flow (cargo target/deps → tar → BlobPutStream). Preserves # file metadata (mtimes, perms) which cargo relies on for its own # incremental-rebuild fingerprint checks. tar = "0.4" # v0.13 — zstd wrapping around the tar stream. Level 3 is the default; # gets 5-10× compression on cargo .rlib without noticeable CPU cost. zstd = "0.13" [dev-dependencies] tempfile = "3" tower = { version = "0.5", features = ["util"] } http-body-util = "0.1"