diff --git a/.changeset/audio-activity.md b/.changeset/audio-activity.md
deleted file mode 100644
index 4553377d1..000000000
--- a/.changeset/audio-activity.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-'@tanstack/ai': minor
----
-
-feat: add generateAudio activity for music and sound-effect generation
-
-Adds a new `audio` activity kind alongside the existing `tts` and `transcription` activities:
-
-- `generateAudio()` / `createAudioOptions()` functions
-- `AudioAdapter` interface and `BaseAudioAdapter` base class
-- `AudioGenerationOptions` / `AudioGenerationResult` / `GeneratedAudio` types
-- `audio:request:started`, `audio:request:completed`, and `audio:usage` devtools events
diff --git a/.changeset/audio-example-pages.md b/.changeset/audio-example-pages.md
deleted file mode 100644
index f2c3e3e4b..000000000
--- a/.changeset/audio-example-pages.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
----
-
-chore: add ts-react-chat example pages and E2E coverage for audio providers
-
-**Example pages** (`examples/ts-react-chat`):
-
-- Updated text-to-speech and transcription pages with provider tabs (OpenAI, Gemini, Fal for TTS; OpenAI, Fal for transcription)
-- Added a new `/generations/audio` page covering Gemini Lyria and Fal audio generation
-- Added a shared `audio-providers` catalog and server-side adapter factories for audio, speech, and transcription
-
-**Tests**:
-
-- Added `@tanstack/ai-gemini` unit tests covering the Gemini TTS adapter (single-speaker default, multi-speaker config, missing-audio errors)
-- Added a new `audio-gen` feature to the E2E harness with a Gemini Lyria adapter factory, route, UI, fixture, and spec
diff --git a/.changeset/audio-generation-hook.md b/.changeset/audio-generation-hook.md
deleted file mode 100644
index c2decf396..000000000
--- a/.changeset/audio-generation-hook.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-'@tanstack/ai': minor
-'@tanstack/ai-client': minor
-'@tanstack/ai-react': minor
-'@tanstack/ai-solid': minor
-'@tanstack/ai-vue': minor
-'@tanstack/ai-svelte': minor
----
-
-feat: add `useGenerateAudio` hook and streaming support for `generateAudio()`
-
-Closes the parity gap between audio generation and the other media
-activities (image, speech, video, transcription, summarize):
-
-- `generateAudio()` now accepts `stream: true`, returning an
-  `AsyncIterable<StreamChunk>` that can be piped through
-  `toServerSentEventsResponse()`.
-- `AudioGenerateInput` type added to `@tanstack/ai-client`.
-- `useGenerateAudio` hook added to `@tanstack/ai-react`,
-  `@tanstack/ai-solid`, and `@tanstack/ai-vue`; matching
-  `createGenerateAudio` added to `@tanstack/ai-svelte`. All follow the same
-  `{ generate, result, isLoading, error, status, stop, reset }` shape as
-  the existing media hooks and support both `connection` (SSE) and
-  `fetcher` transports.
diff --git a/.changeset/error-narrowing.md b/.changeset/error-narrowing.md
deleted file mode 100644
index 20fb9802f..000000000
--- a/.changeset/error-narrowing.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-'@tanstack/ai': patch
-'@tanstack/ai-openai': patch
----
-
-refactor(ai, ai-openai): narrow error handling before logging
-
-`catch (error: any)` sites in `stream-to-response.ts`, `activities/stream-generation-result.ts`, and `activities/generateVideo/index.ts` are now narrowed to `unknown` and funnel through a shared `toRunErrorPayload(error, fallback)` helper that extracts `message` / `code` without leaking the original error object (which can carry request state from an SDK).
-
-Replaced four `console.error` calls in the OpenAI text adapter's `chatStream` catch block that dumped the full error object to stdout. SDK errors can carry the original request including auth headers, so the library now logs only the narrowed `{ message, code }` payload via the internal logger — any user-supplied logger receives the sanitized shape, not the raw SDK error.
diff --git a/.changeset/fal-audio-speech-transcription.md b/.changeset/fal-audio-speech-transcription.md
deleted file mode 100644
index 54bee2ceb..000000000
--- a/.changeset/fal-audio-speech-transcription.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-'@tanstack/ai-fal': minor
----
-
-feat: add audio, speech, and transcription adapters to @tanstack/ai-fal
-
-Adds three new tree-shakeable adapters alongside the existing `falImage()` and `falVideo()`:
-
-- `falSpeech()` — text-to-speech via models like Google `fal-ai/gemini-3.1-flash-tts`, `fal-ai/elevenlabs/tts/eleven-v3`, `fal-ai/minimax/speech-2.6-hd`, `fal-ai/kokoro/*`
-- `falTranscription()` — speech-to-text via `fal-ai/whisper`, `fal-ai/wizper`, `fal-ai/speech-to-text/turbo`, `fal-ai/elevenlabs/speech-to-text`
-- `falAudio()` — music and sound-effect generation via `fal-ai/minimax-music/v2.6`, `fal-ai/diffrhythm`, `fal-ai/lyria2`, `fal-ai/stable-audio-25/text-to-audio`, `fal-ai/elevenlabs/sound-effects/v2`
diff --git a/.changeset/fix-drain-post-stream-reentrance.md b/.changeset/fix-drain-post-stream-reentrance.md
deleted file mode 100644
index 91dd84041..000000000
--- a/.changeset/fix-drain-post-stream-reentrance.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-'@tanstack/ai-client': patch
----
-
-fix(ai-client): prevent drainPostStreamActions re-entrancy stealing queued actions
-
-When multiple client tools complete in the same round, nested `drainPostStreamActions()` calls from `streamResponse()`'s `finally` block could steal queued actions, permanently stalling the conversation. Added a re-entrancy guard and a `shouldAutoSend()` check requiring tool-call parts before triggering continuation.
diff --git a/.changeset/gemini-audio.md b/.changeset/gemini-audio.md
deleted file mode 100644
index b9e334a7d..000000000
--- a/.changeset/gemini-audio.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-'@tanstack/ai-gemini': minor
----
-
-feat(ai-gemini): add Lyria 3 Pro / Clip audio adapter and Gemini 3.1 Flash TTS
-
-**New adapter:**
-
-- `geminiAudio()` for Google Lyria music generation — supports `lyria-3-pro-preview` (full-length songs, MP3/WAV 48 kHz stereo) and `lyria-3-clip-preview` (30-second MP3 clips)
-
-**Enhanced:**
-
-- Added `gemini-3.1-flash-tts-preview` to the TTS model list (70+ languages, 200+ audio tags for expressive control)
-- Added `multiSpeakerVoiceConfig` to `GeminiTTSProviderOptions` for 2-speaker dialogue generation
diff --git a/.changeset/generated-media-union.md b/.changeset/generated-media-union.md
deleted file mode 100644
index 06c0b2a2f..000000000
--- a/.changeset/generated-media-union.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-'@tanstack/ai': minor
-'@tanstack/ai-openrouter': patch
-'@tanstack/ai-fal': patch
-'@tanstack/ai-openai': patch
-'@tanstack/ai-gemini': patch
-'@tanstack/ai-grok': patch
----
-
-Tighten `GeneratedImage` and `GeneratedAudio` to enforce exactly one of `url` or `b64Json` via a mutually-exclusive `GeneratedMediaSource` union.
-
-Both types previously declared `url?` and `b64Json?` as independently optional, which allowed meaningless `{}` values and objects that set both fields. They now require exactly one:
-
-```ts
-type GeneratedMediaSource =
-  | { url: string; b64Json?: never }
-  | { b64Json: string; url?: never }
-```
-
-Existing read patterns like `img.url || \`data:image/png;base64,${img.b64Json}\``continue to work unchanged. The only runtime-visible change is that the`@tanstack/ai-openrouter`and`@tanstack/ai-fal`image adapters no longer populate`url`with a synthesized`data:image/png;base64,...`URI when the provider returns base64 — they return`{ b64Json }`only. Consumers that want a data URI should build it from`b64Json` at render time.
diff --git a/.changeset/grok-audio-speech-support.md b/.changeset/grok-audio-speech-support.md
deleted file mode 100644
index 26dde578a..000000000
--- a/.changeset/grok-audio-speech-support.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-'@tanstack/ai-grok': minor
----
-
-feat(ai-grok): add audio and speech adapters for xAI
-
-Add three new tree-shakeable adapters that wrap xAI's audio APIs:
-
-- `grokSpeech` / `createGrokSpeech` — text-to-speech via `POST /v1/tts`. Supports the 5 xAI voices (`eve`, `ara`, `rex`, `sal`, `leo`), MP3/WAV/PCM/μ-law/A-law codecs, and the `language`, `sample_rate`, `bit_rate`, `optimize_streaming_latency`, `text_normalization` provider options.
-- `grokTranscription` / `createGrokTranscription` — speech-to-text via `POST /v1/stt`. Passes through `language`, `diarize`, `multichannel`, `channels`, `audio_format`, and `sample_rate`; maps xAI's word-level timestamps to `TranscriptionResult.words`.
-- `grokRealtime` / `grokRealtimeToken` — Voice Agent (realtime) adapter for `wss://api.x.ai/v1/realtime` with ephemeral tokens via `/v1/realtime/client_secrets`. Supports the `grok-voice-fast-1.0` and `grok-voice-think-fast-1.0` models.
-
-New model identifier exports: `GROK_TTS_MODELS`, `GROK_TRANSCRIPTION_MODELS`, `GROK_REALTIME_MODELS` and their corresponding types.
diff --git a/.changeset/isolate-cloudflare-production.md b/.changeset/isolate-cloudflare-production.md
deleted file mode 100644
index b6500df23..000000000
--- a/.changeset/isolate-cloudflare-production.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-'@tanstack/ai-isolate-cloudflare': patch
----
-
-feat(ai-isolate-cloudflare): support production deployments and close tool-name injection vector
-
-The Worker now documents production-capable `unsafe_eval` usage (previously the code, wrangler.toml, and README all described it as dev-only). Tool names are validated against a strict identifier regex before being interpolated into the generated wrapper code, so a malicious tool name like `foo'); process.exit(1); (function bar() {` is rejected at generation time rather than breaking out of the wrapping function.
diff --git a/.changeset/ollama-tool-converter.md b/.changeset/ollama-tool-converter.md
deleted file mode 100644
index 99d9678c0..000000000
--- a/.changeset/ollama-tool-converter.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-'@tanstack/ai-ollama': patch
----
-
-refactor(ai-ollama): extract tool conversion into `src/tools/` matching peer adapters
-
-Tool handling lived inline inside the text adapter with raw type casts. It is now split into a dedicated `tool-converter.ts` / `function-tool.ts` pair (mirroring the structure used by `ai-openai`, `ai-anthropic`, `ai-grok`, and `ai-groq`) and re-exported from the package index as `convertFunctionToolToAdapterFormat` and `convertToolsToProviderFormat`. Runtime behavior is unchanged.
diff --git a/.changeset/useChat-callback-propagation.md b/.changeset/useChat-callback-propagation.md
deleted file mode 100644
index ec6661b69..000000000
--- a/.changeset/useChat-callback-propagation.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-'@tanstack/ai-react': patch
-'@tanstack/ai-preact': patch
-'@tanstack/ai-vue': patch
-'@tanstack/ai-solid': patch
----
-
-fix(ai-react, ai-preact, ai-vue, ai-solid): propagate `useChat` callback changes
-
-`onResponse`, `onChunk`, and `onCustomEvent` were captured by reference at client creation time. When a parent component re-rendered with fresh closures, the `ChatClient` kept calling the originals. Every framework now wraps these callbacks so the latest `options.xxx` is read at call time (via `optionsRef.current` in React/Preact, and direct option access in Vue/Solid, matching the pattern already used for `onFinish` / `onError`). Clearing a callback (setting it to `undefined`) now correctly no-ops instead of continuing to invoke the stale handler.
diff --git a/examples/ts-svelte-chat/CHANGELOG.md b/examples/ts-svelte-chat/CHANGELOG.md
index 698fd2089..6c2408cdc 100644
--- a/examples/ts-svelte-chat/CHANGELOG.md
+++ b/examples/ts-svelte-chat/CHANGELOG.md
@@ -1,5 +1,18 @@
 # ts-svelte-chat
 
