\begin{table}[htbp] \centering \caption{The streaming event protocol. The server parses the provider's Server-Sent Event stream and dispatches on each event's type; it then re-emits its own typed events to the client. This is the mechanism by which reasoning, text, tool calls, and computed artifacts are surfaced incrementally.} \label{tab:events} \begin{threeparttable} \begin{tabular}{@{}lll@{}} \toprule Provider event & Sub-type & Server action \\ \midrule \texttt{message\_start} & --- & read input/output token usage \\ \texttt{message\_delta} & --- & update running output-token count \\ \texttt{content\_block\_start}& \texttt{tool\_use} & open a new tool call (name, id) \\ \texttt{content\_block\_delta}& \texttt{text\_delta} & append to answer; forward to client \\ \texttt{content\_block\_delta}& \texttt{thinking\_delta} & forward reasoning on a separate channel \\ \texttt{content\_block\_delta}& \texttt{input\_json\_delta} & concatenate partial tool-argument JSON \\ \texttt{content\_block\_stop} & --- & parse accumulated JSON into tool arguments \\ \texttt{message\_stop} & --- & reconcile tokens; resolve the call \\ \bottomrule \end{tabular} \begin{tablenotes}[flushleft] \footnotesize \item \textit{Notes.} The client (Section~\ref{subsec:frontend}) performs the symmetric operation: it reads the server's stream, splits on newlines retaining the trailing partial line, and dispatches the server's own event types (text, thinking, tools, tool results, sources, figures, specialized results, done) to dedicated renderers. \end{tablenotes} \end{threeparttable} \end{table}