onepipeline
Execute a task DAG over oneagentgraph
and onevcs, merging their event
streams into one.
onepipeline is the composition layer. It owns the plan — a dependency graph
mixing direct agent nodes, repository lifecycle nodes, and explicit human actions
— schedules it in rounds, dispatches each node through a pluggable executor
seam, and keeps a live channel open to the planner supervising the run. The
agents come from oneagentgraph; the clones, worktrees, gates, and change
requests come from onevcs. Dependency direction is one-way: neither sibling
depends on this crate.
The public types, traits, config schemas, and CLI surface are the approved
contract in docs/contract.md, compiled — and implemented
behind it. onepipeline composes its two siblings by running their CLIs, so a
build of either that still refuses will make the dispatches this crate starts
refuse too; the composition layer itself is complete.
Install
To install a revision that has not been released yet — which today is every revision, since the crate depends on its siblings by git and a git dependency cannot be published — build it from the repository:
Prebuilt archives for Linux (x86-64, arm64), macOS (Intel, Apple silicon), and
Windows (x86-64) are attached to every release, with sha256 checksums.
What it does
start launches the run's dag-scope agent graph — a shipped default of an
orchestrator member driving the engine, and a resettable-cron check-in member
that surfaces a status when nobody has reported one for a while. Attached, it
returns when the run settles; exit 3 means nothing is driving the run, and
onepipeline adopt RUN attaches a fresh driver to the intact ledger.
The planner supervises over the channel:
Every edit is applied or rejected with a reason: reply exits 0 when the
reconciler applied it, 1 when it is queued but not yet reconciled, and 2 when
it was refused.
Read-only views — runs, status, host, monitor, results, goals,
telemetry — report unread surfaces, driver liveness, and provider health
without touching a run.
Where a dispatch runs
The executor seam decides. v1 ships the local executor only; the trait and the rules grammar are shaped so a dispatch-server or Kubernetes executor is a config change rather than a code change.
executors:
-
rules:
- when:
use: local
- use: local
Ordered: the first rule whose when holds decides, and a rule with no when is
the fallback. A when tests an executor's capacity, the node's own labels
(when: {node_label: {persona: reviewer}}), or both — several conditions in one
when all have to hold.
Development
just --list is the full command surface.
docs/contract-divergences.md records every place
the code could not compile the contract exactly as written, and what the planner
who owns the contract ruled on each.
License
MIT.