Skip to main content

onevcs

Version control and its remote host behind one host-neutral vocabulary, for agent workflows.

The review unit is a change request — GitHub maps it to a pull request, and a later host maps it to whatever it calls the same thing. Vcs owns the repository side (identities, sessions over an isolated worktree, preserved work); RemoteHost owns the host side (opening a change, reading its checks, merging it); a rules file decides, per repository, how a change publishes and what verifies it. Everything a run does is emitted as an NDJSON event stream.

The public surface is the approved contract — docs/contract.md — compiled, and it is implemented: the registry with its lazy migration, the rules engine, sessions over borrowing clones, bounded git, the FIFO merge queue, both publication strategies, recovery and provenance, the merge train, and the event stream.

What one change looks like

onevcs register ~/projects/widgets                 # once per checkout
onevcs rules check widgets                         # which policy, and why
token=$(onevcs session open widgets --branch feature/thing | jq -r .token)
# …work in the worktree the session printed…
onevcs publish "$token"                            # verify, then land it
onevcs events "$token"                             # everything it did, as NDJSON

Everything durable lives under one state root — ONEVCS_HOME, otherwise ~/.onevcs.

Install

cargo install onevcs      # crates.io
pip install onevcs-cli    # a prebuilt wheel, no Rust toolchain
npm install -g onevcs-cli # a prebuilt binary, no Rust toolchain

All three install the same onevcs binary. Prebuilt binaries exist for Linux (x64, arm64), macOS (x64, arm64), and Windows (x64); every release also attaches the archives and their .sha256 checksums for a direct download.

Use

onevcs --help

--help is the command surface, and publish reserves its own exit codes for a gate that failed, a request that was invalid, and a base that moved under it.

Embed it

A command answers a process: an exit code and a line of prose. A caller embedding the crate wants the decision, so the same operations answer values.

let published = onevcs::publish(&providers, &token, &PublishRequest::default())?;
match published.outcome {
    PublishOutcome::Merged(sha) => journal.landed(sha),
    PublishOutcome::ChangeOpen(url) | PublishOutcome::Queued(url) => journal.awaiting(url),
    PublishOutcome::NothingToPublish => journal.nothing(),
    PublishOutcome::Failed { kind, reason, retained } => journal.failed(kind, reason, retained),
}

close_session and session are the same for the rest of a session's life, and EventStream::open(&token) reads its events as Envelopes, each attributed to the session that wrote it — so a caller following several publications at once can tell them apart. The command line is a rendering of these rather than a second path through them.

Test against it, without a real GitHub

Embedding the crate, run_with(&cli, providers) takes the two implementations a run reaches Vcs and RemoteHost through; run is that with Git and GitHub, and every entry point above goes through the same seam. onevcs-testing ships in-memory and file-backed implementations of both, so a consumer's suite drives a real onevcs through a real journey against a host it seeded:

cargo add --dev onevcs-testing

They emit the events the real implementations emit — a claim this repository's own suite checks by running one publication journey on both backends and holding the two event streams to each other.

Develop

just bootstrap   # from a clean clone
just check       # the deterministic gate: format, clippy, tests, coverage, docs
just gate        # check, plus the diff-scoped LLM-judge tier — the pre-push bar

just --list is the full index.

License

MIT. See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

onevcs_cli-0.2.1-py3-none-win_amd64.whl (982.0 kB view details)

Uploaded Python 3Windows x86-64

onevcs_cli-0.2.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

onevcs_cli-0.2.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (941.8 kB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

onevcs_cli-0.2.1-py3-none-macosx_11_0_arm64.whl (928.7 kB view details)

Uploaded Python 3macOS 11.0+ ARM64

onevcs_cli-0.2.1-py3-none-macosx_10_12_x86_64.whl (987.9 kB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file onevcs_cli-0.2.1-py3-none-win_amd64.whl.

File metadata

  • Download URL: onevcs_cli-0.2.1-py3-none-win_amd64.whl
  • Upload date:
  • Size: 982.0 kB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for onevcs_cli-0.2.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 8a79cf1212b9cc2c59ab0886eb433ceb4644e0766ad10536678a8111e9c81dbb
MD5 d181c578502585380398075cba05c957
BLAKE2b-256 a6069edf81a3033f10e09dbb614d9be3211a07f3b51b67acbfdc4d1e1aeb3641

See more details on using hashes here.

File details

Details for the file onevcs_cli-0.2.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for onevcs_cli-0.2.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0885803ce749d9d07481b51b726ba7767f5032932034937d220f980af1e6356a
MD5 68b57f9a430ad34a1d3fce3b3e646b11
BLAKE2b-256 c337a81ed2d4b4edd44d1828e9a060dffde8047abdc6c9acfe8cc85424e0d5c1

See more details on using hashes here.

File details

Details for the file onevcs_cli-0.2.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for onevcs_cli-0.2.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e506d16150a4f21ebd9e12c8abc56f5fd67b95a7b682e7b09560624d81de2142
MD5 98436758aa0ab15066733392967c78de
BLAKE2b-256 42386e75fb5e46e589c7585ba8975b04911de8374237a1617ca1b8e8a197fa93

See more details on using hashes here.

File details

Details for the file onevcs_cli-0.2.1-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for onevcs_cli-0.2.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ce8d6dfa27e43504995f3eaf52b3c0beaf2f8442a8106fead2b5f2d8c32c61db
MD5 a506e690f0412e8649b08f689a190bbe
BLAKE2b-256 f58e4c00a57cc48ae0a28e3a34c0db81a7b742eff69163582f72f0b4ae18a71c

See more details on using hashes here.

File details

Details for the file onevcs_cli-0.2.1-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for onevcs_cli-0.2.1-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c4fc60b03d261eeb0ae6172e4f3ae1675311c69ef0bafe103cbcd1f5094f0d8d
MD5 a2118c14324f26783ffa0b5b68c2b084
BLAKE2b-256 7b4b6c84cf85f99840b06135238f0f9fb9f8b9f5b539a1e2fd3bdd8800b13e35

See more details on using hashes here.

Release history Release notifications | RSS feed

0.18.0

5 files

0.17.1

5 files

0.17.0

5 files

0.16.3

5 files

0.16.2

5 files

0.16.1

5 files

0.16.0

5 files

0.15.10

5 files

0.15.9

5 files

0.15.8

5 files

0.15.7

5 files

0.15.6

5 files

0.15.5

5 files

0.15.4

5 files

0.15.3

5 files

0.15.2

5 files

0.15.1

5 files

0.15.0

5 files

0.14.1

5 files

0.14.0

5 files

0.13.0

5 files

0.12.3

5 files

0.12.1

5 files

0.12.0

5 files

0.11.1

5 files

0.11.0

5 files

0.10.0

5 files

0.9.0

5 files

0.8.1

5 files

0.8.0

5 files

0.7.0

5 files

0.6.1

5 files

0.6.0

5 files

0.5.0

5 files

0.4.2

5 files

0.4.1

5 files

0.4.0

5 files

0.3.1

5 files

0.3.0

5 files

0.2.10

5 files

0.2.9

5 files

0.2.8

5 files

0.2.7

5 files

0.2.6

5 files

0.2.5

5 files

0.2.4

5 files

0.2.3

5 files

0.2.2

5 files

This release

0.2.1 This release

5 files

0.2.0

5 files

0.1.3

5 files

0.1.2

5 files

0.1.1

5 files

0.1.0

5 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page