0.5.4

Claude Fable 5.1 on the wire, Google ADK 2.x supported, and a dependency sweep

A maintenance cohort: every upstream agent framework we normalize moved, one of them by a major, and Anthropic shipped a new top model. The wire vocabulary is untouched — AGJSON_VERSION stays 1.0.0-draft.2 — but several fields that used to be zero or absent now carry real values, and two new signals ride the provider-raw channels.

Claude Fable 5.1 captured — thinking you can count but not read

claude-fable-5-1 went GA on 2026-09-01 and the corpus now carries a live seed trio for it (echo, streamed partials, two ordered tool calls), captured through @anthropic-ai/claude-agent-sdk 0.3.258 — the first SDK build whose Claude Code knows the model id. Fable thinks on every turn but, by default, does not show its reasoning text. Three things change for a consumer as a result:

  • usage.reasoningTokens is now populated for Claude, per turn and per model (usage.byModel[model].reasoningTokens). It is a subset of outputTokens — do not add the two. This closes a gap where the facet had been discarding the Agent SDK’s thinking-token telemetry as a constant zero.
  • reasoning.delta may arrive with an empty delta and providerMetadata.estimated_tokens (a number, or null before the first estimate). That is the whole payload when reasoning text is withheld; render it as progress. @silverprotocol/core’s StreamAssembler.reasoningDelta gained the optional providerMetadata slot to make this possible (additive).
  • ext.anthropic.frame now carries kind: "thinking_tokens" frames — Claude Code’s running estimate while the model thinks, the only live signal a host gets before the first visible token.

The result-frame extension also grows: ext.anthropic.result-meta gains per-model costBasis (list / managed / unknown — which price table costUsd was computed from, now that Claude Code applies managed rates and a US-only-inference multiplier), userMessageUuid, queuedTurnCount, and the CLI’s subagentStats tally. MCP tools that return resource_link blocks land those on tool.done providerMetadata.resourceLinks.

// A Fable 5.1 reasoning stream with display omitted:
{ type: "reasoning.start", id: "msg_…:reasoning:0" }
{ type: "reasoning.delta", id: "…", delta: "", providerMetadata: { estimated_tokens: 50 } }
{ type: "reasoning.end",   id: "…" }
{ type: "reasoning.opaque", id: "…", kind: "signature", value: "CAQS…" }

The default capture model stays claude-sonnet-5; Fable is a named seed family, not the default.

Google ADK 2.x supported

@google/adk 2.0.0 landed outside the declared range (typescript-sdk#22). The major rewrites the agent-graph plane (workflow engine, BaseAgent extends BaseNode, LLMAgentWrapper removed) and leaves the event wire additive-only: four optional workflow-plane fields on Event and an object-valued actions.agentState, all carried in the event-level provider-raw ledger and never present on a plain LlmAgent run. @google/genai 2.20.0 adds one Part field (mediaProcessing), carried beside mediaResolution. The peer range widens to >=1.0.0 <3; the gemini-3.7-flash trio was re-captured live at 2.0.0 with a clean census.

One thing to know if you use MCPToolset: ADK 2.0 made @modelcontextprotocol/sdk an optional peer loaded lazily at connect time. Install it yourself alongside @google/adk.

Vercel AI SDK 7.0.90 — errors carry their code

The ai 7.0.90 trio (@ai-sdk/openai 4.0.56, @ai-sdk/mcp 2.0.43) leaves the typed stream surface byte-identical. Since 7.0.80 the SDK wraps provider mid-stream errors in a StreamProviderError; the facet now populates error.code and error.retriable (and the same fields on turn.error) from it. retriable may be inferred by the SDK from the HTTP status rather than asserted by the provider.

Dependency sweep

Development-only Dependabot alerts across both lockfiles were cleared: ADK 2.0’s optional peers dropped the mikro-orm / sqlite3 / tar subtree, the test runner moved to Vitest 4, and three transitive pins that upstream still holds below the patched release are overridden (adm-zip, @opentelemetry/core, uuid). None of these were reachable from the published packages, which depend only on zod. The workspace also moved to pnpm 11.25.0, which restores README metadata on pnpm publish — from this cohort on, the npm package pages render their READMEs.

The compatibility tables on each npm page carry the dated evidence.