From 043cde6abb3ac299c73e6d38fac60547612bed5b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 21 Jul 2026 13:05:23 +0000 Subject: [PATCH] ci: Version Packages --- .changeset/resumable-streams.md | 53 ------------------- examples/ag-ui/CHANGELOG.md | 9 ++++ examples/ag-ui/package.json | 2 +- packages/ai-acp/CHANGELOG.md | 8 +++ packages/ai-acp/package.json | 2 +- packages/ai-angular/CHANGELOG.md | 8 +++ packages/ai-angular/package.json | 2 +- packages/ai-anthropic/CHANGELOG.md | 7 +++ packages/ai-anthropic/package.json | 2 +- packages/ai-bedrock/CHANGELOG.md | 8 +++ packages/ai-bedrock/package.json | 2 +- packages/ai-claude-code/CHANGELOG.md | 8 +++ packages/ai-claude-code/package.json | 2 +- packages/ai-client/CHANGELOG.md | 55 ++++++++++++++++++++ packages/ai-client/package.json | 2 +- packages/ai-code-mode-skills/CHANGELOG.md | 8 +++ packages/ai-code-mode-skills/package.json | 2 +- packages/ai-code-mode/CHANGELOG.md | 7 +++ packages/ai-code-mode/package.json | 2 +- packages/ai-codex/CHANGELOG.md | 8 +++ packages/ai-codex/package.json | 2 +- packages/ai-devtools/CHANGELOG.md | 7 +++ packages/ai-devtools/package.json | 2 +- packages/ai-durable-stream/CHANGELOG.md | 56 +++++++++++++++++++++ packages/ai-durable-stream/package.json | 2 +- packages/ai-elevenlabs/CHANGELOG.md | 7 +++ packages/ai-elevenlabs/package.json | 2 +- packages/ai-fal/CHANGELOG.md | 7 +++ packages/ai-fal/package.json | 2 +- packages/ai-gemini/CHANGELOG.md | 11 +++- packages/ai-gemini/package.json | 2 +- packages/ai-grok-build/CHANGELOG.md | 9 ++++ packages/ai-grok-build/package.json | 2 +- packages/ai-grok/CHANGELOG.md | 8 +++ packages/ai-grok/package.json | 2 +- packages/ai-groq/CHANGELOG.md | 8 +++ packages/ai-groq/package.json | 2 +- packages/ai-isolate-cloudflare/CHANGELOG.md | 7 +++ packages/ai-isolate-cloudflare/package.json | 2 +- packages/ai-isolate-node/CHANGELOG.md | 7 +++ packages/ai-isolate-node/package.json | 2 +- packages/ai-isolate-quickjs/CHANGELOG.md | 7 +++ packages/ai-isolate-quickjs/package.json | 2 +- packages/ai-mcp/CHANGELOG.md | 7 +++ packages/ai-mcp/package.json | 2 +- packages/ai-mistral/CHANGELOG.md | 7 +++ packages/ai-mistral/package.json | 2 +- packages/ai-ollama/CHANGELOG.md | 7 +++ packages/ai-ollama/package.json | 2 +- packages/ai-openai/CHANGELOG.md | 12 ++++- packages/ai-openai/package.json | 2 +- packages/ai-opencode/CHANGELOG.md | 8 +++ packages/ai-opencode/package.json | 2 +- packages/ai-openrouter/CHANGELOG.md | 7 +++ packages/ai-openrouter/package.json | 2 +- packages/ai-preact/CHANGELOG.md | 8 +++ packages/ai-preact/package.json | 2 +- packages/ai-react-ui/CHANGELOG.md | 8 +++ packages/ai-react-ui/package.json | 2 +- packages/ai-react/CHANGELOG.md | 8 +++ packages/ai-react/package.json | 2 +- packages/ai-sandbox-cloudflare/CHANGELOG.md | 9 ++++ packages/ai-sandbox-cloudflare/package.json | 2 +- packages/ai-sandbox/CHANGELOG.md | 7 +++ packages/ai-sandbox/package.json | 2 +- packages/ai-solid-ui/CHANGELOG.md | 8 +++ packages/ai-solid-ui/package.json | 2 +- packages/ai-solid/CHANGELOG.md | 8 +++ packages/ai-solid/package.json | 2 +- packages/ai-svelte/CHANGELOG.md | 8 +++ packages/ai-svelte/package.json | 2 +- packages/ai-vue-ui/CHANGELOG.md | 7 +++ packages/ai-vue-ui/package.json | 2 +- packages/ai-vue/CHANGELOG.md | 8 +++ packages/ai-vue/package.json | 2 +- packages/ai/CHANGELOG.md | 50 ++++++++++++++++++ packages/ai/package.json | 2 +- packages/openai-base/CHANGELOG.md | 7 +++ packages/openai-base/package.json | 2 +- packages/preact-ai-devtools/CHANGELOG.md | 7 +++ packages/preact-ai-devtools/package.json | 2 +- packages/react-ai-devtools/CHANGELOG.md | 7 +++ packages/react-ai-devtools/package.json | 2 +- packages/solid-ai-devtools/CHANGELOG.md | 7 +++ packages/solid-ai-devtools/package.json | 2 +- 85 files changed, 505 insertions(+), 97 deletions(-) delete mode 100644 .changeset/resumable-streams.md create mode 100644 packages/ai-durable-stream/CHANGELOG.md diff --git a/.changeset/resumable-streams.md b/.changeset/resumable-streams.md deleted file mode 100644 index 35b6ebfd7..000000000 --- a/.changeset/resumable-streams.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -'@tanstack/ai': minor -'@tanstack/ai-client': minor -'@tanstack/ai-durable-stream': minor ---- - -Resumable streams: reconnect to an in-flight SSE **or NDJSON** response without -re-running the provider. - -`toServerSentEventsResponse` and `toHttpResponse` both accept a -`durability: { adapter, batch }` option. The adapter (`StreamDurability`) -records every chunk to an ordered log before delivery and tags each event with -an opaque, adapter-owned offset — an SSE `id:` line, or the `id` of an NDJSON -`{ id, chunk }` envelope (NDJSON has no native event-id). A reconnect -(`Last-Event-ID`) or an explicit `?offset` read replays strictly after that -offset from the log — the lazy provider stream is never iterated on resume. -Producers terminalize the log on cancellation and failure (`RUN_ERROR` append - -- `close()`) and on completion when the source stream emits its own terminal - event (`chat()` always does), so readers are never parked on a dead run. - -Two adapters ship: `memoryStream(request)` in `@tanstack/ai` (process-local, -for development and tests) and the new `@tanstack/ai-durable-stream` package, -a Durable Streams protocol adapter for production backends. - -For the `GET` handler that a reload or a second tab reconnects to, -`resumeServerSentEventsResponse({ adapter })` and `resumeHttpResponse({ adapter })` -replay a run straight from the durability log. They need no producer stream and -return a 400 when the request carries no resume offset. - -On the client, all four HTTP adapters are now resumable — `fetchServerSentEvents`, -`fetchHttpStream`, `xhrServerSentEvents`, and `xhrHttpStream`. Each tracks the -per-event offset, auto-reconnects with `Last-Event-ID`, de-duplicates the -replayed prefix, and exposes `joinRun(runId)` to attach to an in-flight or -finished run from the start (read-only GET with `offset=-1`). Untagged streams -behave exactly as before. A durable run that ends with no terminal event and no -forward progress now throws `DurableStreamIncompleteError` instead of hanging. - -Reconnection and durability are bounded so failures surface rather than hang or -loop: - -- `memoryStream` evicts completed logs after a grace window (unbounded growth - is gone); resuming an expired/unknown run throws, and a from-start join to a - run that never produces fails after `MemoryStreamOptions.firstChunkDeadlineMs`. -- all four HTTP adapters accept `reconnect: { maxAttempts, delayMs }` — a - throttle plus a ceiling on CONSECUTIVE no-progress reconnects (default 5; - forward progress resets it) that fails with the new `StreamReconnectLimitError` - instead of reconnecting endlessly, without penalizing a healthy long-lived run. -- `durableStream` accepts `reconnect: { maxReadFailures, delayMs }` to bound its - read-retry loop, and `server` is now optional when `fetch` is provided (e.g. a - Cloudflare service binding). -- `toServerSentEventsResponse` accepts `debug` to record durability terminal / - close failures server-side, where a replaying joiner cannot observe them. diff --git a/examples/ag-ui/CHANGELOG.md b/examples/ag-ui/CHANGELOG.md index 41d1e2e02..f946dc7e4 100644 --- a/examples/ag-ui/CHANGELOG.md +++ b/examples/ag-ui/CHANGELOG.md @@ -1,5 +1,14 @@ # ag-ui +## 0.0.3 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai-client@0.23.0 + - @tanstack/ai-react@0.18.2 + - @tanstack/ai-react-ui@0.8.16 + ## 0.0.2 ### Patch Changes diff --git a/examples/ag-ui/package.json b/examples/ag-ui/package.json index 3475ab6f6..2eb3f2b18 100644 --- a/examples/ag-ui/package.json +++ b/examples/ag-ui/package.json @@ -2,7 +2,7 @@ "name": "ag-ui", "private": true, "type": "module", - "version": "0.0.2", + "version": "0.0.3", "scripts": { "detect-servers": "node scripts/detect-servers.mjs", "predev": "node scripts/detect-servers.mjs", diff --git a/packages/ai-acp/CHANGELOG.md b/packages/ai-acp/CHANGELOG.md index 663b6797f..32a60a549 100644 --- a/packages/ai-acp/CHANGELOG.md +++ b/packages/ai-acp/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/ai-acp +## 0.2.4 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + - @tanstack/ai-sandbox@0.2.5 + ## 0.2.3 ### Patch Changes diff --git a/packages/ai-acp/package.json b/packages/ai-acp/package.json index 7f766d480..dcb042296 100644 --- a/packages/ai-acp/package.json +++ b/packages/ai-acp/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-acp", - "version": "0.2.3", + "version": "0.2.4", "description": "Shared Agent Client Protocol (ACP) transport, session, and AG-UI translation for TanStack AI harness adapters.", "author": "", "license": "MIT", diff --git a/packages/ai-angular/CHANGELOG.md b/packages/ai-angular/CHANGELOG.md index 32645461d..0fbb54f46 100644 --- a/packages/ai-angular/CHANGELOG.md +++ b/packages/ai-angular/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/ai-angular +## 0.3.2 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + - @tanstack/ai-client@0.23.0 + ## 0.3.1 ### Patch Changes diff --git a/packages/ai-angular/package.json b/packages/ai-angular/package.json index 7b87c189d..72392a05e 100644 --- a/packages/ai-angular/package.json +++ b/packages/ai-angular/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-angular", - "version": "0.3.1", + "version": "0.3.2", "description": "Angular signals integration for TanStack AI streaming chat, structured outputs, and media generation.", "author": "", "license": "MIT", diff --git a/packages/ai-anthropic/CHANGELOG.md b/packages/ai-anthropic/CHANGELOG.md index f9f654410..4294b4c54 100644 --- a/packages/ai-anthropic/CHANGELOG.md +++ b/packages/ai-anthropic/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/ai-anthropic +## 0.16.4 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + ## 0.16.3 ### Patch Changes diff --git a/packages/ai-anthropic/package.json b/packages/ai-anthropic/package.json index 4f6702cbb..ba67655c8 100644 --- a/packages/ai-anthropic/package.json +++ b/packages/ai-anthropic/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-anthropic", - "version": "0.16.3", + "version": "0.16.4", "description": "Anthropic Claude adapter for TanStack AI chat, tool calling, thinking, and structured outputs.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-bedrock/CHANGELOG.md b/packages/ai-bedrock/CHANGELOG.md index d737219ad..28aba1efe 100644 --- a/packages/ai-bedrock/CHANGELOG.md +++ b/packages/ai-bedrock/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/ai-bedrock +## 0.1.5 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + - @tanstack/openai-base@0.9.10 + ## 0.1.4 ### Patch Changes diff --git a/packages/ai-bedrock/package.json b/packages/ai-bedrock/package.json index 1981b2b4c..5ac0ae8fa 100644 --- a/packages/ai-bedrock/package.json +++ b/packages/ai-bedrock/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-bedrock", - "version": "0.1.4", + "version": "0.1.5", "type": "module", "description": "Amazon Bedrock adapter for TanStack AI — OpenAI-compatible chat, responses, tools, and reasoning.", "author": "", diff --git a/packages/ai-claude-code/CHANGELOG.md b/packages/ai-claude-code/CHANGELOG.md index 048c0b7d7..fbb355295 100644 --- a/packages/ai-claude-code/CHANGELOG.md +++ b/packages/ai-claude-code/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/ai-claude-code +## 0.2.4 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + - @tanstack/ai-sandbox@0.2.5 + ## 0.2.3 ### Patch Changes diff --git a/packages/ai-claude-code/package.json b/packages/ai-claude-code/package.json index 9d960189c..fa976a33f 100644 --- a/packages/ai-claude-code/package.json +++ b/packages/ai-claude-code/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-claude-code", - "version": "0.2.3", + "version": "0.2.4", "description": "Claude Code harness adapter for TanStack AI — run Claude Code as a chat backend with local tool execution and stateful sessions.", "author": "", "license": "MIT", diff --git a/packages/ai-client/CHANGELOG.md b/packages/ai-client/CHANGELOG.md index e0b56d32f..6eb425bf9 100644 --- a/packages/ai-client/CHANGELOG.md +++ b/packages/ai-client/CHANGELOG.md @@ -1,5 +1,60 @@ # @tanstack/ai-client +## 0.23.0 + +### Minor Changes + +- [#955](https://github.com/TanStack/ai/pull/955) [`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288) - Resumable streams: reconnect to an in-flight SSE **or NDJSON** response without + re-running the provider. + + `toServerSentEventsResponse` and `toHttpResponse` both accept a + `durability: { adapter, batch }` option. The adapter (`StreamDurability`) + records every chunk to an ordered log before delivery and tags each event with + an opaque, adapter-owned offset — an SSE `id:` line, or the `id` of an NDJSON + `{ id, chunk }` envelope (NDJSON has no native event-id). A reconnect + (`Last-Event-ID`) or an explicit `?offset` read replays strictly after that + offset from the log — the lazy provider stream is never iterated on resume. + Producers terminalize the log on cancellation and failure (`RUN_ERROR` append + - `close()`) and on completion when the source stream emits its own terminal + event (`chat()` always does), so readers are never parked on a dead run. + + Two adapters ship: `memoryStream(request)` in `@tanstack/ai` (process-local, + for development and tests) and the new `@tanstack/ai-durable-stream` package, + a Durable Streams protocol adapter for production backends. + + For the `GET` handler that a reload or a second tab reconnects to, + `resumeServerSentEventsResponse({ adapter })` and `resumeHttpResponse({ adapter })` + replay a run straight from the durability log. They need no producer stream and + return a 400 when the request carries no resume offset. + + On the client, all four HTTP adapters are now resumable — `fetchServerSentEvents`, + `fetchHttpStream`, `xhrServerSentEvents`, and `xhrHttpStream`. Each tracks the + per-event offset, auto-reconnects with `Last-Event-ID`, de-duplicates the + replayed prefix, and exposes `joinRun(runId)` to attach to an in-flight or + finished run from the start (read-only GET with `offset=-1`). Untagged streams + behave exactly as before. A durable run that ends with no terminal event and no + forward progress now throws `DurableStreamIncompleteError` instead of hanging. + + Reconnection and durability are bounded so failures surface rather than hang or + loop: + - `memoryStream` evicts completed logs after a grace window (unbounded growth + is gone); resuming an expired/unknown run throws, and a from-start join to a + run that never produces fails after `MemoryStreamOptions.firstChunkDeadlineMs`. + - all four HTTP adapters accept `reconnect: { maxAttempts, delayMs }` — a + throttle plus a ceiling on CONSECUTIVE no-progress reconnects (default 5; + forward progress resets it) that fails with the new `StreamReconnectLimitError` + instead of reconnecting endlessly, without penalizing a healthy long-lived run. + - `durableStream` accepts `reconnect: { maxReadFailures, delayMs }` to bound its + read-retry loop, and `server` is now optional when `fetch` is provided (e.g. a + Cloudflare service binding). + - `toServerSentEventsResponse` accepts `debug` to record durability terminal / + close failures server-side, where a replaying joiner cannot observe them. + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + ## 0.22.1 ### Patch Changes diff --git a/packages/ai-client/package.json b/packages/ai-client/package.json index 2423f6948..1d11e6141 100644 --- a/packages/ai-client/package.json +++ b/packages/ai-client/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-client", - "version": "0.22.1", + "version": "0.23.0", "description": "Framework-agnostic headless client for TanStack AI chat, realtime sessions, streaming transports, and media generations.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-code-mode-skills/CHANGELOG.md b/packages/ai-code-mode-skills/CHANGELOG.md index 94c22b6a9..8074286c1 100644 --- a/packages/ai-code-mode-skills/CHANGELOG.md +++ b/packages/ai-code-mode-skills/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/ai-code-mode-skills +## 0.3.12 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + - @tanstack/ai-code-mode@0.3.9 + ## 0.3.11 ### Patch Changes diff --git a/packages/ai-code-mode-skills/package.json b/packages/ai-code-mode-skills/package.json index 48ffd8d90..64782b2f7 100644 --- a/packages/ai-code-mode-skills/package.json +++ b/packages/ai-code-mode-skills/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-code-mode-skills", - "version": "0.3.11", + "version": "0.3.12", "description": "Persistent runtime skill library for TanStack AI Code Mode agents and sandboxed tool orchestration.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-code-mode/CHANGELOG.md b/packages/ai-code-mode/CHANGELOG.md index 3ca87fd9d..4e370672c 100644 --- a/packages/ai-code-mode/CHANGELOG.md +++ b/packages/ai-code-mode/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/ai-code-mode +## 0.3.9 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + ## 0.3.8 ### Patch Changes diff --git a/packages/ai-code-mode/package.json b/packages/ai-code-mode/package.json index 85a837d0b..90fb51501 100644 --- a/packages/ai-code-mode/package.json +++ b/packages/ai-code-mode/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-code-mode", - "version": "0.3.8", + "version": "0.3.9", "description": "Secure TypeScript Code Mode for TanStack AI agents to execute sandboxed tool orchestration programs.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-codex/CHANGELOG.md b/packages/ai-codex/CHANGELOG.md index 6710f31d7..8e54f6da3 100644 --- a/packages/ai-codex/CHANGELOG.md +++ b/packages/ai-codex/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/ai-codex +## 0.2.4 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + - @tanstack/ai-sandbox@0.2.5 + ## 0.2.3 ### Patch Changes diff --git a/packages/ai-codex/package.json b/packages/ai-codex/package.json index 4bdfad50c..2ba51c787 100644 --- a/packages/ai-codex/package.json +++ b/packages/ai-codex/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-codex", - "version": "0.2.3", + "version": "0.2.4", "description": "Codex harness adapter for TanStack AI — run OpenAI Codex as a chat backend with local tool execution and stateful sessions.", "author": "", "license": "MIT", diff --git a/packages/ai-devtools/CHANGELOG.md b/packages/ai-devtools/CHANGELOG.md index 9a00d78c5..5d746e963 100644 --- a/packages/ai-devtools/CHANGELOG.md +++ b/packages/ai-devtools/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/ai-devtools-core +## 0.4.25 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + ## 0.4.24 ### Patch Changes diff --git a/packages/ai-devtools/package.json b/packages/ai-devtools/package.json index e0a766d97..edcdbeb71 100644 --- a/packages/ai-devtools/package.json +++ b/packages/ai-devtools/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-devtools-core", - "version": "0.4.24", + "version": "0.4.25", "description": "Core TanStack AI Devtools plugin for inspecting chat messages, tool calls, streams, and errors.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-durable-stream/CHANGELOG.md b/packages/ai-durable-stream/CHANGELOG.md new file mode 100644 index 000000000..ca3c68720 --- /dev/null +++ b/packages/ai-durable-stream/CHANGELOG.md @@ -0,0 +1,56 @@ +# @tanstack/ai-durable-stream + +## 0.1.0 + +### Minor Changes + +- [#955](https://github.com/TanStack/ai/pull/955) [`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288) - Resumable streams: reconnect to an in-flight SSE **or NDJSON** response without + re-running the provider. + + `toServerSentEventsResponse` and `toHttpResponse` both accept a + `durability: { adapter, batch }` option. The adapter (`StreamDurability`) + records every chunk to an ordered log before delivery and tags each event with + an opaque, adapter-owned offset — an SSE `id:` line, or the `id` of an NDJSON + `{ id, chunk }` envelope (NDJSON has no native event-id). A reconnect + (`Last-Event-ID`) or an explicit `?offset` read replays strictly after that + offset from the log — the lazy provider stream is never iterated on resume. + Producers terminalize the log on cancellation and failure (`RUN_ERROR` append + - `close()`) and on completion when the source stream emits its own terminal + event (`chat()` always does), so readers are never parked on a dead run. + + Two adapters ship: `memoryStream(request)` in `@tanstack/ai` (process-local, + for development and tests) and the new `@tanstack/ai-durable-stream` package, + a Durable Streams protocol adapter for production backends. + + For the `GET` handler that a reload or a second tab reconnects to, + `resumeServerSentEventsResponse({ adapter })` and `resumeHttpResponse({ adapter })` + replay a run straight from the durability log. They need no producer stream and + return a 400 when the request carries no resume offset. + + On the client, all four HTTP adapters are now resumable — `fetchServerSentEvents`, + `fetchHttpStream`, `xhrServerSentEvents`, and `xhrHttpStream`. Each tracks the + per-event offset, auto-reconnects with `Last-Event-ID`, de-duplicates the + replayed prefix, and exposes `joinRun(runId)` to attach to an in-flight or + finished run from the start (read-only GET with `offset=-1`). Untagged streams + behave exactly as before. A durable run that ends with no terminal event and no + forward progress now throws `DurableStreamIncompleteError` instead of hanging. + + Reconnection and durability are bounded so failures surface rather than hang or + loop: + - `memoryStream` evicts completed logs after a grace window (unbounded growth + is gone); resuming an expired/unknown run throws, and a from-start join to a + run that never produces fails after `MemoryStreamOptions.firstChunkDeadlineMs`. + - all four HTTP adapters accept `reconnect: { maxAttempts, delayMs }` — a + throttle plus a ceiling on CONSECUTIVE no-progress reconnects (default 5; + forward progress resets it) that fails with the new `StreamReconnectLimitError` + instead of reconnecting endlessly, without penalizing a healthy long-lived run. + - `durableStream` accepts `reconnect: { maxReadFailures, delayMs }` to bound its + read-retry loop, and `server` is now optional when `fetch` is provided (e.g. a + Cloudflare service binding). + - `toServerSentEventsResponse` accepts `debug` to record durability terminal / + close failures server-side, where a replaying joiner cannot observe them. + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 diff --git a/packages/ai-durable-stream/package.json b/packages/ai-durable-stream/package.json index 2ce39ffb8..dd3b365fb 100644 --- a/packages/ai-durable-stream/package.json +++ b/packages/ai-durable-stream/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-durable-stream", - "version": "0.0.0", + "version": "0.1.0", "description": "Delivery durability for TanStack AI over the durable-streams HTTP protocol — a resumable StreamDurability transport sink (append/read/resume) that stores zero delivery events itself.", "author": "", "license": "MIT", diff --git a/packages/ai-elevenlabs/CHANGELOG.md b/packages/ai-elevenlabs/CHANGELOG.md index e441d6d16..154fa6c64 100644 --- a/packages/ai-elevenlabs/CHANGELOG.md +++ b/packages/ai-elevenlabs/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/ai-elevenlabs +## 0.2.35 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + ## 0.2.34 ### Patch Changes diff --git a/packages/ai-elevenlabs/package.json b/packages/ai-elevenlabs/package.json index ee1c39d20..d4d7e6648 100644 --- a/packages/ai-elevenlabs/package.json +++ b/packages/ai-elevenlabs/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-elevenlabs", - "version": "0.2.34", + "version": "0.2.35", "description": "ElevenLabs adapter for TanStack AI realtime voice, text-to-speech, transcription, music, and sound effects.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-fal/CHANGELOG.md b/packages/ai-fal/CHANGELOG.md index e7239bcc4..d9a6e6189 100644 --- a/packages/ai-fal/CHANGELOG.md +++ b/packages/ai-fal/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/ai-fal +## 0.9.13 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + ## 0.9.12 ### Patch Changes diff --git a/packages/ai-fal/package.json b/packages/ai-fal/package.json index 8290805ba..bb7e6b134 100644 --- a/packages/ai-fal/package.json +++ b/packages/ai-fal/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-fal", - "version": "0.9.12", + "version": "0.9.13", "description": "fal.ai adapter for TanStack AI image, video, audio, speech, and transcription generation.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-gemini/CHANGELOG.md b/packages/ai-gemini/CHANGELOG.md index 7c2f00957..a886143da 100644 --- a/packages/ai-gemini/CHANGELOG.md +++ b/packages/ai-gemini/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/ai-gemini +## 0.20.2 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + ## 0.20.1 ### Patch Changes @@ -22,7 +29,9 @@ ```ts createOpenaiImage('gpt-image-1', apiKey, { allowUrlFetch: true }) createOpenaiVideo('sora-2', apiKey, { allowUrlFetch: true }) - createGeminiVideo('veo-3.1-generate-preview', apiKey, { allowUrlFetch: true }) + createGeminiVideo('veo-3.1-generate-preview', apiKey, { + allowUrlFetch: true, + }) ``` Migration: if you passed HTTP(S) URL image inputs to these adapters, either fetch the bytes yourself and pass a `data:` URI, pass a `gs://` reference (Veo), or set `allowUrlFetch: true`. diff --git a/packages/ai-gemini/package.json b/packages/ai-gemini/package.json index 412fa0a58..e7cb5e9a5 100644 --- a/packages/ai-gemini/package.json +++ b/packages/ai-gemini/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-gemini", - "version": "0.20.1", + "version": "0.20.2", "description": "Google Gemini adapter for TanStack AI chat, images, speech, audio generation, and structured outputs.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-grok-build/CHANGELOG.md b/packages/ai-grok-build/CHANGELOG.md index bb7a7132f..01ef5cbef 100644 --- a/packages/ai-grok-build/CHANGELOG.md +++ b/packages/ai-grok-build/CHANGELOG.md @@ -1,5 +1,14 @@ # @tanstack/ai-grok-build +## 0.2.4 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + - @tanstack/ai-acp@0.2.4 + - @tanstack/ai-sandbox@0.2.5 + ## 0.2.3 ### Patch Changes diff --git a/packages/ai-grok-build/package.json b/packages/ai-grok-build/package.json index 7aeb00977..274841c7c 100644 --- a/packages/ai-grok-build/package.json +++ b/packages/ai-grok-build/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-grok-build", - "version": "0.2.3", + "version": "0.2.4", "description": "Grok Build harness adapter for TanStack AI — run Grok Build as a chat backend with local tool execution and stateful sessions.", "author": "", "license": "MIT", diff --git a/packages/ai-grok/CHANGELOG.md b/packages/ai-grok/CHANGELOG.md index 80eb945ea..5060a64c4 100644 --- a/packages/ai-grok/CHANGELOG.md +++ b/packages/ai-grok/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/ai-grok +## 0.14.10 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + - @tanstack/openai-base@0.9.10 + ## 0.14.9 ### Patch Changes diff --git a/packages/ai-grok/package.json b/packages/ai-grok/package.json index caae1ee0c..3b32629da 100644 --- a/packages/ai-grok/package.json +++ b/packages/ai-grok/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-grok", - "version": "0.14.9", + "version": "0.14.10", "description": "xAI Grok adapter for TanStack AI chat, image generation, realtime, and structured outputs.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-groq/CHANGELOG.md b/packages/ai-groq/CHANGELOG.md index b3a32a8cc..b8a65e31d 100644 --- a/packages/ai-groq/CHANGELOG.md +++ b/packages/ai-groq/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/ai-groq +## 0.5.4 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + - @tanstack/openai-base@0.9.10 + ## 0.5.3 ### Patch Changes diff --git a/packages/ai-groq/package.json b/packages/ai-groq/package.json index 2f1aaef65..2bd567d15 100644 --- a/packages/ai-groq/package.json +++ b/packages/ai-groq/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-groq", - "version": "0.5.3", + "version": "0.5.4", "description": "Groq adapter for TanStack AI low-latency chat, tool calling, and structured outputs.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-isolate-cloudflare/CHANGELOG.md b/packages/ai-isolate-cloudflare/CHANGELOG.md index eacf35de7..f8ea64db3 100644 --- a/packages/ai-isolate-cloudflare/CHANGELOG.md +++ b/packages/ai-isolate-cloudflare/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/ai-isolate-cloudflare +## 0.2.39 + +### Patch Changes + +- Updated dependencies []: + - @tanstack/ai-code-mode@0.3.9 + ## 0.2.38 ### Patch Changes diff --git a/packages/ai-isolate-cloudflare/package.json b/packages/ai-isolate-cloudflare/package.json index 726e3b45c..5ee9a3fca 100644 --- a/packages/ai-isolate-cloudflare/package.json +++ b/packages/ai-isolate-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-isolate-cloudflare", - "version": "0.2.38", + "version": "0.2.39", "description": "Cloudflare Workers sandbox driver for TanStack AI Code Mode TypeScript execution at the edge.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-isolate-node/CHANGELOG.md b/packages/ai-isolate-node/CHANGELOG.md index 355dae5c8..97bdb1d36 100644 --- a/packages/ai-isolate-node/CHANGELOG.md +++ b/packages/ai-isolate-node/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/ai-isolate-node +## 0.1.48 + +### Patch Changes + +- Updated dependencies []: + - @tanstack/ai-code-mode@0.3.9 + ## 0.1.47 ### Patch Changes diff --git a/packages/ai-isolate-node/package.json b/packages/ai-isolate-node/package.json index 18b95cf4c..1c484f827 100644 --- a/packages/ai-isolate-node/package.json +++ b/packages/ai-isolate-node/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-isolate-node", - "version": "0.1.47", + "version": "0.1.48", "description": "Node.js isolated-vm sandbox driver for TanStack AI Code Mode TypeScript execution.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-isolate-quickjs/CHANGELOG.md b/packages/ai-isolate-quickjs/CHANGELOG.md index 21b609c72..77cf64afc 100644 --- a/packages/ai-isolate-quickjs/CHANGELOG.md +++ b/packages/ai-isolate-quickjs/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/ai-isolate-quickjs +## 0.1.48 + +### Patch Changes + +- Updated dependencies []: + - @tanstack/ai-code-mode@0.3.9 + ## 0.1.47 ### Patch Changes diff --git a/packages/ai-isolate-quickjs/package.json b/packages/ai-isolate-quickjs/package.json index 27a7640f6..84a1e3c16 100644 --- a/packages/ai-isolate-quickjs/package.json +++ b/packages/ai-isolate-quickjs/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-isolate-quickjs", - "version": "0.1.47", + "version": "0.1.48", "description": "QuickJS WASM sandbox driver for TanStack AI Code Mode TypeScript execution across runtimes.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-mcp/CHANGELOG.md b/packages/ai-mcp/CHANGELOG.md index 68604fba8..d50da83e8 100644 --- a/packages/ai-mcp/CHANGELOG.md +++ b/packages/ai-mcp/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/ai-mcp +## 0.2.6 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + ## 0.2.5 ### Patch Changes diff --git a/packages/ai-mcp/package.json b/packages/ai-mcp/package.json index 860f77701..13fb511e1 100644 --- a/packages/ai-mcp/package.json +++ b/packages/ai-mcp/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-mcp", - "version": "0.2.5", + "version": "0.2.6", "description": "Host-side Model Context Protocol client for TanStack AI: discover and run MCP server tools, resources, and prompts in any adapter's chat() loop, with generated end-to-end types.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-mistral/CHANGELOG.md b/packages/ai-mistral/CHANGELOG.md index 5bd877325..e5da39936 100644 --- a/packages/ai-mistral/CHANGELOG.md +++ b/packages/ai-mistral/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/ai-mistral +## 0.2.4 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + ## 0.2.3 ### Patch Changes diff --git a/packages/ai-mistral/package.json b/packages/ai-mistral/package.json index 177210044..1d5c84639 100644 --- a/packages/ai-mistral/package.json +++ b/packages/ai-mistral/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-mistral", - "version": "0.2.3", + "version": "0.2.4", "type": "module", "description": "Mistral adapter for TanStack AI", "author": "", diff --git a/packages/ai-ollama/CHANGELOG.md b/packages/ai-ollama/CHANGELOG.md index 80f9fa2ef..91147609d 100644 --- a/packages/ai-ollama/CHANGELOG.md +++ b/packages/ai-ollama/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/ai-ollama +## 0.8.17 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + ## 0.8.16 ### Patch Changes diff --git a/packages/ai-ollama/package.json b/packages/ai-ollama/package.json index 8b414b3a4..f57636beb 100644 --- a/packages/ai-ollama/package.json +++ b/packages/ai-ollama/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-ollama", - "version": "0.8.16", + "version": "0.8.17", "description": "Ollama adapter for TanStack AI local LLM chat, tool calling, and structured outputs.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-openai/CHANGELOG.md b/packages/ai-openai/CHANGELOG.md index 90c8fa673..a50b2a96b 100644 --- a/packages/ai-openai/CHANGELOG.md +++ b/packages/ai-openai/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/ai-openai +## 0.17.2 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + - @tanstack/openai-base@0.9.10 + ## 0.17.1 ### Patch Changes @@ -21,7 +29,9 @@ ```ts createOpenaiImage('gpt-image-1', apiKey, { allowUrlFetch: true }) createOpenaiVideo('sora-2', apiKey, { allowUrlFetch: true }) - createGeminiVideo('veo-3.1-generate-preview', apiKey, { allowUrlFetch: true }) + createGeminiVideo('veo-3.1-generate-preview', apiKey, { + allowUrlFetch: true, + }) ``` Migration: if you passed HTTP(S) URL image inputs to these adapters, either fetch the bytes yourself and pass a `data:` URI, pass a `gs://` reference (Veo), or set `allowUrlFetch: true`. diff --git a/packages/ai-openai/package.json b/packages/ai-openai/package.json index c10867be9..7ec0cc798 100644 --- a/packages/ai-openai/package.json +++ b/packages/ai-openai/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-openai", - "version": "0.17.1", + "version": "0.17.2", "description": "OpenAI adapter for TanStack AI chat, tools, images, video, speech, transcription, realtime, and structured outputs.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-opencode/CHANGELOG.md b/packages/ai-opencode/CHANGELOG.md index 809af39b4..ea262ae77 100644 --- a/packages/ai-opencode/CHANGELOG.md +++ b/packages/ai-opencode/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/ai-opencode +## 0.2.4 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + - @tanstack/ai-sandbox@0.2.5 + ## 0.2.3 ### Patch Changes diff --git a/packages/ai-opencode/package.json b/packages/ai-opencode/package.json index 091203639..ff8583692 100644 --- a/packages/ai-opencode/package.json +++ b/packages/ai-opencode/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-opencode", - "version": "0.2.3", + "version": "0.2.4", "description": "OpenCode harness adapter for TanStack AI — run OpenCode as a chat backend with local tool execution and stateful sessions.", "author": "", "license": "MIT", diff --git a/packages/ai-openrouter/CHANGELOG.md b/packages/ai-openrouter/CHANGELOG.md index 49d91c73f..7d09e9429 100644 --- a/packages/ai-openrouter/CHANGELOG.md +++ b/packages/ai-openrouter/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/ai-openrouter +## 0.15.11 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + ## 0.15.10 ### Patch Changes diff --git a/packages/ai-openrouter/package.json b/packages/ai-openrouter/package.json index 5aa817ade..d3d4d8506 100644 --- a/packages/ai-openrouter/package.json +++ b/packages/ai-openrouter/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-openrouter", - "version": "0.15.10", + "version": "0.15.11", "description": "TanStack AI adapter for OpenRouter chat, provider tools, structured outputs, and access to hundreds of LLMs.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-preact/CHANGELOG.md b/packages/ai-preact/CHANGELOG.md index 1f66e75ad..45514a476 100644 --- a/packages/ai-preact/CHANGELOG.md +++ b/packages/ai-preact/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/ai-preact +## 0.11.2 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + - @tanstack/ai-client@0.23.0 + ## 0.11.1 ### Patch Changes diff --git a/packages/ai-preact/package.json b/packages/ai-preact/package.json index 3fae2bba4..9c40ad0e8 100644 --- a/packages/ai-preact/package.json +++ b/packages/ai-preact/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-preact", - "version": "0.11.1", + "version": "0.11.2", "description": "Preact hooks for TanStack AI streaming chat and typed messages.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-react-ui/CHANGELOG.md b/packages/ai-react-ui/CHANGELOG.md index 1de3edb2c..f51628b18 100644 --- a/packages/ai-react-ui/CHANGELOG.md +++ b/packages/ai-react-ui/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/ai-react-ui +## 0.8.16 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai-client@0.23.0 + - @tanstack/ai-react@0.18.2 + ## 0.8.15 ### Patch Changes diff --git a/packages/ai-react-ui/package.json b/packages/ai-react-ui/package.json index 05058a215..2747a47e7 100644 --- a/packages/ai-react-ui/package.json +++ b/packages/ai-react-ui/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-react-ui", - "version": "0.8.15", + "version": "0.8.16", "description": "Headless React components for building TanStack AI chat interfaces with streamed message parts.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-react/CHANGELOG.md b/packages/ai-react/CHANGELOG.md index 25bdce91d..73b1bbe90 100644 --- a/packages/ai-react/CHANGELOG.md +++ b/packages/ai-react/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/ai-react +## 0.18.2 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + - @tanstack/ai-client@0.23.0 + ## 0.18.1 ### Patch Changes diff --git a/packages/ai-react/package.json b/packages/ai-react/package.json index 8cf8747e4..0d2ca9849 100644 --- a/packages/ai-react/package.json +++ b/packages/ai-react/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-react", - "version": "0.18.1", + "version": "0.18.2", "description": "React hooks for TanStack AI streaming chat, realtime voice, structured outputs, and media generation.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-sandbox-cloudflare/CHANGELOG.md b/packages/ai-sandbox-cloudflare/CHANGELOG.md index 214f16495..9def15741 100644 --- a/packages/ai-sandbox-cloudflare/CHANGELOG.md +++ b/packages/ai-sandbox-cloudflare/CHANGELOG.md @@ -1,5 +1,14 @@ # @tanstack/ai-sandbox-cloudflare +## 0.2.5 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + - @tanstack/ai-sandbox@0.2.5 + - @tanstack/ai-sandbox-local-process@0.2.0 + ## 0.2.4 ### Patch Changes diff --git a/packages/ai-sandbox-cloudflare/package.json b/packages/ai-sandbox-cloudflare/package.json index e8c644836..f47f6f1ac 100644 --- a/packages/ai-sandbox-cloudflare/package.json +++ b/packages/ai-sandbox-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-sandbox-cloudflare", - "version": "0.2.4", + "version": "0.2.5", "description": "Cloudflare sandbox provider for TanStack AI — run harness adapters inside Cloudflare Containers (edge) through the uniform SandboxHandle.", "author": "", "license": "MIT", diff --git a/packages/ai-sandbox/CHANGELOG.md b/packages/ai-sandbox/CHANGELOG.md index 6f3ee0dc9..68dd85c14 100644 --- a/packages/ai-sandbox/CHANGELOG.md +++ b/packages/ai-sandbox/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/ai-sandbox +## 0.2.5 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + ## 0.2.4 ### Patch Changes diff --git a/packages/ai-sandbox/package.json b/packages/ai-sandbox/package.json index 924b25279..6fab07e1b 100644 --- a/packages/ai-sandbox/package.json +++ b/packages/ai-sandbox/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-sandbox", - "version": "0.2.4", + "version": "0.2.5", "description": "Provider-agnostic sandbox layer for TanStack AI — run harness adapters inside isolated sandboxes (defineSandbox, defineWorkspace, withSandbox) with a uniform SandboxHandle, workspace bootstrap, policy, and resumable lifecycle.", "author": "", "license": "MIT", diff --git a/packages/ai-solid-ui/CHANGELOG.md b/packages/ai-solid-ui/CHANGELOG.md index 29c42b34b..cc7d75b3c 100644 --- a/packages/ai-solid-ui/CHANGELOG.md +++ b/packages/ai-solid-ui/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/ai-solid-ui +## 0.7.15 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai-client@0.23.0 + - @tanstack/ai-solid@0.15.2 + ## 0.7.14 ### Patch Changes diff --git a/packages/ai-solid-ui/package.json b/packages/ai-solid-ui/package.json index 17cdecd3b..5670e789d 100644 --- a/packages/ai-solid-ui/package.json +++ b/packages/ai-solid-ui/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-solid-ui", - "version": "0.7.14", + "version": "0.7.15", "description": "Headless Solid components for building TanStack AI chat interfaces with streamed message parts.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-solid/CHANGELOG.md b/packages/ai-solid/CHANGELOG.md index 1e502f29a..fdfa0da0e 100644 --- a/packages/ai-solid/CHANGELOG.md +++ b/packages/ai-solid/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/ai-solid +## 0.15.2 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + - @tanstack/ai-client@0.23.0 + ## 0.15.1 ### Patch Changes diff --git a/packages/ai-solid/package.json b/packages/ai-solid/package.json index 2518689b1..851712aec 100644 --- a/packages/ai-solid/package.json +++ b/packages/ai-solid/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-solid", - "version": "0.15.1", + "version": "0.15.2", "description": "Solid hooks for TanStack AI streaming chat, structured outputs, and media generation.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-svelte/CHANGELOG.md b/packages/ai-svelte/CHANGELOG.md index 514279b95..4f851965a 100644 --- a/packages/ai-svelte/CHANGELOG.md +++ b/packages/ai-svelte/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/ai-svelte +## 0.15.2 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + - @tanstack/ai-client@0.23.0 + ## 0.15.1 ### Patch Changes diff --git a/packages/ai-svelte/package.json b/packages/ai-svelte/package.json index ddb1e59b5..734a1b64c 100644 --- a/packages/ai-svelte/package.json +++ b/packages/ai-svelte/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-svelte", - "version": "0.15.1", + "version": "0.15.2", "description": "Svelte 5 bindings for TanStack AI streaming chat, structured outputs, and media generation.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-vue-ui/CHANGELOG.md b/packages/ai-vue-ui/CHANGELOG.md index c8db6f736..99fe8fbfe 100644 --- a/packages/ai-vue-ui/CHANGELOG.md +++ b/packages/ai-vue-ui/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/ai-vue-ui +## 0.2.35 + +### Patch Changes + +- Updated dependencies []: + - @tanstack/ai-vue@0.15.2 + ## 0.2.34 ### Patch Changes diff --git a/packages/ai-vue-ui/package.json b/packages/ai-vue-ui/package.json index 9036d8330..86801bccb 100644 --- a/packages/ai-vue-ui/package.json +++ b/packages/ai-vue-ui/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-vue-ui", - "version": "0.2.34", + "version": "0.2.35", "description": "Headless Vue components for building TanStack AI chat interfaces with streamed message parts.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai-vue/CHANGELOG.md b/packages/ai-vue/CHANGELOG.md index e7ed5fa20..55b4cb41e 100644 --- a/packages/ai-vue/CHANGELOG.md +++ b/packages/ai-vue/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/ai-vue +## 0.15.2 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + - @tanstack/ai-client@0.23.0 + ## 0.15.1 ### Patch Changes diff --git a/packages/ai-vue/package.json b/packages/ai-vue/package.json index fc57375f0..3af69d3d2 100644 --- a/packages/ai-vue/package.json +++ b/packages/ai-vue/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai-vue", - "version": "0.15.1", + "version": "0.15.2", "description": "Vue composables for TanStack AI streaming chat, structured outputs, and media generation.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index a95900586..d03f9eb87 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -1,5 +1,55 @@ # @tanstack/ai +## 0.43.0 + +### Minor Changes + +- [#955](https://github.com/TanStack/ai/pull/955) [`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288) - Resumable streams: reconnect to an in-flight SSE **or NDJSON** response without + re-running the provider. + + `toServerSentEventsResponse` and `toHttpResponse` both accept a + `durability: { adapter, batch }` option. The adapter (`StreamDurability`) + records every chunk to an ordered log before delivery and tags each event with + an opaque, adapter-owned offset — an SSE `id:` line, or the `id` of an NDJSON + `{ id, chunk }` envelope (NDJSON has no native event-id). A reconnect + (`Last-Event-ID`) or an explicit `?offset` read replays strictly after that + offset from the log — the lazy provider stream is never iterated on resume. + Producers terminalize the log on cancellation and failure (`RUN_ERROR` append + - `close()`) and on completion when the source stream emits its own terminal + event (`chat()` always does), so readers are never parked on a dead run. + + Two adapters ship: `memoryStream(request)` in `@tanstack/ai` (process-local, + for development and tests) and the new `@tanstack/ai-durable-stream` package, + a Durable Streams protocol adapter for production backends. + + For the `GET` handler that a reload or a second tab reconnects to, + `resumeServerSentEventsResponse({ adapter })` and `resumeHttpResponse({ adapter })` + replay a run straight from the durability log. They need no producer stream and + return a 400 when the request carries no resume offset. + + On the client, all four HTTP adapters are now resumable — `fetchServerSentEvents`, + `fetchHttpStream`, `xhrServerSentEvents`, and `xhrHttpStream`. Each tracks the + per-event offset, auto-reconnects with `Last-Event-ID`, de-duplicates the + replayed prefix, and exposes `joinRun(runId)` to attach to an in-flight or + finished run from the start (read-only GET with `offset=-1`). Untagged streams + behave exactly as before. A durable run that ends with no terminal event and no + forward progress now throws `DurableStreamIncompleteError` instead of hanging. + + Reconnection and durability are bounded so failures surface rather than hang or + loop: + - `memoryStream` evicts completed logs after a grace window (unbounded growth + is gone); resuming an expired/unknown run throws, and a from-start join to a + run that never produces fails after `MemoryStreamOptions.firstChunkDeadlineMs`. + - all four HTTP adapters accept `reconnect: { maxAttempts, delayMs }` — a + throttle plus a ceiling on CONSECUTIVE no-progress reconnects (default 5; + forward progress resets it) that fails with the new `StreamReconnectLimitError` + instead of reconnecting endlessly, without penalizing a healthy long-lived run. + - `durableStream` accepts `reconnect: { maxReadFailures, delayMs }` to bound its + read-retry loop, and `server` is now optional when `fetch` is provided (e.g. a + Cloudflare service binding). + - `toServerSentEventsResponse` accepts `debug` to record durability terminal / + close failures server-side, where a replaying joiner cannot observe them. + ## 0.42.0 ### Minor Changes diff --git a/packages/ai/package.json b/packages/ai/package.json index 36a7dd811..6a4186a53 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/ai", - "version": "0.42.0", + "version": "0.43.0", "description": "Type-safe TypeScript AI SDK for streaming chat, tool calling, agents, structured outputs, and multimodal generation.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/openai-base/CHANGELOG.md b/packages/openai-base/CHANGELOG.md index 16a2b786a..c85560c07 100644 --- a/packages/openai-base/CHANGELOG.md +++ b/packages/openai-base/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/openai-base +## 0.9.10 + +### Patch Changes + +- Updated dependencies [[`7c7aa09`](https://github.com/TanStack/ai/commit/7c7aa09a7402b45e6285ebc78a606131aec3e288)]: + - @tanstack/ai@0.43.0 + ## 0.9.9 ### Patch Changes diff --git a/packages/openai-base/package.json b/packages/openai-base/package.json index 63532ef4e..eb9241884 100644 --- a/packages/openai-base/package.json +++ b/packages/openai-base/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/openai-base", - "version": "0.9.9", + "version": "0.9.10", "description": "Shared OpenAI SDK base adapters for TanStack AI providers using Chat Completions and Responses APIs.", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/preact-ai-devtools/CHANGELOG.md b/packages/preact-ai-devtools/CHANGELOG.md index adf1ffa56..300fc277a 100644 --- a/packages/preact-ai-devtools/CHANGELOG.md +++ b/packages/preact-ai-devtools/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/preact-ai-devtools +## 0.1.68 + +### Patch Changes + +- Updated dependencies []: + - @tanstack/ai-devtools-core@0.4.25 + ## 0.1.67 ### Patch Changes diff --git a/packages/preact-ai-devtools/package.json b/packages/preact-ai-devtools/package.json index c33f8246f..dbe39533d 100644 --- a/packages/preact-ai-devtools/package.json +++ b/packages/preact-ai-devtools/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/preact-ai-devtools", - "version": "0.1.67", + "version": "0.1.68", "description": "Preact Devtools plugin for inspecting TanStack AI chat messages, tool calls, streams, and errors.", "author": "tannerlinsley", "license": "MIT", diff --git a/packages/react-ai-devtools/CHANGELOG.md b/packages/react-ai-devtools/CHANGELOG.md index 7f137cae6..ba70b1e15 100644 --- a/packages/react-ai-devtools/CHANGELOG.md +++ b/packages/react-ai-devtools/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/react-ai-devtools +## 0.2.68 + +### Patch Changes + +- Updated dependencies []: + - @tanstack/ai-devtools-core@0.4.25 + ## 0.2.67 ### Patch Changes diff --git a/packages/react-ai-devtools/package.json b/packages/react-ai-devtools/package.json index 18dc96f51..fabdc3642 100644 --- a/packages/react-ai-devtools/package.json +++ b/packages/react-ai-devtools/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/react-ai-devtools", - "version": "0.2.67", + "version": "0.2.68", "description": "React Devtools plugin for inspecting TanStack AI chat messages, tool calls, streams, and errors.", "author": "tannerlinsley", "license": "MIT", diff --git a/packages/solid-ai-devtools/CHANGELOG.md b/packages/solid-ai-devtools/CHANGELOG.md index b0b43c73c..69c245c0e 100644 --- a/packages/solid-ai-devtools/CHANGELOG.md +++ b/packages/solid-ai-devtools/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/solid-ai-devtools +## 0.2.68 + +### Patch Changes + +- Updated dependencies []: + - @tanstack/ai-devtools-core@0.4.25 + ## 0.2.67 ### Patch Changes diff --git a/packages/solid-ai-devtools/package.json b/packages/solid-ai-devtools/package.json index 492ed6a9a..85cf57124 100644 --- a/packages/solid-ai-devtools/package.json +++ b/packages/solid-ai-devtools/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/solid-ai-devtools", - "version": "0.2.67", + "version": "0.2.68", "description": "Solid Devtools plugin for inspecting TanStack AI chat messages, tool calls, streams, and errors.", "author": "Tanner Linsley", "license": "MIT",