1.0.0-rc.2

AgJSON 1.0.0-rc.2: ADK internal metadata and refused computer actions

The second release candidate for 1.0.0. All six packages move to 1.0.0-rc.2 together, and they ship spec revision 1.0.0-rc.2 (AGJSON_VERSION), a revision of rc.1 before 1.0.0.

Installing the release candidate

The release candidate is published under the rc tag. latest stays on 0.12.5:

npm i @silverprotocol/core@rc

Install each framework package you use the same way, so every @silverprotocol/* package in your lockfile is on 1.0.0-rc.2. While a release candidate is the most recent publish, a package’s page on npmjs.com shows no README; each package still carries its README.

Upgrading from rc.1 or 0.12.x

  • OpenAI Agents SDK: a refused computer-use action now closes as denied. When @openai/agents refuses a computer action (a declined approval, or an onSafetyCheck that returns false), its tool.done now has outcome: "denied", with the SDK’s refusal message as a text block. 0.12.x and rc.1 closed it as ok. So a refused action now shows as a declined tool call: a UI that marks a denied call as failed shows it failed, where it showed it done. A consumer on 0.12.x or any 1.0.0-* release validates the new close unchanged.

Google ADK

  • ADK’s internal metadata entries are no longer carried. ADK reserves the customMetadata entries whose name begins with __adk_internal_ for its own components, and removes them from the API responses, saved session files and A2A messages it produces. At @google/adk 2.2.1 they hold a tool-call integrity stamp and a restored-history marker. The package carried them in the event-level provider-raw block and in an ext.google.unparsed event’s native. It now omits them there, beside the A2A relay’s bookkeeping entries. Only top-level entries are matched, and every other entry still rides. An event whose customMetadata held only such entries yields no provider-raw block, so a stream that has one is one event shorter than at rc.1, and its later seq values renumber. This landed as a revision (§8.0 item 38): no recorded stream carries such an entry.
  • Only the pausing agent’s final response signals its pause. A final response signals an ask’s pause (§8.0 item 26) only when it comes from the agent that raised the ask, and only when it arrives while the ask is pending. A run cut before the event that ends the pause, in which another agent answered, or, with host completion on, in which the final response came before the ask, now closes as a truncation, or with the in-band error it met, where it closed paused. This is a defect fix.
  • The aggregate-window bookkeeping reads each event’s window once instead of up to four times.

OpenAI Agents SDK

  • A refused computer action closes as denied (see Upgrading). Its content is the SDK’s message as a text block, then the screenshot’s file block, and it carries no isError, errorText or errorCode. Every other computer result still closes ok.
  • A computer screenshot lands as base64 bytes with its media type. @openai/agents sends the screenshot as a data:image/png;base64,… URL, and the package put the whole URL in the file block’s source.data. It now takes the bytes after ;base64, as data, and the header’s media type as mediaType. A value without a data: header lands as before. This is a defect fix: the spec’s base64 source holds the base64 text alone, with a media type that matches the bytes (§2).
  • The SDK’s markers ride tool.done providerMetadata: the run-item’s executionStatus, which the SDK sets only when the action ran; a refused action’s approvalStatus and message; and the item’s acknowledgedSafetyChecks. executionStatus also rides shell, apply-patch and program results.
  • The package’s documentation now says that executionStatus arrived in agents-core 0.14.3, for built-in results too, where it said built-in results never carry it.

Spec: AgJSON 1.0.0-rc.2

rc.2 revises rc.1. The revision note in SPEC §15 lists both changes:

  • §8.0 item 38: a normalizer targeting ADK omits a top-level customMetadata entry whose name begins with __adk_internal_ (§10 item 68, §13.12). A producer that declares rc.1 may still carry these entries.
  • §8.0 item 20: the @openai/agents rejected computer result maps to tool.done {outcome: "denied"}, with the SDK’s rejection message as a text block, and the screenshot’s data: URL lands as base64 bytes with its media type (§10 item 69).

No closed set, schema or fold rule changes. rc.1 envelopes remain accepted (same major, §12).

Verified versions

Each framework package is verified end to end, tool calls included, against a live run at:

  • @anthropic-ai/claude-agent-sdk 0.3.296;
  • @openai/agents 0.20.0;
  • @google/adk 2.2.1, with @google/genai 2.28.0;
  • ai 7.0.137.

Wire version

1.0.0-rc.2. Replaying every recorded stream through the 1.0.0-rc.1 and 1.0.0-rc.2 packages, all 105 runs give byte-identical events and fold to the same result: the Claude Agent SDK (32), OpenAI Agents SDK (16) and Vercel AI SDK (9) streams, and the Google ADK streams (24, each with and without the host-completion event). Of the 624 runs of the engine-built fixtures, five change, all OpenAI built-in tool fixtures, in the ways described above.

The 1.0.0-rc.2 packages are built from typescript-sdk commit f3a9c754, the commit npm’s provenance for all six 1.0.0-rc.2 packages attests.