Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
2ce315b
feat!: remove deprecated APIs for 1.0
AlemTuzlak Oct 21, 2026
22fac04
docs: add the 1.0 upgrade guide and remove deprecated APIs from docs
AlemTuzlak Oct 21, 2026
1cae903
chore: add the 1.0.0 major changeset for all packages
AlemTuzlak Oct 21, 2026
e3c67c3
ci: apply automated fixes
autofix-ci[bot] Oct 21, 2026
b5c5311
fix(ai): read the generation input from forwardedProps
AlemTuzlak Oct 21, 2026
8d2b710
fix(examples, testing): read request input from forwardedProps
AlemTuzlak Oct 21, 2026
ec510a4
test(e2e): use the same client tool output schema on server and browser
AlemTuzlak Oct 21, 2026
f568fef
fix(ai-vertex): use the same @google/genai copy as ai-gemini
AlemTuzlak Oct 21, 2026
92da595
docs(ai): remove container.skills from the Anthropic skill reference
AlemTuzlak Oct 21, 2026
9a91964
Merge main into t3/prepare-v1-release
AlemTuzlak Oct 21, 2026
cd73a99
fix(testing): send the audio request input as the plain body
AlemTuzlak Oct 21, 2026
7d209d6
chore: remove the last deprecated leftovers for 1.0
AlemTuzlak Oct 21, 2026
ef073c5
docs: regenerate the API reference for 1.0
AlemTuzlak Oct 21, 2026
0c22809
chore: name the removed interrupt reasons in the changeset
AlemTuzlak Oct 21, 2026
84b7d57
Merge remote-tracking branch 'origin/main' into t3/prepare-v1-release
AlemTuzlak Oct 21, 2026
118ad8c
refactor!: remove the toolName alias from TOOL_CALL_START
AlemTuzlak Oct 21, 2026
38220a8
docs: regenerate the API reference without the toolName alias
AlemTuzlak Oct 21, 2026
98bd451
test(e2e): read toolCallName on TOOL_CALL_START in the webFetch spec
AlemTuzlak Oct 21, 2026
c92b51f
docs: rewrite the docs so you can set up each feature in a few minute…
AlemTuzlak Oct 21, 2026
08c8c6c
refactor!: require threadId on chat and generation APIs
AlemTuzlak Oct 21, 2026
a824944
docs: regenerate the API reference for required threadId
AlemTuzlak Oct 21, 2026
f8e0979
docs: pass threadId in every sample now that it is required
AlemTuzlak Oct 21, 2026
3888142
test: pass threadId in the Mistral test and the code mode eval
AlemTuzlak Oct 21, 2026
3b618ea
feat(ai-client)!: pass threadId to the generation fetcher
AlemTuzlak Oct 21, 2026
62cf9f1
refactor(ai)!: make threadId optional on subagent bound calls
AlemTuzlak Oct 21, 2026
6989544
refactor!: stop making up thread ids
AlemTuzlak Oct 21, 2026
c48425a
refactor!: take the threadId in toJsonResponse for structured output
AlemTuzlak Oct 21, 2026
ae632bb
revert: toJsonResponse does not need a threadId for structured output
AlemTuzlak Oct 21, 2026
f837e80
fix!: apply threadId only where it is used
AlemTuzlak Oct 21, 2026
79be7c5
docs: regenerate the API reference for getVideoJobStatus
AlemTuzlak Oct 21, 2026
81f35c7
fix(ai)!: ToolExecutionContext.threadId is optional outside a chat
AlemTuzlak Oct 21, 2026
5cc31c9
docs: regenerate the API reference for ToolExecutionContext.threadId
AlemTuzlak Oct 21, 2026
8b8789c
docs: pass threadId in samples that kiira could not check
tombeckenham Oct 21, 2026
b8cba9e
fix: reject 0.x Cloudflare run records and wire byok in Octane useChat
tombeckenham Oct 22, 2026
870370e
docs: fix 1.0 samples and claims found in the full PR review
tombeckenham Oct 22, 2026
732ca7c
docs: define persistence and sandbox inline so kiira checks the calls
tombeckenham Oct 22, 2026
8fa5927
fix(ai-sandbox): refuse needsApproval tools in the harness tool bridge
tombeckenham Oct 22, 2026
e886095
test(ai-vertex): dedupe @google/genai so the factory mock applies
tombeckenham Oct 22, 2026
857260c
feat(ai-client)!: pass the AG-UI RunAgentInput to stream() and rpcStr…
tombeckenham Oct 22, 2026
1963963
docs: start each guide with the call, not a scene
tombeckenham Oct 22, 2026
4a38f51
chore(skills): open docs pages with the call, said once
tombeckenham Oct 22, 2026
1aa9392
docs: say each page opener once
tombeckenham Oct 22, 2026
69a3bbe
fix!: fail loudly on a missing threadId and on 0.x saved data
tombeckenham Oct 22, 2026
966c0ae
refactor(ai)!: require threadId and runId in generation params
tombeckenham Oct 22, 2026
42cfd86
test: pass threadId where chat() and the clients now require it
tombeckenham Oct 22, 2026
12379a4
refactor: remove dead fallbacks and copies left by required threadId
tombeckenham Oct 22, 2026
718c438
test(e2e): type-check the specs and fix what that found
tombeckenham Oct 22, 2026
591f4cc
fix(ai-client): match the WebMCP execute type to what Chrome and the …
tombeckenham Oct 22, 2026
52a1065
test: type-check the Octane tests, remix example tests, and e2e setup
tombeckenham Oct 22, 2026
f430f0f
chore: upgrade oxlint to 1.89 and oxlint-tsgolint to 7.0.2004
tombeckenham Oct 22, 2026
f567ba0
fix(ai-octane): make the published ui types match the .tsrx source
tombeckenham Oct 22, 2026
abe6883
chore(skills): docs skill states readers and tone instead of asking
tombeckenham Oct 22, 2026
7858110
docs: merge the Vercel AI SDK comparison into one page
tombeckenham Oct 22, 2026
2b364af
docs: drop the agent class and RSC reasons from the AI SDK comparison
tombeckenham Oct 22, 2026
5280e82
docs: point missing providers to a request or the adapter guide
tombeckenham Oct 22, 2026
82aad9d
docs: put TanStack AI first in the AI SDK API map
tombeckenham Oct 22, 2026
29f6b7f
Revert "docs: put TanStack AI first in the AI SDK API map"
tombeckenham Oct 22, 2026
7a50aef
docs: put the Vercel AI SDK first in the comparison table
tombeckenham Oct 22, 2026
ee7af52
Merge remote-tracking branch 'origin/main' into t3/prepare-v1-release
tombeckenham Oct 22, 2026
f149009
Merge remote-tracking branch 'origin/main' into t3/prepare-v1-release
tombeckenham Oct 22, 2026
daf8962
ci: apply automated fixes
autofix-ci[bot] Oct 22, 2026
385a733
test(ai): pass threadId in the activity middleware test from main
tombeckenham Oct 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,14 @@ is a means (keep examples honest), not the end (a green check).
- an adapter → `import { openaiText } from '@tanstack/ai-openai'; const adapter = openaiText('gpt-5.5')`.
- tools → define inline with `toolDefinition({ name, description, inputSchema })`.
- any other arbitrary placeholder (db, env, a client, a token) → import it from
a relative module: `import { db } from './db'`. kiira ignores unresolved
_relative_ imports, so the name is a usable `any` and the reader sees they
must supply it.
a relative module: `import { db } from './db'`. kiira hides the "cannot find
module" error for _relative_ imports, and the reader sees they must supply it.
**But the binding is TypeScript's error type, not `any`:** every other error
in a call that uses it is silently dropped. `chat({ ..., tools: serverTools })`
with `serverTools` from `./tools` passes even with no `threadId`. So never pass
a relative-import value into a TanStack call (tools, schemas, agents,
messages, options) in a fence that must prove the call is right. Define it
inline or in an earlier fence of the same file instead.

