A minor release of the SDK on the unchanged spec revision 1.0.0-draft.8. Every package now declares Node.js 22.12 or later, the types that restate an upstream SDK’s native shapes are marked @beta, and a Google ADK error close now carries the turn’s usage. It also publishes draft.8’s first erratum, which changes no set, meaning, wire, fold or golden.
Upgrading from 0.11.x
- Node.js 22.12 or later. Every package now declares
"engines": {"node": ">=22.12.0"}. The packages are ES modules and use no Node API; the floor is 22.12 because that’s the first 22.x whose require() loads ES modules from CommonJS. CI now runs on Node 22 and 24. On an older Node, npm warns (EBADENGINE); nothing is removed.
- The 1.x promise, and what
@beta means. A symbol marked @beta in the type declarations is outside the 1.x promise: it may change in a minor release. This release marks as @beta the types that restate an upstream SDK’s native shapes: the OpenAI Agents SDK package’s 31 native-mirror types, and the Google ADK package’s AdkEvent, AdkContent and AdkPart. These follow the package’s peer range. Core’s producer helpers were already @beta. Each package’s own API (its createXNormalizer(), the options it takes and its helpers) carries the 1.x promise. It’s a marking, not a removal: nothing stops compiling. The rule is stated in core’s README, under “API stability”.
Google ADK
- An error close carries the turn’s usage. When ADK ends a turn with an error in the stream (
errorCode and errorMessage), the turn’s turn.error now carries the turn’s usage, as a host-reported error close already did. No recorded stream reaches this path, so none changes. This is a producer fix: the in-band close now carries the usage the spec defines for turn.error, and no field’s meaning changes.
- An empty
artifactDelta no longer rides a provider-raw block. ADK gives every event an empty artifactDelta, and the normalizer carried it each time as a provider-raw block in the message content. It now skips artifactDelta only when it’s an empty object. A non-empty one still rides exactly as before, alone or beside another unmapped action. Recorded ADK streams change by design: those blocks leave, a block that also carried another action keeps it without the empty key, and seq renumbers. The fold keeps every message, and every turn record is unchanged.
OpenAI Agents SDK
- A handoff at the start of a resumed run gets a real parent turn. A resumed run can stream a handoff before any turn of the invoke has opened. The normalizer now opens the invoke’s own turn (
turn_resume_<callId>) at the handoff’s handoff_requested, instead of at handoff_occurred, and makes it the parent of the handoff’s nested turn, so the nested turn carries the host’s thread. Before, the nested turn’s parentTurnId was a placeholder that named no turn. In a stored fold, the nested turn’s parentTurnId changes, and the resumed turn now comes before it in turns[]. Messages and artifacts are unchanged, and no recorded stream has this shape. This is a defect fix: the nested turn now gets the parent the spec already prescribes (§1.1: a nested turn’s parentTurnId points at the enclosing turn), and no field’s meaning changes.
@silverprotocol/core
- The MCP App display-mode request lists its modes in
AgDisplayMode’s order (inline, pip, fullscreen). The values are the same, so validation is unchanged; the type unions print in the new order.
- The README gains the “API stability” section described above.
Spec: an erratum to draft.8
The first erratum to draft.8, applied in place under §15’s errata policy, with no version change. §12’s closed-set paragraph now notes, in an informative parenthetical, that the reference SDK checks its schema against the table: its spec-drift check reads the table and compares its sets. §3’s mcp-app mode union is listed in AgDisplayMode’s order. Neither edit changes a set, a meaning, the wire, a fold or a golden.
Wire version
1.0.0-draft.8, unchanged. Replaying every recorded stream through the 0.11.0 and 0.12.0 packages, the Claude Agent SDK (30), OpenAI Agents SDK (15) and Vercel AI SDK (8) streams are byte-identical, in their events and in the fold. Of the 116 Google ADK runs (the recorded streams, the same streams with and without the host-completion event, and the pause fixtures in both modes), 6 are identical, and 110 differ only by the removed empty artifactDelta blocks, the empty key taken off the blocks that also carry another action, and the seq numbering that follows. Every fold matches once the same changes are applied.
The v0.12.0 release is tagged at typescript-sdk commit ef24ebd4, the commit npm’s provenance for all six 0.12.0 packages attests.