\begin{table}[htbp] \centering \caption{Provider-side 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 (Appendix~\ref{app:events}). This is the mechanism by which reasoning, text, tool calls, and computed artifacts are surfaced incrementally.} \label{tab:events} \begin{threeparttable} \small \begin{tabular}{@{}lll@{}} \toprule Provider event & Sub-type & Server action \\ \midrule \texttt{message\_start} & --- & read input and output token usage \\ \texttt{message\_delta} & --- & update running output-token count \\ \texttt{content\_block\_start}& \texttt{tool\_use} & open a new tool call (name, identifier) \\ \texttt{content\_block\_delta}& \texttt{text\_delta} & append to answer; forward to client \\ \texttt{content\_block\_delta}& \texttt{thinking\_delta} & forward reasoning summary 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 output tokens; resolve the call \\ \bottomrule \end{tabular} \begin{tablenotes}[flushleft] \footnotesize \item \textit{Notes.} Source: \path{server/services/claudeService.ts}. The client performs the symmetric operation on the server's own stream: it reads bytes, splits on newlines retaining the trailing partial line, and dispatches the server's event types to dedicated renderers. \end{tablenotes} \end{threeparttable} \end{table}