defmodule AgentSea.Gateway.Router do @moduledoc """ Routing-strategy behaviour. A strategy *orders* the available candidates; the gateway then tries them in that order, failing over to the next when one errors. Strategies are pure — they receive the candidates and a context (`:counter`, live `:health`) and return a reordered list. """ @typedoc "A configured provider candidate." @type candidate :: %{ required(:name) => term(), required(:module) => module(), required(:model) => String.t(), optional(:opts) => keyword() } @type ctx :: %{optional(:counter) => non_neg_integer(), optional(:health) => map()} @callback order([candidate()], ctx()) :: [candidate()] end