defmodule Pi.Agent.Run do @moduledoc "Structured result of an agent orchestration run." alias Pi.Agent.Result @enforce_keys [:kind, :results] defstruct [:kind, status: :ok, results: [], error: nil, metadata: %{}] @type kind :: :single | :parallel | :chain | :fanout @type status :: :ok | :error @type t :: %__MODULE__{ kind: kind(), status: status(), results: [Result.t() | term()], error: term(), metadata: map() } def ok(kind, results, metadata \\ %{}) when is_list(results) do %__MODULE__{kind: kind, status: :ok, results: results, metadata: metadata} end def error(kind, results, error, metadata \\ %{}) when is_list(results) do %__MODULE__{kind: kind, status: :error, results: results, error: error, metadata: metadata} end end