Skip to content

docs: add wire-safe serialization section for TypeScript streaming events#693

Open
agent-of-mkmeral wants to merge 9 commits intostrands-agents:mainfrom
agent-of-mkmeral:docs/wire-safe-streaming-serialization
Open

docs: add wire-safe serialization section for TypeScript streaming events#693
agent-of-mkmeral wants to merge 9 commits intostrands-agents:mainfrom
agent-of-mkmeral:docs/wire-safe-streaming-serialization

Conversation

@agent-of-mkmeral
Copy link
Contributor

Description

Documents the toJSON() serialization behavior for all TypeScript streaming events. When events are sent over the wire (SSE, WebSockets, HTTP responses), the toJSON() method ensures compact output (~100-200 bytes) instead of serializing the entire Agent instance (~54KB+ per event).

Changes

  • Streaming Overview (index.mdx): Added new "Wire-Safe Serialization (TypeScript)" section with:

    • How toJSON() works with JSON.stringify()
    • Complete table of what each event serializes to
    • List of excluded fields (agent, tool, cancel, retry)
    • Error serialization format ({ error: { message?: string } })
    • Code example showing in-process vs wire access patterns
  • Express.js example (async-iterators.ts): Added comments explaining the automatic wire-safe serialization behavior

Related Issues

Type of Change

  • New content

Checklist

  • I have read the CONTRIBUTING document
  • My changes follow the project's documentation style
  • I have tested the documentation locally using npm run dev
  • Links in the documentation are valid and working

…ents

Document the toJSON() serialization behavior for all TypeScript streaming
events. This includes:

- New 'Wire-Safe Serialization' section in the streaming overview
- Table showing what each event serializes to
- Explanation of excluded fields (agent, tool, cancel, retry)
- Error handling format ({ error: { message?: string } })
- In-process vs wire access patterns
- Updated Express.js example with serialization comments

Related: strands-agents/sdk-typescript#708
- Remove verbose 'How It Works', 'Excluded Fields', 'Error Handling',
  and 'In-Process Access' subsections
- Keep single concise paragraph explaining serialization behavior
- Retain events table showing what each event serializes to
- Mention excluded fields (agent, tool, cancel, retry) inline

Co-authored-by: mkmeral <mkmeral@users.noreply.github.com>
@github-actions
Copy link
Contributor

github-actions bot commented Mar 21, 2026

Documentation Preview Ready

Your documentation preview has been successfully deployed!

Preview URL: https://d3ehv1nix5p99z.cloudfront.net/pr-cms-693/docs/user-guide/quickstart/overview/

Updated at: 2026-03-25T19:27:11.158Z

Copy link
Contributor

@mkmeral mkmeral left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

…fields

Address review feedback:
- Rename 'Wire-Safe Serialization (TypeScript)' to 'Event Serialization'
- Wrap in <Tabs> with Python/TypeScript tabs
- Lead with what each event keeps during serialization
- Move excluded fields mention to secondary position after table
- Use 'serialization' language instead of 'wire-safe'
@mkmeral
Copy link
Contributor

mkmeral commented Mar 21, 2026

add this under streaming events tabs (that already exist) or something, I don't want a tab for python. also that python info is not correct anyway

@mkmeral
Copy link
Contributor

mkmeral commented Mar 21, 2026

@agent-of-mkmeral

…nt types

Address review feedback from @mkmeral:
- Remove Tabs wrapper and Python tab (info was not correct)
- Downgrade to ### subsection under Event Types (same level as
  Lifecycle Events, Model Stream Events, etc.)
- TypeScript serialization content stays as-is, directly under heading
@agent-of-mkmeral
Copy link
Contributor Author

Done in f01de2e — addressed both points:

  • Removed the Python tab (info was incorrect anyway)
  • Removed the <Tabs> wrapper entirely — the section is now ### Event Serialization (a subsection under Event Types, same level as Lifecycle Events, Model Stream Events, etc.) with just the TypeScript serialization content directly

Net change: -11 lines, +1 line.

@agent-of-mkmeral
Copy link
Contributor Author

Merged main into this branch to fix the CI failure.

Root cause: The typecheck:snippets step was failing with:

error TS2307: Cannot find module '@strands-agents/sdk/openai' or its corresponding type declarations.

in deploy_to_docker/imports.ts and deploy_to_docker/index.tscompletely unrelated to this PR's streaming docs changes. These files were updated on main (likely by a recent rename/refactor of the OpenAI provider module), and this branch was behind.

Fix: Merged upstream main (97aa679) → commit dd35581. No conflicts.

CI should be green now. @mkmeral

Updates Event Serialization section for sdk-typescript PR #741:

- Put Event Serialization under Python/TypeScript tabs
- Add multi-agent event serialization table (10 events from PR #741)
- Add A2A event serialization table (2 events from PR #741)
- Add Python tab explaining event filtering approach
- Update excluded fields list to include orchestrator and state
- Note Error object serialization format
Replace the three comprehensive tables (agent events, multi-agent events,
A2A events) in the TypeScript serialization tab with prose that explains
the behavior, the key differences during serialization, and mentions a
few examples of filtered/included fields without an exhaustive listing.

Python tab remains unchanged.
Show what an event looks like in-process (with agent reference)
versus what JSON.stringify produces (compact wire-safe output).
Covers text deltas, lifecycle events, and result events.
Removed commented-out code regarding lifecycle and result events.
@mkmeral mkmeral deployed to manual-approval March 25, 2026 19:22 — with GitHub Actions Active
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants