Oi. Dispatch. Options
(oi v0.5.0)
Copy Markdown
Summary
Functions
Assemble the keyword list passed to Orchid.run/3.
Splits unified data into {memory, interventions} by topology.
Types
@type data() :: %{ optional({Oi.Topology.Graph.Node.id(), Oi.Topology.Graph.Node.node_port()}) => term() } | %{ optional(Oi.Topology.Graph.Node.id()) => %{ optional(Oi.Topology.Graph.Node.node_port()) => term() } }
Unified user-facing data for Oi.execute/2.
Replaces the separate :inputs / :interventions opts.
Format A — tuple keys
%{{:step1, :in} => "foo", {:step2, :result} => {:override, "bar"}}Format B — nested
%{step1: %{in: "foo"}, step2: %{result: {:override, "bar"}}}
Functions
@spec assemble_run_opts(keyword(), Oi.Dispatch.Config.t(), Oi.Dispatch.Drafting.t()) :: keyword()
Assemble the keyword list passed to Orchid.run/3.
Merges interventions from Drafting, user baggage from Config, computes
scope_id, and ensures OrchidSymbiont.Hooks.Injector is in the hook
stack (exactly once).
@spec resolve_data(data(), MapSet.t(Oi.Topology.Graph.Edge.t())) :: {%{ required({Oi.Topology.Graph.Node.id(), Oi.Topology.Graph.Node.node_port()}) => term() }, %{ required({Oi.Topology.Graph.Node.id(), Oi.Topology.Graph.Node.node_port()}) => term() }}
Splits unified data into {memory, interventions} by topology.
For each {node, port}:
- has incoming edge → intervention (data originates inside the graph)
- no incoming edge → memory (external input, no upstream producer)
Values pass through as-is — no wrapping, no io_key conversion.