Construct a graph from a stdin op-list

Usage: aura graph build [OPTIONS]

Options:
      --release  Load the project dylib from target/release instead of target/debug
  -h, --help     Print help

Op-list reference (stdin: a JSON array of op objects, applied in order):
  {"op":"source","role":"price","kind":"F64"}
      declare a bound root input role of a scalar kind
  {"op":"input","role":"price"}
      declare an open input role (wired by an enclosing graph)
  {"op":"add","type":"SMA","name":"fast","bind":{"length":{"I64":2}}}
      instantiate a node ("name" optional; "bind" maps param -> typed scalar)
  {"op":"add","type":"Session","name":"ny","args":{"tz":"America/New_York","open":"09:30"},"bind":{"period_minutes":{"I64":15}}}
      an arg-bearing type applies "args" (closed, per-type-declared string
      pairs) BEFORE "bind" — see graph introspect --node <T> for its args
  {"op":"feed","role":"price","into":["fast.series","slow.series"]}
      wire a role into one or more input slots
  {"op":"connect","from":"fast.value","to":"sub.lhs"}
      wire a node output into an input slot
  {"op":"expose","from":"sub.value","as":"bias"}
      name a graph output field
  {"op":"tap","from":"sub.value","as":"spread"}
      declare a recordable tap on a wire (expose's output-side twin)
  {"op":"gang","as":"length","into":["fast.length","slow.length"]}
      fuse two or more sibling params into one public knob
  {"op":"doc","text":"..."}
      declare the composite's one-line meaning (C29)
  {"op":"use","ref":{"name":"agree"},"name":"gate","bind":{"sma.length":{"I64":9}}}
      splice a registered blueprint (by "content_id" or "name") under an
      instance name ("bind" path-qualifies the spliced instance's params)
  {"op":"name","name":"ny_momentum"}
      set the composite's render name, at most once per script (default
      "graph" if omitted)

Node types and their ports: aura graph introspect --vocabulary | --node <T>
