Behaviour for external chat gateway backends.
Backends own platform details such as Telegram update payloads, Bot API
clients, mentions, and auth rules. Vibe.Gateway.Runtime owns the generic
Vibe flow: normalize, gate, derive a session key, and dispatch to a semantic
session.
Summary
Types
@type normalized() :: %{message: Vibe.Gateway.Message.t(), trigger: map()}
Callbacks
@callback authorized?(Vibe.Gateway.Message.t(), trigger :: map(), config()) :: boolean()
@callback child_specs(config(), runtime :: pid()) :: [Supervisor.child_spec()]
@callback normalize(term(), config()) :: {:ok, normalized()} | :ignore | {:error, term()}