Structured UI event payload for tool lifecycle updates.
@type status() :: :running | :ok | :error | atom() | String.t()
@type t() :: %Vibe.UI.ToolEvent{ args: term(), id: String.t() | nil, name: atom() | String.t() | nil, output: term(), output_format: atom() | nil, output_parts: [map()] | nil, output_truncation: :head | :tail | nil, phase: atom() | nil, status: status() | nil }
@spec finished(keyword()) :: t()
@spec normalize_result(term()) :: term()
@spec preparing(keyword()) :: t()
@spec started(keyword()) :: t()