0.12.4
A patch release. All six packages move to 0.12.4 together, and the spec revision stays 1.0.0-draft.8. It verifies the framework packages against the October versions of their frameworks, widens the OpenAI Agents SDK range to 0.19, and fixes how a Claude tool result’s file-referenced image is mapped.
Verified versions
Each framework package is verified end to end, tool calls included, against a live run at:
@anthropic-ai/claude-agent-sdk0.3.292;@openai/agents0.19.0;@google/adk2.2.1, with@google/genai2.27.0;ai7.0.130.
Runs on the newer models claude-sonnet-5-5 and gpt-6.1-sol produce the same event shape as their predecessors on the Claude Agent SDK and OpenAI Agents facets; the Vercel run on gpt-6.1-sol carried no reasoning block. No default model changes.
Claude Agent SDK
- An image in a tool result that references a file now maps to the file source. An image whose source is a Files API reference (
{ type: "file", file_id }) used to map to aurlsource with no URL. It now maps to{ type: "file", fileId }, with nomediaType, since the reference names none. No recorded stream carries such an image. This is a defect fix: the source now takes the file arm the spec defines (AgJSON §2,AgSource), and no field’s meaning changes. - The startup failure reason
provider_not_allowed, new in 0.3.292, closes the turn withturn.errorretriable: false, like other configuration refusals.
OpenAI Agents SDK
- OpenAI Agents SDK:
@silverprotocol/openai-agentsnow supports@openai/agentsup to 0.19.x (peer range>=0.2.0 <0.20). The facet needs no change for 0.19: the stream items it reads keep the same shape, and every 0.19 change listed below maps to the events the facet already emits. Our recorded runs produce the same stream on 0.19 as on 0.18. - Changes in
@openai/agents0.19 that hosts may notice. These are the SDK’s, not the facet’s. Some change what a run’s events carry, as noted:- A run paused under an earlier
@openai/agentsversion cannot be resumed on 0.19. This includes a run waiting on an approval. 0.19 rejects a saved run state that does not record that its input guardrails completed, and earlier versions never record it. The resume throwsUserError(“Cannot resume this checkpoint…”). Finish or discard paused runs before upgrading, or restart them from the original input. A run paused under 0.19 resumes normally. - A tool’s error text no longer includes the exception. A function tool that throws, with no custom
errorFunction, now reports “An error occurred while running the tool. Please try again.” without the “Error: …” detail, and a call with malformed arguments drops it too. The text reachestool.doneas before; only its words change. Provide anerrorFunctionif the model or your UI needs the detail. - An agent used as a tool now returns its guardrail-checked final output when output guardrails ran, and its
onStreamcallback buffers at most 1024 pending events by default (onStreamMaxPendingEventsadjusts it). - A resumed MCP call, or a call that had already completed, must keep its original MCP server binding; if the binding is missing or changed, the resume throws. When a current permanent approval decision exists, it now applies on resume.
- When one MCP server exposes tools whose names normalize to the same function name, the SDK now gives them distinct, suffixed names, so
tool.start.namediffers for those tools. - A handoff with an input filter now throws when the run uses
conversationIdorpreviousResponseId. The throw comes after the handoff has started streaming, so the turn closes through the host’s error path (turn.error) or, at the end of the stream, asturn.abort(reason:stream-truncated). A function tool whose approval input cannot be copied also ends the run mid-turn the same way.
- A run paused under an earlier
- A refused computer-use safety check no longer runs the action. With
@openai/agents0.19, when a computer tool’sonSafetyCheckreturnsfalse, the SDK rejects the call instead of performing it (earlier versions ran the action anyway).
Known gap
-
A rejected computer-use call is reported as completed. When a client-executed computer call is not run, the facet closes it with
tool.doneoutcome: "ok". Two cases reach this:- its approval is rejected, on any supported
@openai/agentsversion; - its
onSafetyCheckreturnsfalse, on 0.19.
The result carries the SDK’s 1×1 placeholder screenshot. The rejection message appears only in an
ext.openai.late-messageevent, which the reducer does not keep in the record. Until this is resolved, a host that needs to tell a refused computer call from an executed one should read its own approval or safety-check decision. - its approval is rejected, on any supported
What to do
- If you use MCP servers with OAuth through
@openai/agents: make sure@modelcontextprotocol/clientresolves to 2.2.0 or later in your lockfile (GHSA-6qxp-vccf-f47h).@openai/agents-coreinstalls it as an optional dependency, so a lockfile that resolved 2.0.x or 2.1.x keeps it until you update.@silverprotocol/openai-agentsitself never loads that package.
Google ADK
- On a final response with content,
CONTINUATION(new in@google/genai2.27.0) maps tounknown, and the native value ridesfinishReasonRaw. - On a Gemini 3.x Live model,
@google/adk2.2.1 yields each input-transcription fragment as finished, with no aggregate after them; each fragment is read once.
Wire version
1.0.0-draft.8, unchanged. Replaying every recorded stream through the 0.12.3 and 0.12.4 packages, all 148 runs are byte-identical: the Claude Agent SDK (31), OpenAI Agents SDK (16) and Vercel AI SDK (9) streams, and the Google ADK streams (24) and pause fixtures (22), each with and without the host-completion event. The one change, the Claude file-referenced image above, appears in no recorded stream.
The v0.12.4 release is tagged at typescript-sdk commit e034112c, the commit npm’s provenance for all six 0.12.4 packages attests.