[package] name = "jouleclaw-source" version.workspace = true edition.workspace = true license.workspace = true repository.workspace = true authors.workspace = true description = "Source-as-truth fetcher. Given a package identifier (npm / PyPI / crates.io / GitHub), fetch the package's actual source into a JouleClaw workspace as a content-addressed L1 entry; record the fetch + hash + source URL as ClaimProvenance for the receipt stream. Implements JouleClaw's 'fresh > frozen' doctrine for third-party code: agents read the code their tools actually call, not the model's training of it. Trait-based — fetchers are pluggable; the in-tree reference is a static-bundle fetcher (no network) so tests stay deterministic." [dependencies] jouleclaw-workspace = { path = "../jouleclaw-workspace" } jouleclaw-prov = { path = "../jouleclaw-prov" } jouleclaw-attest = { path = "../jouleclaw-attest" } async-trait = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } thiserror = { workspace = true } blake3 = { workspace = true } [dev-dependencies] tokio = { workspace = true, features = ["macros", "rt"] }