Google ADK
Project ordered ADK events without moving session execution into the browser.
Render native events
The checked TypeScript package is @google/adk@2.4.0. ADK's Runner and session service stay on your server. Deliver its events through an application transport, then render the ordered snapshot with the same Ghost views. See view installation.
Configure the runner's agent, session service and model on the server following the ADK event loop. The application transport owns authentication, serialization, backpressure and cancellation propagation. An existing ADK AG-UI bridge can instead use the AG-UI client path.
Partial content and richer events
ADK partial text contains new fragments; the authoritative non-partial segment contains the assembled text. Ghost groups previews within native invocation/author/branch scope and replaces them with that segment. It does not append the final text a second time. Pass the ordered log with stable event IDs; preserve ordering in your delivery/store layer.
Function calls and responses retain native call IDs; an input-ready call is not proof of execution. adk-actions and adk-grounding data retain transfers, state changes and grounding for an application renderer. Thought text is withheld by default. mapPart and explicit reasoning-summary classification are available through normalizer options.
Boundaries and troubleshooting
ADK owns session state and tool execution. Keep native session/user/invocation IDs and actions rather than flattening a transfer into another assistant label. If replay duplicates text, check that partials and authoritative events arrived in order. If your server emits snake_case JSON rather than TypeScript objects, the projection accepts the documented event aliases, but validate the transport schema at your boundary.