Key Changes
OpenAI client compatibility and the new default model
This release requires openai 7.2 or later for applications that supply their own OpenAI client. Agents without an explicit model now use gpt-5.6-luna with reasoning.effort: "none" and text.verbosity: "low". Configure an explicit model or set OPENAI_DEFAULT_MODEL when an application needs a different default.
MCP v2 negotiation with legacy server support
Local MCP connections now use the MCP TypeScript SDK v2 client and negotiate the 2026-07-28 protocol where available, with compatible fallback for existing v1 servers. Applications using MCPServerStdio, MCPServerStreamableHttp, or MCPServerSSE do not need to bridge the v1 and v2 SDK packages themselves.
Durable input, tool output, and retry state
RunState.addInput() can stage new input while a run is paused, and pendingInput survives serialization until the next safe model request. JSON-compatible tool return values retain their structure across RunState serialization, while canonical invocation evidence prevents approved or completed local tool calls from being rebound incorrectly. Applications may explicitly approve an otherwise unsafe non-streaming model replay with approveUnsafeReplay: true.
Safer sandbox mount credentials
Credential-bearing in-container mounts now fail closed unless the application acknowledges the exact effective mount path with Manifest.withInContainerMountCredentialExposureAcknowledged() or, for ambient and external authority, Manifest.withInContainerMountBroadCredentialExposureAcknowledged(). Serialized credentials and unsafe mount authority are never trusted on resume. The deprecated Vercel allowS3CredentialExposure: true option remains available for released inline S3 configurations.
React Native and Realtime improvements
Core and Realtime packages now publish React Native conditions for portable shims. React Native applications provide an app-owned native WebRTC transport and retain responsibility for permissions, audio routing, and transport lifecycle. Realtime configuration also supports GA transcription models and context options, while closing browser WebRTC transports no longer stops caller-owned media streams.
More faithful provider and adapter results
The OpenAI and AI SDK adapters now preserve additional provider behavior across streaming and non-streaming runs, including Chat Completions audio, citations and request IDs, optional raw usage, AI SDK PDF inputs and prompt-cache retention, conversation program item IDs, apply-patch move destinations, and complete interleaved output ordering.
What's Changed
- feat(core): use gpt-5.6-luna as default model by @seratch in #1613
- feat(core): support MCP SDK v2 negotiation by @seratch in #1558
- feat(core): preserve raw usage payloads by @seratch in #1611
- feat(core): pass run context to custom sessions by @seratch in #1585
- feat(core): add durable pending input to RunState by @seratch in #1630
- feat(core): allow applications to approve unsafe replays by @seratch in #1628
- feat(realtime): support React Native custom transports by @seratch in #1604
- feat(realtime): support GA transcription options by @seratch in #1635
- feat(ai-sdk): support PDF file inputs by @seratch in #1588
- chore: upgrade OpenAI package to v7.2 by @seratch in #1591
- fix(core): tighten sandbox mount credential exposure by @seratch in #1627
- fix(core): protect sandbox mount credentials by @seratch in #1602
- fix(core): preserve free-form MCP object schemas by @seratch in #1629
- fix(core): scope hosted MCP approval identity by @seratch in #1600
- fix(core): bind tool approvals and completed replays to canonical invocations by @seratch in #1601
- fix(core): invalidate MCP tool caches safely by @seratch in #1605
- fix(core): count only admitted model turns by @seratch in #1606
- fix(core): normalize strict referenced tool arguments by @seratch in #1596
- fix(core): publish completed guardrail results by @seratch in #1589
- fix(core): redact JSON validation errors by @seratch in #1590
- fix(core): serialize MCP manager lifecycle operations by @seratch in #1633
- fix(core): preserve structured tool outputs in RunState by @seratch in #1631
- fix(core): reject overly deep strict JSON schemas by @seratch in #1638
- fix(openai): count requests without usage by @seratch in #1614
- fix(openai): propagate Chat Completions request IDs by @seratch in #1615
- fix(openai): preserve apply_patch move destinations by @seratch in #1616
- fix(openai): preserve streamed Chat Completions citations by @seratch in #1617
- fix(openai): preserve program item IDs in conversations by @seratch in #1618
- fix(openai): strip placeholder IDs from Responses input by @seratch in #1620
- fix(openai): serialize compaction session mutations by @seratch in #1624
- fix(openai): preserve streamed Chat Completions audio by @seratch in #1626
- fix(openai): omit parallel_tool_calls without tools by @seratch in #1637
- fix(realtime): keep a caller-supplied WebRTC media stream alive on close by @adityasingh2400 in #1586
- fix(realtime): accept duration usage on input transcription events by @AtecAi in #1371
- fix(extensions): preserve AI SDK response order by @seratch in #1594
- fix(extensions): align Twilio interruption playback by @seratch in #1608
- fix(extensions): forward AI SDK prompt cache retention by @seratch in #1619
- fix(extensions): redact Modal inline mount credential errors by @seratch in #1634
- fix(ai-sdk): preserve complete AI SDK final output by @seratch in #1595
- fix(ai-sdk): transform complete interleaved AI SDK output once by @seratch in #1597
Documentation & Other Changes
- docs: improve translation source clarity by @seratch in #1625
- ci: bound workflow job runtimes by @seratch in #1632
- perf: speed up test feedback by @seratch in #1621
- test: enforce silent test output by @seratch in #1607
- test: update sandbox storage mount integration fixture by @seratch in #1609
- test: add released package API contract by @seratch in #1636
- test: add historical RunState compatibility corpus by @seratch in #1639
- chore: update versions by @github-actions[bot] in #1587
New Contributors
- @adityasingh2400 made their first contribution in #1586
- @AtecAi made their first contribution in #1371
Full Changelog: v0.14.3...v0.15.0