Behaviour for rendering prompt-runner canonical event maps into human-readable output.
@type opts() :: keyword()
@type state() :: term()
@callback finish(state()) :: {:ok, iodata(), state()}
@callback init(opts()) :: {:ok, state()} | {:error, term()}
@callback render_event(event :: map(), state()) :: {:ok, iodata(), state()}