Add ditto unpack CLI to turn clone result JSON into a project tree
The REST API returns a clone as a giant `files` map JSON blob with no
first-party way to use it — users were left staring at kilobytes of
escaped JSON with no path from "you got JSON" to "here's a project".
Add packages/cli: a zero-dependency `ditto` CLI whose `unpack` command
walks the files{} map from POST /v1/clones (or GET .../result) and
writes a real project tree to disk:
- text files written from inline content;
- binary assets materialized from inline base64, else fetched from their
reference URL using $DITTO_API_URL / $DITTO_API_KEY (--no-fetch writes
just the text tree and lists skipped assets);
- path-traversal guards (clone results are untrusted) and sha256
integrity checks;
- reads JSON from stdin ("-") so a curl response pipes straight in;
- clear errors for queued jobs with no files yet, and a tip pointing at
the /bundle endpoint when assets can't be fetched.
Document the pipe-from-curl one-liner prominently next to the REST
examples in README.md and docs/SERVICE.md, add a package README, a
Repository Map row, a root `unpack` script, and a CHANGELOG entry.
Covered by 9 tests (text tree, stdin, inline base64, live URL fetch with
auth + relative-URL resolution, --no-fetch, traversal refusal, queued-job
detection, sha256 mismatch).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
4de6e244a0
commit
638a0516c5
@@ -6,6 +6,16 @@ so minor/patch semantics are not yet guaranteed.
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Added — `ditto` unpack CLI
|
||||
|
||||
- **`packages/cli`** — a zero-dependency `ditto` command-line helper. `ditto unpack
|
||||
<clone.json|-> <out-dir>` turns the `files` map returned by `POST /v1/clones` (or
|
||||
`GET /v1/clones/:id/result`) into a real project tree on disk: text files written
|
||||
inline, binary assets materialized from inline base64 or fetched from their
|
||||
reference URL (`$DITTO_API_URL` / `$DITTO_API_KEY`), with path-traversal guards
|
||||
and `sha256` integrity checks. Reads from stdin so a `curl` response can be piped
|
||||
straight in. Documented next to the REST examples in the README and `docs/SERVICE.md`.
|
||||
|
||||
### Added — Open-source readiness
|
||||
|
||||
- Added support, release, responsible-use, CODEOWNERS, and gitattributes files.
|
||||
|
||||
Reference in New Issue
Block a user