2. **No invisible "ambient" fixture for `messages`/`message`.** Same reason as #1
— the reader sees a variable appear from nowhere. Use real visible setup.
Expand Down
2 changes: 1 addition & 1 deletion .agents/skills/add-example-tutorial/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ Add other files only when this tutorial needs them (a key form, a tool, a store)

## 3. Tutorial page

Load `docs`. Run its persona and tone gates unless this conversation already chose them.
Load `docs`. State the readers and the tone it picks, then keep going.

Open with the problem the reader has, why it matters, and how this tutorial solves it (one short block). Then walk through steps. Each step teaches one piece of that solution and says why that piece exists.

Expand Down
137 changes: 36 additions & 101 deletions .agents/skills/docs/SKILL.md

Large diffs are not rendered by default.

96 changes: 96 additions & 0 deletions .changeset/v1-release.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
---
'@tanstack/ai-acp': major
'@tanstack/ai-angular': major
'@tanstack/ai-anthropic': major
'@tanstack/ai-bedrock': major
'@tanstack/ai-byteplus': major
'@tanstack/ai-claude-code': major
'@tanstack/ai-client': major
'@tanstack/ai-cloudflare': major
'@tanstack/ai-code-mode-snippets': major
'@tanstack/ai-code-mode': major
'@tanstack/ai-codex': major
'@tanstack/ai-cohere': major
'@tanstack/ai-compaction': major
'@tanstack/ai-computer-local': major
'@tanstack/ai-computer-playwright': major
'@tanstack/ai-computer-sandbox': major
'@tanstack/ai-computer-use': major
'@tanstack/ai-devtools-core': major
'@tanstack/ai-durable-stream': major
'@tanstack/ai-elevenlabs': major
'@tanstack/ai-event-client': major
'@tanstack/ai-fal': major
'@tanstack/ai-gemini': major
'@tanstack/ai-grok-build': major
'@tanstack/ai-grok': major
'@tanstack/ai-groq': major
'@tanstack/ai-isolate-cloudflare': major
'@tanstack/ai-isolate-daytona': major
'@tanstack/ai-isolate-e2b': major
'@tanstack/ai-isolate-node': major
'@tanstack/ai-isolate-quickjs-bun': major
'@tanstack/ai-isolate-quickjs': major
'@tanstack/ai-llmgateway': major
'@tanstack/ai-lovable': major
'@tanstack/ai-mcp': major
'@tanstack/ai-memory': major
'@tanstack/ai-mistral': major
'@tanstack/ai-octane': major
'@tanstack/ai-ollama': major
'@tanstack/ai-ollaya': major
'@tanstack/ai-openai': major
'@tanstack/ai-opencode': major
'@tanstack/ai-openrouter': major
'@tanstack/ai-perplexity': major
'@tanstack/ai-persistence': major
'@tanstack/ai-preact': major
'@tanstack/ai-react': major
'@tanstack/ai-reactor': major
'@tanstack/ai-remix': major
'@tanstack/ai-sandbox-blaxel': major
'@tanstack/ai-sandbox-boxd': major
'@tanstack/ai-sandbox-cloudflare': major
'@tanstack/ai-sandbox-daytona': major
'@tanstack/ai-sandbox-docker': major
'@tanstack/ai-sandbox-e2b': major
'@tanstack/ai-sandbox-local-process': major
'@tanstack/ai-sandbox-railway': major
'@tanstack/ai-sandbox-sprites': major
'@tanstack/ai-sandbox-upstash-box': major
'@tanstack/ai-sandbox-vercel': major
'@tanstack/ai-sandbox': major
'@tanstack/ai-skills': major
'@tanstack/ai-solid': major
'@tanstack/ai-svelte': major
'@tanstack/ai-typesafe': major
'@tanstack/ai-utils': major
'@tanstack/ai-vercel-gateway': major
'@tanstack/ai-vertex': major
'@tanstack/ai-vue': major
'@tanstack/ai-worldlabs': major
'@tanstack/ai': major
'@tanstack/openai-base': major
'@tanstack/preact-ai-devtools': major
'@tanstack/react-ai-devtools': major
'@tanstack/solid-ai-devtools': major
'@tanstack/svelte-ai-devtools': major
---