+## 0.1.37
+
+### Patch Changes
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`008f015`](https://github.com/TanStack/ai/commit/008f0154f852e7e6734d3e3d35cad47780b52b7a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1)]:
+  - @tanstack/ai@0.14.0
+  - @tanstack/ai-client@0.8.0
+  - @tanstack/ai-svelte@0.7.0
+  - @tanstack/ai-openai@0.8.2
+  - @tanstack/ai-gemini@0.10.0
+  - @tanstack/ai-ollama@0.6.10
+  - @tanstack/ai-anthropic@0.8.2
+
 ## 0.1.36
 
 ### Patch Changes
diff --git a/examples/ts-svelte-chat/package.json b/examples/ts-svelte-chat/package.json
index cf9813733..913c46967 100644
--- a/examples/ts-svelte-chat/package.json
+++ b/examples/ts-svelte-chat/package.json
@@ -1,7 +1,7 @@
 {
   "name": "ts-svelte-chat",
   "private": true,
-  "version": "0.1.36",
+  "version": "0.1.37",
   "type": "module",
   "scripts": {
     "dev": "vite dev --port 3000",
diff --git a/examples/ts-vue-chat/CHANGELOG.md b/examples/ts-vue-chat/CHANGELOG.md
index 9d8794a10..07440128c 100644
--- a/examples/ts-vue-chat/CHANGELOG.md
+++ b/examples/ts-vue-chat/CHANGELOG.md
@@ -1,5 +1,19 @@
 # ts-vue-chat
 
+## 0.1.37
+
+### Patch Changes
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`008f015`](https://github.com/TanStack/ai/commit/008f0154f852e7e6734d3e3d35cad47780b52b7a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1)]:
+  - @tanstack/ai@0.14.0
+  - @tanstack/ai-client@0.8.0
+  - @tanstack/ai-vue@0.7.0
+  - @tanstack/ai-openai@0.8.2
+  - @tanstack/ai-gemini@0.10.0
+  - @tanstack/ai-ollama@0.6.10
+  - @tanstack/ai-anthropic@0.8.2
+  - @tanstack/ai-vue-ui@0.1.31
+
 ## 0.1.36
 
 ### Patch Changes
diff --git a/examples/ts-vue-chat/package.json b/examples/ts-vue-chat/package.json
index bfe8a1e00..1e539c683 100644
--- a/examples/ts-vue-chat/package.json
+++ b/examples/ts-vue-chat/package.json
@@ -1,6 +1,6 @@
 {
   "name": "ts-vue-chat",
-  "version": "0.1.36",
+  "version": "0.1.37",
   "private": true,
   "type": "module",
   "scripts": {
diff --git a/examples/vanilla-chat/CHANGELOG.md b/examples/vanilla-chat/CHANGELOG.md
index 854b4426f..f2801c3ed 100644
--- a/examples/vanilla-chat/CHANGELOG.md
+++ b/examples/vanilla-chat/CHANGELOG.md
@@ -1,5 +1,12 @@
 # vanilla-chat
 
+## 0.0.35
+
+### Patch Changes
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`008f015`](https://github.com/TanStack/ai/commit/008f0154f852e7e6734d3e3d35cad47780b52b7a)]:
+  - @tanstack/ai-client@0.8.0
+
 ## 0.0.34
 
 ### Patch Changes
diff --git a/examples/vanilla-chat/package.json b/examples/vanilla-chat/package.json
index ff766480b..de3a4fef3 100644
--- a/examples/vanilla-chat/package.json
+++ b/examples/vanilla-chat/package.json
@@ -2,7 +2,7 @@
   "name": "vanilla-chat",
   "private": true,
   "type": "module",
-  "version": "0.0.34",
+  "version": "0.0.35",
   "scripts": {
     "start": "vite --port 3001",
     "dev": "vite --port 3001",
diff --git a/packages/typescript/ai-anthropic/CHANGELOG.md b/packages/typescript/ai-anthropic/CHANGELOG.md
index 4ba3d72a0..024b794c3 100644
--- a/packages/typescript/ai-anthropic/CHANGELOG.md
+++ b/packages/typescript/ai-anthropic/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @tanstack/ai-anthropic
 
+## 0.8.2
+
+### Patch Changes
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+
 ## 0.8.1
 
 ### Patch Changes
diff --git a/packages/typescript/ai-anthropic/package.json b/packages/typescript/ai-anthropic/package.json
index 32608500e..8ed2fc2ac 100644
--- a/packages/typescript/ai-anthropic/package.json
+++ b/packages/typescript/ai-anthropic/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-anthropic",
-  "version": "0.8.1",
+  "version": "0.8.2",
   "description": "Anthropic Claude adapter for TanStack AI",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-client/CHANGELOG.md b/packages/typescript/ai-client/CHANGELOG.md
index d56cc938c..f7b88aab0 100644
--- a/packages/typescript/ai-client/CHANGELOG.md
+++ b/packages/typescript/ai-client/CHANGELOG.md
@@ -1,5 +1,34 @@
 # @tanstack/ai-client
 
+## 0.8.0
+
+### Minor Changes
+
+- feat: add `useGenerateAudio` hook and streaming support for `generateAudio()` ([#463](https://github.com/TanStack/ai/pull/463))
+
+  Closes the parity gap between audio generation and the other media
+  activities (image, speech, video, transcription, summarize):
+  - `generateAudio()` now accepts `stream: true`, returning an
+    `AsyncIterable<StreamChunk>` that can be piped through
+    `toServerSentEventsResponse()`.
+  - `AudioGenerateInput` type added to `@tanstack/ai-client`.
+  - `useGenerateAudio` hook added to `@tanstack/ai-react`,
+    `@tanstack/ai-solid`, and `@tanstack/ai-vue`; matching
+    `createGenerateAudio` added to `@tanstack/ai-svelte`. All follow the same
+    `{ generate, result, isLoading, error, status, stop, reset }` shape as
+    the existing media hooks and support both `connection` (SSE) and
+    `fetcher` transports.
+
+### Patch Changes
+
+- fix(ai-client): prevent drainPostStreamActions re-entrancy stealing queued actions ([#429](https://github.com/TanStack/ai/pull/429))
+
+  When multiple client tools complete in the same round, nested `drainPostStreamActions()` calls from `streamResponse()`'s `finally` block could steal queued actions, permanently stalling the conversation. Added a re-entrancy guard and a `shouldAutoSend()` check requiring tool-call parts before triggering continuation.
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+  - @tanstack/ai-event-client@0.2.8
+
 ## 0.7.14
 
 ### Patch Changes
diff --git a/packages/typescript/ai-client/package.json b/packages/typescript/ai-client/package.json
index 1a87be7ae..d916b2a60 100644
--- a/packages/typescript/ai-client/package.json
+++ b/packages/typescript/ai-client/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-client",
-  "version": "0.7.14",
+  "version": "0.8.0",
   "description": "Framework-agnostic headless client for TanStack AI",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-code-mode-skills/CHANGELOG.md b/packages/typescript/ai-code-mode-skills/CHANGELOG.md
index eed0bd6b2..81a92675a 100644
--- a/packages/typescript/ai-code-mode-skills/CHANGELOG.md
+++ b/packages/typescript/ai-code-mode-skills/CHANGELOG.md
@@ -1,5 +1,13 @@
 # @tanstack/ai-code-mode-skills
 
+## 0.1.8
+
+### Patch Changes
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+  - @tanstack/ai-code-mode@0.1.8
+
 ## 0.1.7
 
 ### Patch Changes
diff --git a/packages/typescript/ai-code-mode-skills/package.json b/packages/typescript/ai-code-mode-skills/package.json
index 9659309ba..3d2d85806 100644
--- a/packages/typescript/ai-code-mode-skills/package.json
+++ b/packages/typescript/ai-code-mode-skills/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-code-mode-skills",
-  "version": "0.1.7",
+  "version": "0.1.8",
   "description": "Persistent skill library for TanStack AI Code Mode - LLM-created reusable code snippets",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-code-mode/CHANGELOG.md b/packages/typescript/ai-code-mode/CHANGELOG.md
index 7d03d12c6..961487656 100644
--- a/packages/typescript/ai-code-mode/CHANGELOG.md
+++ b/packages/typescript/ai-code-mode/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @tanstack/ai-code-mode
 
+## 0.1.8
+
+### Patch Changes
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+
 ## 0.1.7
 
 ### Patch Changes
diff --git a/packages/typescript/ai-code-mode/models-eval/CHANGELOG.md b/packages/typescript/ai-code-mode/models-eval/CHANGELOG.md
index 9d0897172..67c075aab 100644
--- a/packages/typescript/ai-code-mode/models-eval/CHANGELOG.md
+++ b/packages/typescript/ai-code-mode/models-eval/CHANGELOG.md
@@ -1,5 +1,20 @@
 # @tanstack/ai-code-mode-models-eval
 
+## 0.0.11
+
+### Patch Changes
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`2e4c942`](https://github.com/TanStack/ai/commit/2e4c9429999b4367933a80570efee3600c0f9e08), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1)]:
+  - @tanstack/ai@0.14.0
+  - @tanstack/ai-openai@0.8.2
+  - @tanstack/ai-gemini@0.10.0
+  - @tanstack/ai-grok@0.7.0
+  - @tanstack/ai-ollama@0.6.10
+  - @tanstack/ai-anthropic@0.8.2
+  - @tanstack/ai-code-mode@0.1.8
+  - @tanstack/ai-groq@0.1.8
+  - @tanstack/ai-isolate-node@0.1.8
+
 ## 0.0.10
 
 ### Patch Changes
diff --git a/packages/typescript/ai-code-mode/models-eval/package.json b/packages/typescript/ai-code-mode/models-eval/package.json
index f92ab687d..a12ab0baa 100644
--- a/packages/typescript/ai-code-mode/models-eval/package.json
+++ b/packages/typescript/ai-code-mode/models-eval/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-code-mode-models-eval",
-  "version": "0.0.10",
+  "version": "0.0.11",
   "private": true,
   "type": "module",
   "description": "Dev benchmark: local/cloud models vs code-mode database-demo gold (not published)",
diff --git a/packages/typescript/ai-code-mode/package.json b/packages/typescript/ai-code-mode/package.json
index 23d866c53..cf10e9cc0 100644
--- a/packages/typescript/ai-code-mode/package.json
+++ b/packages/typescript/ai-code-mode/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-code-mode",
-  "version": "0.1.7",
+  "version": "0.1.8",
   "description": "Code Mode for TanStack AI - LLM-driven code execution in secure sandboxes",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-devtools/CHANGELOG.md b/packages/typescript/ai-devtools/CHANGELOG.md
index 9e12af470..25962735e 100644
--- a/packages/typescript/ai-devtools/CHANGELOG.md
+++ b/packages/typescript/ai-devtools/CHANGELOG.md
@@ -1,5 +1,13 @@
 # @tanstack/ai-devtools-core
 
+## 0.3.25
+
+### Patch Changes
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+  - @tanstack/ai-event-client@0.2.8
+
 ## 0.3.24
 
 ### Patch Changes
diff --git a/packages/typescript/ai-devtools/package.json b/packages/typescript/ai-devtools/package.json
index 6b13bf97c..600d5b258 100644
--- a/packages/typescript/ai-devtools/package.json
+++ b/packages/typescript/ai-devtools/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-devtools-core",
-  "version": "0.3.24",
+  "version": "0.3.25",
   "description": "Core TanStack AI Devtools",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-elevenlabs/CHANGELOG.md b/packages/typescript/ai-elevenlabs/CHANGELOG.md
index bd8e87f89..7d6627bfd 100644
--- a/packages/typescript/ai-elevenlabs/CHANGELOG.md
+++ b/packages/typescript/ai-elevenlabs/CHANGELOG.md
@@ -1,5 +1,13 @@
 # @tanstack/ai-elevenlabs
 
+## 0.1.8
+
+### Patch Changes
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`008f015`](https://github.com/TanStack/ai/commit/008f0154f852e7e6734d3e3d35cad47780b52b7a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+  - @tanstack/ai-client@0.8.0
+
 ## 0.1.7
 
 ### Patch Changes
diff --git a/packages/typescript/ai-elevenlabs/package.json b/packages/typescript/ai-elevenlabs/package.json
index 862b76168..d71f5595b 100644
--- a/packages/typescript/ai-elevenlabs/package.json
+++ b/packages/typescript/ai-elevenlabs/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-elevenlabs",
-  "version": "0.1.7",
+  "version": "0.1.8",
   "description": "ElevenLabs adapter for TanStack AI realtime voice",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-event-client/CHANGELOG.md b/packages/typescript/ai-event-client/CHANGELOG.md
index 627ecf223..5c4aac5e2 100644
--- a/packages/typescript/ai-event-client/CHANGELOG.md
+++ b/packages/typescript/ai-event-client/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @tanstack/ai-event-client
 
+## 0.2.8
+
+### Patch Changes
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+
 ## 0.2.7
 
 ### Patch Changes
diff --git a/packages/typescript/ai-event-client/package.json b/packages/typescript/ai-event-client/package.json
index 4042db793..bc692cbcb 100644
--- a/packages/typescript/ai-event-client/package.json
+++ b/packages/typescript/ai-event-client/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-event-client",
-  "version": "0.2.7",
+  "version": "0.2.8",
   "description": "Event client for TanStack AI devtools integration",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-fal/CHANGELOG.md b/packages/typescript/ai-fal/CHANGELOG.md
index 11f9c418f..e0a63801f 100644
--- a/packages/typescript/ai-fal/CHANGELOG.md
+++ b/packages/typescript/ai-fal/CHANGELOG.md
@@ -1,5 +1,33 @@
 # @tanstack/ai-fal
 
+## 0.7.0
+
+### Minor Changes
+
+- feat: add audio, speech, and transcription adapters to @tanstack/ai-fal ([#463](https://github.com/TanStack/ai/pull/463))
+
+  Adds three new tree-shakeable adapters alongside the existing `falImage()` and `falVideo()`:
+  - `falSpeech()` — text-to-speech via models like Google `fal-ai/gemini-3.1-flash-tts`, `fal-ai/elevenlabs/tts/eleven-v3`, `fal-ai/minimax/speech-2.6-hd`, `fal-ai/kokoro/*`
+  - `falTranscription()` — speech-to-text via `fal-ai/whisper`, `fal-ai/wizper`, `fal-ai/speech-to-text/turbo`, `fal-ai/elevenlabs/speech-to-text`
+  - `falAudio()` — music and sound-effect generation via `fal-ai/minimax-music/v2.6`, `fal-ai/diffrhythm`, `fal-ai/lyria2`, `fal-ai/stable-audio-25/text-to-audio`, `fal-ai/elevenlabs/sound-effects/v2`
+
+### Patch Changes
+
+- Tighten `GeneratedImage` and `GeneratedAudio` to enforce exactly one of `url` or `b64Json` via a mutually-exclusive `GeneratedMediaSource` union. ([#463](https://github.com/TanStack/ai/pull/463))
+
+  Both types previously declared `url?` and `b64Json?` as independently optional, which allowed meaningless `{}` values and objects that set both fields. They now require exactly one:
+
+  ```ts
+  type GeneratedMediaSource =
+    | { url: string; b64Json?: never }
+    | { b64Json: string; url?: never }
+  ```
+
+  Existing read patterns like `img.url || \`data:image/png;base64,${img.b64Json}\``continue to work unchanged. The only runtime-visible change is that the`@tanstack/ai-openrouter`and`@tanstack/ai-fal`image adapters no longer populate`url`with a synthesized`data:image/png;base64,...`URI when the provider returns base64 — they return`{ b64Json }`only. Consumers that want a data URI should build it from`b64Json` at render time.
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+
 ## 0.6.17
 
 ### Patch Changes
diff --git a/packages/typescript/ai-fal/package.json b/packages/typescript/ai-fal/package.json
index d3eb9e1c2..097d3a4e0 100644
--- a/packages/typescript/ai-fal/package.json
+++ b/packages/typescript/ai-fal/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-fal",
-  "version": "0.6.17",
+  "version": "0.7.0",
   "description": "fal.ai adapter for TanStack AI",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-gemini/CHANGELOG.md b/packages/typescript/ai-gemini/CHANGELOG.md
index 6a86b6a27..3b137c141 100644
--- a/packages/typescript/ai-gemini/CHANGELOG.md
+++ b/packages/typescript/ai-gemini/CHANGELOG.md
@@ -1,5 +1,35 @@
 # @tanstack/ai-gemini
 
+## 0.10.0
+
+### Minor Changes
+
+- feat(ai-gemini): add Lyria 3 Pro / Clip audio adapter and Gemini 3.1 Flash TTS ([#463](https://github.com/TanStack/ai/pull/463))
+
+  **New adapter:**
+  - `geminiAudio()` for Google Lyria music generation — supports `lyria-3-pro-preview` (full-length songs, MP3/WAV 48 kHz stereo) and `lyria-3-clip-preview` (30-second MP3 clips)
+
+  **Enhanced:**
+  - Added `gemini-3.1-flash-tts-preview` to the TTS model list (70+ languages, 200+ audio tags for expressive control)
+  - Added `multiSpeakerVoiceConfig` to `GeminiTTSProviderOptions` for 2-speaker dialogue generation
+
+### Patch Changes
+
+- Tighten `GeneratedImage` and `GeneratedAudio` to enforce exactly one of `url` or `b64Json` via a mutually-exclusive `GeneratedMediaSource` union. ([#463](https://github.com/TanStack/ai/pull/463))
+
+  Both types previously declared `url?` and `b64Json?` as independently optional, which allowed meaningless `{}` values and objects that set both fields. They now require exactly one:
+
+  ```ts
+  type GeneratedMediaSource =
+    | { url: string; b64Json?: never }
+    | { b64Json: string; url?: never }
+  ```
+
+  Existing read patterns like `img.url || \`data:image/png;base64,${img.b64Json}\``continue to work unchanged. The only runtime-visible change is that the`@tanstack/ai-openrouter`and`@tanstack/ai-fal`image adapters no longer populate`url`with a synthesized`data:image/png;base64,...`URI when the provider returns base64 — they return`{ b64Json }`only. Consumers that want a data URI should build it from`b64Json` at render time.
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+
 ## 0.9.1
 
 ### Patch Changes
diff --git a/packages/typescript/ai-gemini/package.json b/packages/typescript/ai-gemini/package.json
index ad892ad71..565f89104 100644
--- a/packages/typescript/ai-gemini/package.json
+++ b/packages/typescript/ai-gemini/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-gemini",
-  "version": "0.9.1",
+  "version": "0.10.0",
   "description": "Google Gemini adapter for TanStack AI",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-grok/CHANGELOG.md b/packages/typescript/ai-grok/CHANGELOG.md
index bd679aa39..f294789ce 100644
--- a/packages/typescript/ai-grok/CHANGELOG.md
+++ b/packages/typescript/ai-grok/CHANGELOG.md
@@ -1,5 +1,35 @@
 # @tanstack/ai-grok
 
+## 0.7.0
+
+### Minor Changes
+
+- feat(ai-grok): add audio and speech adapters for xAI ([#506](https://github.com/TanStack/ai/pull/506))
+
+  Add three new tree-shakeable adapters that wrap xAI's audio APIs:
+  - `grokSpeech` / `createGrokSpeech` — text-to-speech via `POST /v1/tts`. Supports the 5 xAI voices (`eve`, `ara`, `rex`, `sal`, `leo`), MP3/WAV/PCM/μ-law/A-law codecs, and the `language`, `sample_rate`, `bit_rate`, `optimize_streaming_latency`, `text_normalization` provider options.
+  - `grokTranscription` / `createGrokTranscription` — speech-to-text via `POST /v1/stt`. Passes through `language`, `diarize`, `multichannel`, `channels`, `audio_format`, and `sample_rate`; maps xAI's word-level timestamps to `TranscriptionResult.words`.
+  - `grokRealtime` / `grokRealtimeToken` — Voice Agent (realtime) adapter for `wss://api.x.ai/v1/realtime` with ephemeral tokens via `/v1/realtime/client_secrets`. Supports the `grok-voice-fast-1.0` and `grok-voice-think-fast-1.0` models.
+
+  New model identifier exports: `GROK_TTS_MODELS`, `GROK_TRANSCRIPTION_MODELS`, `GROK_REALTIME_MODELS` and their corresponding types.
+
+### Patch Changes
+
+- Tighten `GeneratedImage` and `GeneratedAudio` to enforce exactly one of `url` or `b64Json` via a mutually-exclusive `GeneratedMediaSource` union. ([#463](https://github.com/TanStack/ai/pull/463))
+
+  Both types previously declared `url?` and `b64Json?` as independently optional, which allowed meaningless `{}` values and objects that set both fields. They now require exactly one:
+
+  ```ts
+  type GeneratedMediaSource =
+    | { url: string; b64Json?: never }
+    | { b64Json: string; url?: never }
+  ```
+
+  Existing read patterns like `img.url || \`data:image/png;base64,${img.b64Json}\``continue to work unchanged. The only runtime-visible change is that the`@tanstack/ai-openrouter`and`@tanstack/ai-fal`image adapters no longer populate`url`with a synthesized`data:image/png;base64,...`URI when the provider returns base64 — they return`{ b64Json }`only. Consumers that want a data URI should build it from`b64Json` at render time.
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+
 ## 0.6.8
 
 ### Patch Changes
diff --git a/packages/typescript/ai-grok/package.json b/packages/typescript/ai-grok/package.json
index 9b18c23a2..077b1f130 100644
--- a/packages/typescript/ai-grok/package.json
+++ b/packages/typescript/ai-grok/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-grok",
-  "version": "0.6.8",
+  "version": "0.7.0",
   "description": "Grok (xAI) adapter for TanStack AI",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-groq/CHANGELOG.md b/packages/typescript/ai-groq/CHANGELOG.md
index 0708d637c..3813e54fa 100644
--- a/packages/typescript/ai-groq/CHANGELOG.md
+++ b/packages/typescript/ai-groq/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @tanstack/ai-groq
 
+## 0.1.8
+
+### Patch Changes
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+
 ## 0.1.7
 
 ### Patch Changes
diff --git a/packages/typescript/ai-groq/package.json b/packages/typescript/ai-groq/package.json
index 7e9c808c5..54ac5a374 100644
--- a/packages/typescript/ai-groq/package.json
+++ b/packages/typescript/ai-groq/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-groq",
-  "version": "0.1.7",
+  "version": "0.1.8",
   "type": "module",
   "description": "Groq adapter for TanStack AI",
   "author": "",
diff --git a/packages/typescript/ai-isolate-cloudflare/CHANGELOG.md b/packages/typescript/ai-isolate-cloudflare/CHANGELOG.md
index 4dd1c0493..95b15f386 100644
--- a/packages/typescript/ai-isolate-cloudflare/CHANGELOG.md
+++ b/packages/typescript/ai-isolate-cloudflare/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @tanstack/ai-isolate-cloudflare
 
+## 0.1.8
+
+### Patch Changes
+
+- feat(ai-isolate-cloudflare): support production deployments and close tool-name injection vector ([#465](https://github.com/TanStack/ai/pull/465))
+
+  The Worker now documents production-capable `unsafe_eval` usage (previously the code, wrangler.toml, and README all described it as dev-only). Tool names are validated against a strict identifier regex before being interpolated into the generated wrapper code, so a malicious tool name like `foo'); process.exit(1); (function bar() {` is rejected at generation time rather than breaking out of the wrapping function.
+
+- Updated dependencies []:
+  - @tanstack/ai-code-mode@0.1.8
+
 ## 0.1.7
 
 ### Patch Changes
diff --git a/packages/typescript/ai-isolate-cloudflare/package.json b/packages/typescript/ai-isolate-cloudflare/package.json
index 1f3e8e27b..55b619181 100644
--- a/packages/typescript/ai-isolate-cloudflare/package.json
+++ b/packages/typescript/ai-isolate-cloudflare/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-isolate-cloudflare",
-  "version": "0.1.7",
+  "version": "0.1.8",
   "description": "Cloudflare Workers driver for TanStack AI Code Mode - execute code on the edge",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-isolate-node/CHANGELOG.md b/packages/typescript/ai-isolate-node/CHANGELOG.md
index 7824c066f..f46ad66a7 100644
--- a/packages/typescript/ai-isolate-node/CHANGELOG.md
+++ b/packages/typescript/ai-isolate-node/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @tanstack/ai-isolate-node
 
+## 0.1.8
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @tanstack/ai-code-mode@0.1.8
+
 ## 0.1.7
 
 ### Patch Changes
diff --git a/packages/typescript/ai-isolate-node/package.json b/packages/typescript/ai-isolate-node/package.json
index c0787c0b7..d5ead5907 100644
--- a/packages/typescript/ai-isolate-node/package.json
+++ b/packages/typescript/ai-isolate-node/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-isolate-node",
-  "version": "0.1.7",
+  "version": "0.1.8",
   "description": "Node.js isolated-vm driver for TanStack AI Code Mode",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-isolate-quickjs/CHANGELOG.md b/packages/typescript/ai-isolate-quickjs/CHANGELOG.md
index 0560d714b..98e10b8cc 100644
--- a/packages/typescript/ai-isolate-quickjs/CHANGELOG.md
+++ b/packages/typescript/ai-isolate-quickjs/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @tanstack/ai-isolate-quickjs
 
+## 0.1.8
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @tanstack/ai-code-mode@0.1.8
+
 ## 0.1.7
 
 ### Patch Changes
diff --git a/packages/typescript/ai-isolate-quickjs/package.json b/packages/typescript/ai-isolate-quickjs/package.json
index b7ff50696..66cc6c9f5 100644
--- a/packages/typescript/ai-isolate-quickjs/package.json
+++ b/packages/typescript/ai-isolate-quickjs/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-isolate-quickjs",
-  "version": "0.1.7",
+  "version": "0.1.8",
   "description": "QuickJS WASM driver for TanStack AI Code Mode - runs everywhere",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-ollama/CHANGELOG.md b/packages/typescript/ai-ollama/CHANGELOG.md
index ee48e2859..30a3546a8 100644
--- a/packages/typescript/ai-ollama/CHANGELOG.md
+++ b/packages/typescript/ai-ollama/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @tanstack/ai-ollama
 
+## 0.6.10
+
+### Patch Changes
+
+- refactor(ai-ollama): extract tool conversion into `src/tools/` matching peer adapters ([#465](https://github.com/TanStack/ai/pull/465))
+
+  Tool handling lived inline inside the text adapter with raw type casts. It is now split into a dedicated `tool-converter.ts` / `function-tool.ts` pair (mirroring the structure used by `ai-openai`, `ai-anthropic`, `ai-grok`, and `ai-groq`) and re-exported from the package index as `convertFunctionToolToAdapterFormat` and `convertToolsToProviderFormat`. Runtime behavior is unchanged.
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+
 ## 0.6.9
 
 ### Patch Changes
diff --git a/packages/typescript/ai-ollama/package.json b/packages/typescript/ai-ollama/package.json
index b215dd0bb..3c36bc510 100644
--- a/packages/typescript/ai-ollama/package.json
+++ b/packages/typescript/ai-ollama/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-ollama",
-  "version": "0.6.9",
+  "version": "0.6.10",
   "description": "Ollama adapter for TanStack AI",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-openai/CHANGELOG.md b/packages/typescript/ai-openai/CHANGELOG.md
index 390e77fe2..a1870fc49 100644
--- a/packages/typescript/ai-openai/CHANGELOG.md
+++ b/packages/typescript/ai-openai/CHANGELOG.md
@@ -1,5 +1,31 @@
 # @tanstack/ai-openai
 
+## 0.8.2
+
+### Patch Changes
+
+- refactor(ai, ai-openai): narrow error handling before logging ([#465](https://github.com/TanStack/ai/pull/465))
+
+  `catch (error: any)` sites in `stream-to-response.ts`, `activities/stream-generation-result.ts`, and `activities/generateVideo/index.ts` are now narrowed to `unknown` and funnel through a shared `toRunErrorPayload(error, fallback)` helper that extracts `message` / `code` without leaking the original error object (which can carry request state from an SDK).
+
+  Replaced four `console.error` calls in the OpenAI text adapter's `chatStream` catch block that dumped the full error object to stdout. SDK errors can carry the original request including auth headers, so the library now logs only the narrowed `{ message, code }` payload via the internal logger — any user-supplied logger receives the sanitized shape, not the raw SDK error.
+
+- Tighten `GeneratedImage` and `GeneratedAudio` to enforce exactly one of `url` or `b64Json` via a mutually-exclusive `GeneratedMediaSource` union. ([#463](https://github.com/TanStack/ai/pull/463))
+
+  Both types previously declared `url?` and `b64Json?` as independently optional, which allowed meaningless `{}` values and objects that set both fields. They now require exactly one:
+
+  ```ts
+  type GeneratedMediaSource =
+    | { url: string; b64Json?: never }
+    | { b64Json: string; url?: never }
+  ```
+
+  Existing read patterns like `img.url || \`data:image/png;base64,${img.b64Json}\``continue to work unchanged. The only runtime-visible change is that the`@tanstack/ai-openrouter`and`@tanstack/ai-fal`image adapters no longer populate`url`with a synthesized`data:image/png;base64,...`URI when the provider returns base64 — they return`{ b64Json }`only. Consumers that want a data URI should build it from`b64Json` at render time.
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`008f015`](https://github.com/TanStack/ai/commit/008f0154f852e7e6734d3e3d35cad47780b52b7a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+  - @tanstack/ai-client@0.8.0
+
 ## 0.8.1
 
 ### Patch Changes
diff --git a/packages/typescript/ai-openai/package.json b/packages/typescript/ai-openai/package.json
index 9e6581269..26a8f792d 100644
--- a/packages/typescript/ai-openai/package.json
+++ b/packages/typescript/ai-openai/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-openai",
-  "version": "0.8.1",
+  "version": "0.8.2",
   "description": "OpenAI adapter for TanStack AI",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-openrouter/CHANGELOG.md b/packages/typescript/ai-openrouter/CHANGELOG.md
index 808af9eb5..4c8e068e2 100644
--- a/packages/typescript/ai-openrouter/CHANGELOG.md
+++ b/packages/typescript/ai-openrouter/CHANGELOG.md
@@ -1,5 +1,24 @@
 # @tanstack/ai-openrouter
 
+## 0.8.2
+
+### Patch Changes
+
+- Tighten `GeneratedImage` and `GeneratedAudio` to enforce exactly one of `url` or `b64Json` via a mutually-exclusive `GeneratedMediaSource` union. ([#463](https://github.com/TanStack/ai/pull/463))
+
+  Both types previously declared `url?` and `b64Json?` as independently optional, which allowed meaningless `{}` values and objects that set both fields. They now require exactly one:
+
+  ```ts
+  type GeneratedMediaSource =
+    | { url: string; b64Json?: never }
+    | { b64Json: string; url?: never }
+  ```
+
+  Existing read patterns like `img.url || \`data:image/png;base64,${img.b64Json}\``continue to work unchanged. The only runtime-visible change is that the`@tanstack/ai-openrouter`and`@tanstack/ai-fal`image adapters no longer populate`url`with a synthesized`data:image/png;base64,...`URI when the provider returns base64 — they return`{ b64Json }`only. Consumers that want a data URI should build it from`b64Json` at render time.
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+
 ## 0.8.1
 
 ### Patch Changes
diff --git a/packages/typescript/ai-openrouter/package.json b/packages/typescript/ai-openrouter/package.json
index 4f68a3d0a..3b1fe270a 100644
--- a/packages/typescript/ai-openrouter/package.json
+++ b/packages/typescript/ai-openrouter/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-openrouter",
-  "version": "0.8.1",
+  "version": "0.8.2",
   "description": "OpenRouter adapter for TanStack AI",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-preact/CHANGELOG.md b/packages/typescript/ai-preact/CHANGELOG.md
index 402e5d9b8..799b95a68 100644
--- a/packages/typescript/ai-preact/CHANGELOG.md
+++ b/packages/typescript/ai-preact/CHANGELOG.md
@@ -1,5 +1,17 @@
 # @tanstack/ai-preact
 
+## 0.6.20
+
+### Patch Changes
+
+- fix(ai-react, ai-preact, ai-vue, ai-solid): propagate `useChat` callback changes ([#465](https://github.com/TanStack/ai/pull/465))
+
+  `onResponse`, `onChunk`, and `onCustomEvent` were captured by reference at client creation time. When a parent component re-rendered with fresh closures, the `ChatClient` kept calling the originals. Every framework now wraps these callbacks so the latest `options.xxx` is read at call time (via `optionsRef.current` in React/Preact, and direct option access in Vue/Solid, matching the pattern already used for `onFinish` / `onError`). Clearing a callback (setting it to `undefined`) now correctly no-ops instead of continuing to invoke the stale handler.
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`008f015`](https://github.com/TanStack/ai/commit/008f0154f852e7e6734d3e3d35cad47780b52b7a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+  - @tanstack/ai-client@0.8.0
+
 ## 0.6.19
 
 ### Patch Changes
diff --git a/packages/typescript/ai-preact/package.json b/packages/typescript/ai-preact/package.json
index e8da772f0..9b6daf475 100644
--- a/packages/typescript/ai-preact/package.json
+++ b/packages/typescript/ai-preact/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-preact",
-  "version": "0.6.19",
+  "version": "0.6.20",
   "description": "Preact hooks for TanStack AI",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-react-ui/CHANGELOG.md b/packages/typescript/ai-react-ui/CHANGELOG.md
index 6a46bffb6..87f268353 100644
--- a/packages/typescript/ai-react-ui/CHANGELOG.md
+++ b/packages/typescript/ai-react-ui/CHANGELOG.md
@@ -1,5 +1,13 @@
 # @tanstack/ai-react-ui
 
+## 0.6.2
+
+### Patch Changes
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`008f015`](https://github.com/TanStack/ai/commit/008f0154f852e7e6734d3e3d35cad47780b52b7a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1)]:
+  - @tanstack/ai-client@0.8.0
+  - @tanstack/ai-react@0.8.0
+
 ## 0.6.1
 
 ### Patch Changes
diff --git a/packages/typescript/ai-react-ui/package.json b/packages/typescript/ai-react-ui/package.json
index 5aaf20755..200f9f3d1 100644
--- a/packages/typescript/ai-react-ui/package.json
+++ b/packages/typescript/ai-react-ui/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-react-ui",
-  "version": "0.6.1",
+  "version": "0.6.2",
   "description": "Headless React components for building AI chat interfaces",
   "module": "./dist/esm/index.js",
   "types": "./dist/esm/index.d.ts",
diff --git a/packages/typescript/ai-react/CHANGELOG.md b/packages/typescript/ai-react/CHANGELOG.md
index 3dbf0e2f4..3d49f6b22 100644
--- a/packages/typescript/ai-react/CHANGELOG.md
+++ b/packages/typescript/ai-react/CHANGELOG.md
@@ -1,5 +1,34 @@
 # @tanstack/ai-react
 
+## 0.8.0
+
+### Minor Changes
+
+- feat: add `useGenerateAudio` hook and streaming support for `generateAudio()` ([#463](https://github.com/TanStack/ai/pull/463))
+
+  Closes the parity gap between audio generation and the other media
+  activities (image, speech, video, transcription, summarize):
+  - `generateAudio()` now accepts `stream: true`, returning an
+    `AsyncIterable<StreamChunk>` that can be piped through
+    `toServerSentEventsResponse()`.
+  - `AudioGenerateInput` type added to `@tanstack/ai-client`.
+  - `useGenerateAudio` hook added to `@tanstack/ai-react`,
+    `@tanstack/ai-solid`, and `@tanstack/ai-vue`; matching
+    `createGenerateAudio` added to `@tanstack/ai-svelte`. All follow the same
+    `{ generate, result, isLoading, error, status, stop, reset }` shape as
+    the existing media hooks and support both `connection` (SSE) and
+    `fetcher` transports.
+
+### Patch Changes
+
+- fix(ai-react, ai-preact, ai-vue, ai-solid): propagate `useChat` callback changes ([#465](https://github.com/TanStack/ai/pull/465))
+
+  `onResponse`, `onChunk`, and `onCustomEvent` were captured by reference at client creation time. When a parent component re-rendered with fresh closures, the `ChatClient` kept calling the originals. Every framework now wraps these callbacks so the latest `options.xxx` is read at call time (via `optionsRef.current` in React/Preact, and direct option access in Vue/Solid, matching the pattern already used for `onFinish` / `onError`). Clearing a callback (setting it to `undefined`) now correctly no-ops instead of continuing to invoke the stale handler.
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`008f015`](https://github.com/TanStack/ai/commit/008f0154f852e7e6734d3e3d35cad47780b52b7a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+  - @tanstack/ai-client@0.8.0
+
 ## 0.7.15
 
 ### Patch Changes
diff --git a/packages/typescript/ai-react/package.json b/packages/typescript/ai-react/package.json
index 39e7898ee..5949687f6 100644
--- a/packages/typescript/ai-react/package.json
+++ b/packages/typescript/ai-react/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-react",
-  "version": "0.7.15",
+  "version": "0.8.0",
   "description": "React hooks for TanStack AI",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-solid-ui/CHANGELOG.md b/packages/typescript/ai-solid-ui/CHANGELOG.md
index 7bc41b6f8..6cb01ab6f 100644
--- a/packages/typescript/ai-solid-ui/CHANGELOG.md
+++ b/packages/typescript/ai-solid-ui/CHANGELOG.md
@@ -1,5 +1,13 @@
 # @tanstack/ai-solid-ui
 
+## 0.6.2
+
+### Patch Changes
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`008f015`](https://github.com/TanStack/ai/commit/008f0154f852e7e6734d3e3d35cad47780b52b7a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1)]:
+  - @tanstack/ai-client@0.8.0
+  - @tanstack/ai-solid@0.7.0
+
 ## 0.6.1
 
 ### Patch Changes
diff --git a/packages/typescript/ai-solid-ui/package.json b/packages/typescript/ai-solid-ui/package.json
index c1317fb3d..315576c94 100644
--- a/packages/typescript/ai-solid-ui/package.json
+++ b/packages/typescript/ai-solid-ui/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-solid-ui",
-  "version": "0.6.1",
+  "version": "0.6.2",
   "description": "Headless Solid components for building AI chat interfaces",
   "module": "./src/index.ts",
   "types": "./src/index.ts",
diff --git a/packages/typescript/ai-solid/CHANGELOG.md b/packages/typescript/ai-solid/CHANGELOG.md
index 0970a5a3b..de6fa8556 100644
--- a/packages/typescript/ai-solid/CHANGELOG.md
+++ b/packages/typescript/ai-solid/CHANGELOG.md
@@ -1,5 +1,34 @@
 # @tanstack/ai-solid
 
+## 0.7.0
+
+### Minor Changes
+
+- feat: add `useGenerateAudio` hook and streaming support for `generateAudio()` ([#463](https://github.com/TanStack/ai/pull/463))
+
+  Closes the parity gap between audio generation and the other media
+  activities (image, speech, video, transcription, summarize):
+  - `generateAudio()` now accepts `stream: true`, returning an
+    `AsyncIterable<StreamChunk>` that can be piped through
+    `toServerSentEventsResponse()`.
+  - `AudioGenerateInput` type added to `@tanstack/ai-client`.
+  - `useGenerateAudio` hook added to `@tanstack/ai-react`,
+    `@tanstack/ai-solid`, and `@tanstack/ai-vue`; matching
+    `createGenerateAudio` added to `@tanstack/ai-svelte`. All follow the same
+    `{ generate, result, isLoading, error, status, stop, reset }` shape as
+    the existing media hooks and support both `connection` (SSE) and
+    `fetcher` transports.
+
+### Patch Changes
+
+- fix(ai-react, ai-preact, ai-vue, ai-solid): propagate `useChat` callback changes ([#465](https://github.com/TanStack/ai/pull/465))
+
+  `onResponse`, `onChunk`, and `onCustomEvent` were captured by reference at client creation time. When a parent component re-rendered with fresh closures, the `ChatClient` kept calling the originals. Every framework now wraps these callbacks so the latest `options.xxx` is read at call time (via `optionsRef.current` in React/Preact, and direct option access in Vue/Solid, matching the pattern already used for `onFinish` / `onError`). Clearing a callback (setting it to `undefined`) now correctly no-ops instead of continuing to invoke the stale handler.
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`008f015`](https://github.com/TanStack/ai/commit/008f0154f852e7e6734d3e3d35cad47780b52b7a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+  - @tanstack/ai-client@0.8.0
+
 ## 0.6.19
 
 ### Patch Changes
diff --git a/packages/typescript/ai-solid/package.json b/packages/typescript/ai-solid/package.json
index bd7ad783b..c8acc4f74 100644
--- a/packages/typescript/ai-solid/package.json
+++ b/packages/typescript/ai-solid/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-solid",
-  "version": "0.6.19",
+  "version": "0.7.0",
   "description": "Solid hooks for TanStack AI",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-svelte/CHANGELOG.md b/packages/typescript/ai-svelte/CHANGELOG.md
index 254bfde73..1f43dfad8 100644
--- a/packages/typescript/ai-svelte/CHANGELOG.md
+++ b/packages/typescript/ai-svelte/CHANGELOG.md
@@ -1,5 +1,30 @@
 # @tanstack/ai-svelte
 
+## 0.7.0
+
+### Minor Changes
+
+- feat: add `useGenerateAudio` hook and streaming support for `generateAudio()` ([#463](https://github.com/TanStack/ai/pull/463))
+
+  Closes the parity gap between audio generation and the other media
+  activities (image, speech, video, transcription, summarize):
+  - `generateAudio()` now accepts `stream: true`, returning an
+    `AsyncIterable<StreamChunk>` that can be piped through
+    `toServerSentEventsResponse()`.
+  - `AudioGenerateInput` type added to `@tanstack/ai-client`.
+  - `useGenerateAudio` hook added to `@tanstack/ai-react`,
+    `@tanstack/ai-solid`, and `@tanstack/ai-vue`; matching
+    `createGenerateAudio` added to `@tanstack/ai-svelte`. All follow the same
+    `{ generate, result, isLoading, error, status, stop, reset }` shape as
+    the existing media hooks and support both `connection` (SSE) and
+    `fetcher` transports.
+
+### Patch Changes
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`008f015`](https://github.com/TanStack/ai/commit/008f0154f852e7e6734d3e3d35cad47780b52b7a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+  - @tanstack/ai-client@0.8.0
+
 ## 0.6.19
 
 ### Patch Changes
diff --git a/packages/typescript/ai-svelte/package.json b/packages/typescript/ai-svelte/package.json
index e62126fc0..78cf1ce34 100644
--- a/packages/typescript/ai-svelte/package.json
+++ b/packages/typescript/ai-svelte/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-svelte",
-  "version": "0.6.19",
+  "version": "0.7.0",
   "description": "Svelte bindings for TanStack AI",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai-vue-ui/CHANGELOG.md b/packages/typescript/ai-vue-ui/CHANGELOG.md
index ec116878b..89b921c4b 100644
--- a/packages/typescript/ai-vue-ui/CHANGELOG.md
+++ b/packages/typescript/ai-vue-ui/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @tanstack/ai-vue-ui
 
+## 0.1.31
+
+### Patch Changes
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1)]:
+  - @tanstack/ai-vue@0.7.0
+
 ## 0.1.30
 
 ### Patch Changes
diff --git a/packages/typescript/ai-vue-ui/package.json b/packages/typescript/ai-vue-ui/package.json
index 0449f3eab..4496d4582 100644
--- a/packages/typescript/ai-vue-ui/package.json
+++ b/packages/typescript/ai-vue-ui/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-vue-ui",
-  "version": "0.1.30",
+  "version": "0.1.31",
   "description": "Headless Vue components for building AI chat interfaces",
   "module": "./src/index.ts",
   "types": "./src/index.ts",
diff --git a/packages/typescript/ai-vue/CHANGELOG.md b/packages/typescript/ai-vue/CHANGELOG.md
index a9e6cadfd..7b9091959 100644
--- a/packages/typescript/ai-vue/CHANGELOG.md
+++ b/packages/typescript/ai-vue/CHANGELOG.md
@@ -1,5 +1,34 @@
 # @tanstack/ai-vue
 
+## 0.7.0
+
+### Minor Changes
+
+- feat: add `useGenerateAudio` hook and streaming support for `generateAudio()` ([#463](https://github.com/TanStack/ai/pull/463))
+
+  Closes the parity gap between audio generation and the other media
+  activities (image, speech, video, transcription, summarize):
+  - `generateAudio()` now accepts `stream: true`, returning an
+    `AsyncIterable<StreamChunk>` that can be piped through
+    `toServerSentEventsResponse()`.
+  - `AudioGenerateInput` type added to `@tanstack/ai-client`.
+  - `useGenerateAudio` hook added to `@tanstack/ai-react`,
+    `@tanstack/ai-solid`, and `@tanstack/ai-vue`; matching
+    `createGenerateAudio` added to `@tanstack/ai-svelte`. All follow the same
+    `{ generate, result, isLoading, error, status, stop, reset }` shape as
+    the existing media hooks and support both `connection` (SSE) and
+    `fetcher` transports.
+
+### Patch Changes
+
+- fix(ai-react, ai-preact, ai-vue, ai-solid): propagate `useChat` callback changes ([#465](https://github.com/TanStack/ai/pull/465))
+
+  `onResponse`, `onChunk`, and `onCustomEvent` were captured by reference at client creation time. When a parent component re-rendered with fresh closures, the `ChatClient` kept calling the originals. Every framework now wraps these callbacks so the latest `options.xxx` is read at call time (via `optionsRef.current` in React/Preact, and direct option access in Vue/Solid, matching the pattern already used for `onFinish` / `onError`). Clearing a callback (setting it to `undefined`) now correctly no-ops instead of continuing to invoke the stale handler.
+
+- Updated dependencies [[`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a), [`af9eb7b`](https://github.com/TanStack/ai/commit/af9eb7bbb875b23b7e99b2e6b743636daad402d1), [`008f015`](https://github.com/TanStack/ai/commit/008f0154f852e7e6734d3e3d35cad47780b52b7a), [`54523f5`](https://github.com/TanStack/ai/commit/54523f5e9a9b4d4ea6c49e4551936bc2cc25593a)]:
+  - @tanstack/ai@0.14.0
+  - @tanstack/ai-client@0.8.0
+
 ## 0.6.19
 
 ### Patch Changes
diff --git a/packages/typescript/ai-vue/package.json b/packages/typescript/ai-vue/package.json
index 6823d9a34..48ed4b484 100644
--- a/packages/typescript/ai-vue/package.json
+++ b/packages/typescript/ai-vue/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai-vue",
-  "version": "0.6.19",
+  "version": "0.7.0",
   "description": "Vue hooks for TanStack AI",
   "author": "",
   "license": "MIT",
diff --git a/packages/typescript/ai/CHANGELOG.md b/packages/typescript/ai/CHANGELOG.md
index cb1dd1a11..ec17609fa 100644
--- a/packages/typescript/ai/CHANGELOG.md
+++ b/packages/typescript/ai/CHANGELOG.md
@@ -1,5 +1,55 @@
 # @tanstack/ai
 
+## 0.14.0
+
+### Minor Changes
+
+- feat: add generateAudio activity for music and sound-effect generation ([#463](https://github.com/TanStack/ai/pull/463))
+
+  Adds a new `audio` activity kind alongside the existing `tts` and `transcription` activities:
+  - `generateAudio()` / `createAudioOptions()` functions
+  - `AudioAdapter` interface and `BaseAudioAdapter` base class
+  - `AudioGenerationOptions` / `AudioGenerationResult` / `GeneratedAudio` types
+  - `audio:request:started`, `audio:request:completed`, and `audio:usage` devtools events
+
+- feat: add `useGenerateAudio` hook and streaming support for `generateAudio()` ([#463](https://github.com/TanStack/ai/pull/463))
+
+  Closes the parity gap between audio generation and the other media
+  activities (image, speech, video, transcription, summarize):
+  - `generateAudio()` now accepts `stream: true`, returning an
+    `AsyncIterable<StreamChunk>` that can be piped through
+    `toServerSentEventsResponse()`.
+  - `AudioGenerateInput` type added to `@tanstack/ai-client`.
+  - `useGenerateAudio` hook added to `@tanstack/ai-react`,
+    `@tanstack/ai-solid`, and `@tanstack/ai-vue`; matching
+    `createGenerateAudio` added to `@tanstack/ai-svelte`. All follow the same
+    `{ generate, result, isLoading, error, status, stop, reset }` shape as
+    the existing media hooks and support both `connection` (SSE) and
+    `fetcher` transports.
+
+- Tighten `GeneratedImage` and `GeneratedAudio` to enforce exactly one of `url` or `b64Json` via a mutually-exclusive `GeneratedMediaSource` union. ([#463](https://github.com/TanStack/ai/pull/463))
+
+  Both types previously declared `url?` and `b64Json?` as independently optional, which allowed meaningless `{}` values and objects that set both fields. They now require exactly one:
+
+  ```ts
+  type GeneratedMediaSource =
+    | { url: string; b64Json?: never }
+    | { b64Json: string; url?: never }
+  ```
+
+  Existing read patterns like `img.url || \`data:image/png;base64,${img.b64Json}\``continue to work unchanged. The only runtime-visible change is that the`@tanstack/ai-openrouter`and`@tanstack/ai-fal`image adapters no longer populate`url`with a synthesized`data:image/png;base64,...`URI when the provider returns base64 — they return`{ b64Json }`only. Consumers that want a data URI should build it from`b64Json` at render time.
+
+### Patch Changes
+
+- refactor(ai, ai-openai): narrow error handling before logging ([#465](https://github.com/TanStack/ai/pull/465))
+
+  `catch (error: any)` sites in `stream-to-response.ts`, `activities/stream-generation-result.ts`, and `activities/generateVideo/index.ts` are now narrowed to `unknown` and funnel through a shared `toRunErrorPayload(error, fallback)` helper that extracts `message` / `code` without leaking the original error object (which can carry request state from an SDK).
+
+  Replaced four `console.error` calls in the OpenAI text adapter's `chatStream` catch block that dumped the full error object to stdout. SDK errors can carry the original request including auth headers, so the library now logs only the narrowed `{ message, code }` payload via the internal logger — any user-supplied logger receives the sanitized shape, not the raw SDK error.
+
+- Updated dependencies []:
+  - @tanstack/ai-event-client@0.2.8
+
 ## 0.13.0
 
 ### Minor Changes
diff --git a/packages/typescript/ai/package.json b/packages/typescript/ai/package.json
index 68b209cf8..2ad62f817 100644
--- a/packages/typescript/ai/package.json
+++ b/packages/typescript/ai/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/ai",
-  "version": "0.13.0",
+  "version": "0.14.0",
   "description": "Core TanStack AI library - Open source AI SDK",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/typescript/preact-ai-devtools/CHANGELOG.md b/packages/typescript/preact-ai-devtools/CHANGELOG.md
index 0118f67dc..921189d1c 100644
--- a/packages/typescript/preact-ai-devtools/CHANGELOG.md
+++ b/packages/typescript/preact-ai-devtools/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @tanstack/preact-ai-devtools
 
+## 0.1.29
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @tanstack/ai-devtools-core@0.3.25
+
 ## 0.1.28
 
 ### Patch Changes
diff --git a/packages/typescript/preact-ai-devtools/package.json b/packages/typescript/preact-ai-devtools/package.json
index 492c8b5da..71899ff70 100644
--- a/packages/typescript/preact-ai-devtools/package.json
+++ b/packages/typescript/preact-ai-devtools/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/preact-ai-devtools",
-  "version": "0.1.28",
+  "version": "0.1.29",
   "description": "Preact Devtools for TanStack AI.",
   "author": "tannerlinsley",
   "license": "MIT",
diff --git a/packages/typescript/react-ai-devtools/CHANGELOG.md b/packages/typescript/react-ai-devtools/CHANGELOG.md
index 6a3120a1d..c8d35de5a 100644
--- a/packages/typescript/react-ai-devtools/CHANGELOG.md
+++ b/packages/typescript/react-ai-devtools/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @tanstack/react-ai-devtools
 
+## 0.2.29
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @tanstack/ai-devtools-core@0.3.25
+
 ## 0.2.28
 
 ### Patch Changes
diff --git a/packages/typescript/react-ai-devtools/package.json b/packages/typescript/react-ai-devtools/package.json
index 80fa3f19e..10216b77d 100644
--- a/packages/typescript/react-ai-devtools/package.json
+++ b/packages/typescript/react-ai-devtools/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/react-ai-devtools",
-  "version": "0.2.28",
+  "version": "0.2.29",
   "description": "React Devtools for TanStack AI.",
   "author": "tannerlinsley",
   "license": "MIT",
diff --git a/packages/typescript/solid-ai-devtools/CHANGELOG.md b/packages/typescript/solid-ai-devtools/CHANGELOG.md
index a2acce9ba..587838b02 100644
--- a/packages/typescript/solid-ai-devtools/CHANGELOG.md
+++ b/packages/typescript/solid-ai-devtools/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @tanstack/solid-ai-devtools
 
+## 0.2.29
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @tanstack/ai-devtools-core@0.3.25
+
 ## 0.2.28
 
 ### Patch Changes
diff --git a/packages/typescript/solid-ai-devtools/package.json b/packages/typescript/solid-ai-devtools/package.json
index 0899860a4..cb980895b 100644
--- a/packages/typescript/solid-ai-devtools/package.json
+++ b/packages/typescript/solid-ai-devtools/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/solid-ai-devtools",
-  "version": "0.2.28",
+  "version": "0.2.29",
   "description": "Solid TanStack AI Devtools",
   "author": "",
   "license": "MIT",
