Updates

Release notes for the @silverprotocol/* packages. Every cohort ships all packages in lockstep, npm-attested, with the verification evidence on each package's compatibility table.

0.5.0

Grant modes + the notice role — AgJSON 1.0.0-draft.2

The wire vocabulary grew for the first time since the HITL merge — two additive constructs, designed in the open on typescript-sdk#16 with guuey as the first consumer, and signed off against their production surfaces before this cut. Everything is additive: streams that don’t use the new vocabulary are byte-identical to draft.1.

Real permission systems answer “yes” with a scope: always, this chat only, just once. hitl.ask (and its persisted AgPausedAsk record) can now declare grantModes — the accept variants the asker offers — and the answer echoes exactly one as AgHitlAnswer.grantModeId. The design is strictly asker-declared: ids are opaque, AgJSON hard-codes nobody’s mode set, and declining stays the universal affordance outside the declaration (a renderer can always show refusal without consulting it). Anchored on the Claude Agent SDK’s PermissionUpdate.destination scopes and the OpenAI Agents alwaysApprove/alwaysReject options; frameworks with binary confirmation (ADK) simply don’t declare, which is the valid absent case.

Enforcement ships with the shape: grantModeId on a non-resolved answer rejects at parse, and the new validateHitlAnswer(ask, answer) checks the cross-object contract (required-iff-declared, echo-must-be-declared, plus the pre-existing requestState byte-echo rule) against the fold’s own paused-ask record. Clients advertise support via the hitl.grantModes capability flag.

The notice role — a first-class home for transcript annotations (§3)

AgRole gains "notice": a persisted, non-conversational transcript row for host banners, adapter annotations, and framework notices — with noticeSource: host | adapter | framework naming the layer that injected it. A notice is never replayed to the model, never merges into assistant content, and never renders as agent-authored. The admission test is deliberately narrow (persisted + user-facing + non-conversational); ephemeral status chatter stays in vendor carries.

The Claude normalizer ships the first producer: SDKInformationalMessage frames (transcript notices, halt explanations) are promoted from their vendor-extension carry to full notice messages — and now carry tool_use_id, which the old route dropped.

Wire version

AGJSON_VERSION is now 1.0.0-draft.2. Draft.1 inputs remain accepted (same major); consumers pinning 0.4.x should bump to parse streams that use the new vocabulary.

0.4.4

Claude /context report carried — plus OpenAI Agents 0.16 support

Claude Agent SDK 0.3.230 started attaching a structured twin of the /context report — model, token totals, over-limit detail, and per-category/MCP-tool/memory-file/agent breakdowns — to the synthetic assistant message that delivers the markdown table. The Claude normalizer now carries that context_usage object verbatim as providerMetadata on the message’s first block (or a message.metadata event when the frame has no blocks), joining the existing wrapper-sibling carries. Clients can render a context-usage card straight from the fold instead of parsing markdown.

OpenAI Agents 0.16 supported

@openai/agents 0.16.0 landed four days after 0.15.0, again outside our declared peer range. The study came back as clean as it gets: both consumed wire files are byte-identical to 0.15.0 (run-item event names, protocol items, and the full literal inventory all zero-delta) — the minor is internal to agent/handoff/runner plumbing. The range widens to >=0.2.0 <0.17 and the npm peer warning disappears.

Verification refresh

  • Claude Agent SDK 0.3.233SDKMessage union unchanged (39 members); the only stream-wire addition is the context_usage sibling carried above.
  • genai 2.17.1 (under ADK 1.6.0) — the Part surface is byte-identical.
  • Vercel AI 7.0.66 with the aligned @ai-sdk/mcp 2.0.32 / @ai-sdk/openai 4.0.42 trio — provider-utils pin unchanged at 5.0.27, both patches crossed the nightly’s family-forced leg silently.

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

0.4.3

OpenAI Agents 0.15 supported — peer range widened

@openai/agents published 0.15.0 outside our declared peer range, which meant npm warned anyone installing latest alongside @silverprotocol/openai-agents. The study came back clean — every consumed wire surface is unchanged (run-item event names and protocol items both zero-delta) — so this release simply widens the range to >=0.2.0 <0.16 and the warning disappears.

Verification refresh

The whole peer matrix moved and re-verified as wire no-ops:

  • Claude Agent SDK 0.3.229SDKMessage union unchanged across three patches.
  • genai 2.17.0 (under ADK 1.6.0) — the Part surface is zero-delta; the minor is elsewhere.
  • Vercel AI 7.0.64 with the aligned @ai-sdk/mcp 2.0.31 / @ai-sdk/openai 4.0.41 trio — six upstream patches absorbed with zero compatibility incidents, courtesy of the nightly’s lockstep-aware verification.

No behavior changes; the compatibility tables on each npm page carry the dated evidence.

0.4.2

OpenAI compaction joins the shared vocabulary

The OpenAI Agents facet now maps compaction_item_created run items (new in @openai/agents 0.14.3) onto AgJSON’s first-class compaction content block — the same shape the Claude facet already emits for its compaction markers. Two frameworks’ context-compaction, one folded vocabulary: a consumer that renders or replays compaction handles both without knowing which framework produced the stream.

  • The replay-load-bearing encrypted_content blob rides the block’s ciphertext opaque (provider: "openai"), mirroring the Claude mapping exactly.
  • Previously these items fell through to the lossless ext.openai.unparsed channel — nothing was dropped, but nothing converged either.

Verification refresh

Every facet’s compatibility table on npm now carries the week’s evidence: Claude Agent SDK 0.3.226 (five patches, wire-no-op — SDKMessage union verified unchanged), OpenAI Agents 0.14.3, Google ADK 1.6.0 + genai 2.16.0 (full d.ts inventory diff: Part/Event/LlmResponse all zero-delta), and the Vercel AI 7.0.58 provider-utils-aligned trio.