TanStack AI 1.0.0. This release removes every API that was deprecated in 0.x. Read the upgrade guide before you upgrade: https://tanstack.com/ai/latest/docs/migration/v1

- Removed all `@deprecated` exports, options, fields, and type aliases. Each one has a replacement that already shipped in 0.x.
- Removed `addToolApprovalResponse()` from `ChatClient` and every chat hook. Resolve the bound `tool-approval` interrupt with `resolveInterrupt` instead. The devtools event `tools:approval:responded` is also removed.
- Removed the old wire formats: the CUSTOM `approval-requested` and `tool-input-available` events, the `[DONE]` SSE line, the `data` copy of `forwardedProps`, pre-binding interrupt descriptors and their `approval_required` and `client_tool_input` reasons, and the STEP events that adapters sent next to `REASONING_*` events. Use a 1.0 client with a 1.0 server.
- Removed the `toolName` alias from `TOOL_CALL_START` chunks. Read `toolCallName` instead.
- `threadId` is now required on `useChat` and every other chat hook, `ChatClient`, the generation hooks and clients, `chat()`, `summarize()`, the generation functions, `codeModeWithSnippets()`, `selectRelevantSnippets()`, `CompactionContext`, and `SummarizeInput`. TanStack AI no longer makes a thread id for you. Pass a stable id for each conversation. `createChatHook` factory options no longer take `threadId`: pass it on each hook call. Octane generation hooks take `threadId` instead of `id`. `@tanstack/ai-sandbox` removes `resolveDurableThreadId` and `DurableThreadIdRequiredError`.
- The published `@tanstack/ai-octane/ui` types are now strict. `UI.Messages`, `UI.Message`, `UI.Part`, and `UI.Interrupts` type their render children. `ToolProps` types `part.input` and `part.output` for the named tool. `toolsComponents` and `interruptsComponents` are required when the chat options declare tools or named interrupts. Code that relied on the old loose types can fail to compile.
- A connection adapter's `connect()` and `send()` need the run context (with `threadId`) as their fourth argument. `ChatClient` and the generation clients pass it.
- `@tanstack/ai-sandbox`: `createToolBridgeCore()`, `startHostToolBridge()`, a `ToolBridgeProvisioner`, and `executeHostTool()` take a required `threadId`. Bridged tools get it in their context.
- `@tanstack/ai-sandbox`: the harness tool bridge and `executeHostTool()` refuse a tool with `needsApproval`. Before, the tool ran with no approval. Remove `needsApproval`, or run the tool with an HTTP adapter.
- `stream()` and `rpcStream()` pass the AG-UI `RunAgentInput` for the run as the fourth factory argument, the same body the HTTP adapters send. Read it on the server with `chatParamsFromRequestBody()` or `generationParamsFromBody()`, so `threadId`, `runId`, and interrupt `resume` reach a server function. `RunAgentInput` is exported from `@tanstack/ai/client`.
- A generation `fetcher` gets `threadId` and `runId` in its second argument, next to `signal` and `headers`. Pass them to the server generation call.
- `generationParamsFromBody()` and `generationParamsFromRequest()` read the generation input from `forwardedProps`. A server that reads `body.data` gets `undefined`. Read `body.forwardedProps` instead. They also require `threadId` and `runId` and return them as strings, the same as `chatParamsFromRequestBody()` and the AG-UI `RunAgentInput`. A body that holds only the input is rejected.
- Removed the readers for data saved in old 0.x formats (old Cloudflare run-log records, a bare `UIMessage[]` from client persistence, artifact records without `blobKey`).
- Removed provider models that are shut down.
- `@tanstack/ai-react-ui`, `@tanstack/ai-solid-ui`, and `@tanstack/ai-vue-ui` get no 1.0 release. Import from `@tanstack/ai-react/ui`, `@tanstack/ai-solid/ui`, or `@tanstack/ai-vue/ui`.
2 changes: 1 addition & 1 deletion .claude/skills/add-example-tutorial/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ Add other files only when this tutorial needs them (a key form, a tool, a store)

## 3. Tutorial page

Load `docs`. Run its persona and tone gates unless this conversation already chose them.
Load `docs`. State the readers and the tone it picks, then keep going.

Open with the problem the reader has, why it matters, and how this tutorial solves it (one short block). Then walk through steps. Each step teaches one piece of that solution and says why that piece exists.

Expand Down
Loading
Loading