Skip to content

refactor!: remove every deprecated API and release all packages as 1.0.0 - #1840

Merged
tombeckenham merged 62 commits into
mainfrom
t3/prepare-v1-release
Oct 22, 2026
Merged

tombeckenham merged 62 commits into
mainfrom
t3/prepare-v1-release

Conversation

@AlemTuzlak

@AlemTuzlak AlemTuzlak commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Read docs/migration/v1.md first. It lists every removed API and its replacement. This PR removes every API that 0.x marked as deprecated, and adds a major changeset that moves all 76 published packages to 1.0.0.

🎯 Changes

  • Doc openers. Each guide now starts with the call and what it does. The scene-setting first paragraph is gone.

  • Deprecated APIs. Removed all @deprecated exports, options, fields, and type aliases. Each one had a replacement in 0.x.

  • addToolApprovalResponse(). Removed from ChatClient and every chat hook. Use resolveInterrupt on the bound tool-approval interrupt. The devtools event tools:approval:responded is also removed.

  • Old wire formats. Removed the CUSTOM approval-requested and tool-input-available events, the [DONE] SSE line, the data copy of forwardedProps, interrupts with no binding (and their approval_required and client_tool_input reasons), and the STEP events that adapters sent next to REASONING_* events.

  • Old saved data. Removed the readers for 0.x formats: old Cloudflare run-log records, a bare UIMessage[] from client persistence, and artifact records without blobKey. A 0.x Cloudflare run-log record now throws an error that says to migrate first. The stall watchdog skips these records, so it cannot mark a finished 0.x run as failed.

  • Generation requests. generationParamsFromRequest and generationParamsFromBody now read the input from forwardedProps, because the hooks no longer send data. The examples, testing/e2e, and testing/panel routes read forwardedProps too, and the E2E audio callers send the input as the plain body.

  • Last leftovers. Removed the old interrupt reason fallbacks in the stream processor. Regenerated docs/reference from the 1.0 source, so the pages for removed types are gone. Moved the testing/panel chunk tables and sample traces to AG-UI events. Fixed comments, codemod notes, a skill, and CLAUDE.md that still talked about deprecated APIs.

  • toolName alias. Removed toolName from TOOL_CALL_START. Read toolCallName, the AG-UI field. Adapters no longer send toolName on TOOL_CALL_START or TOOL_CALL_END, and the stream normalizer no longer copies it.

  • threadId is required. Every chat and generation API that takes a threadId now requires it: chat(), summarize(), the generate* activities, ChatClient, GenerationClient, and every chat and generation hook in every framework. getVideoJobStatus() keeps it optional, because it only polls a job. Inside a chat run, tools get ctx.threadId. It is missing only when a tool runs outside a chat (MCP server, WebMCP, a direct execute() call). The code that made up a thread id is gone, and so are resolveDurableThreadId and DurableThreadIdRequiredError from @tanstack/ai-sandbox. createChatOptions() keeps it optional, so the chat() call passes it. No code makes up a conversation thread id any more: the connection adapters require a run context, and the sandbox tool bridges pass the run's thread id to harness tools. Internal one-shot calls use derived ids: <threadId>:compaction and <threadId>:snippets. Subagent bound calls (ctx.chat, ctx.generateImage) take an optional threadId, because the binding fills in the child id. The generation fetcher gets { signal, threadId, runId }. Every doc sample, example, and test passes a threadId.

  • Packages and models. Deleted @tanstack/ai-react-ui, ai-solid-ui, and ai-vue-ui (use @tanstack/ai-<framework>/ui). Removed provider models that are shut down.

  • Samples that kiira could not check. A sample that passes a value from a relative import (./tools) into chat() is not fully type-checked by kiira 0.6.0 (bug: unresolved relative imports silence type errors in calls that use them AlemTuzlak/kiira#44). 10 of these samples had no threadId, or used the removed useChat id option. They are fixed in ag-ui-compliance.md, migration-from-vercel-ai-advanced.md, and approval-flow-processing.md.

  • Fixes from the full review. A review of all 1,337 files that are not generated found these, and this PR fixes them:

    • ai-octane useChat now sends byok and byokProvider to the client, like the other framework hooks.
    • ai-mistral and ai-octane use workspace:^ for published dependencies.
    • The ai-solid README was a copy of the React README. It is now a Solid README.
    • Docs, skills, READMEs, and JSDoc examples now pass threadId and read the 1.0 request from forwardedProps. Six samples that ran but did the wrong thing are fixed, and twelve false claims are corrected.
    • Two samples now define persistence and sandbox inline, so kiira checks them.
    • The harness tool bridge refuses tools with needsApproval, because it cannot pause for an approval (Harness tools with needsApproval run without approval through the sandbox tool bridge #1854).
    • stream() and rpcStream() pass the run's AG-UI RunAgentInput to the factory as a 4th argument. A server function reads it with chatParamsFromRequestBody, so threadId, runId, and interrupt resume get through. Before, only messages and data did, so interrupts could not resume over a server function.
    • Docs pages open with the call and what the reader gets. 42 pages had the old intro left below the new opener (a repeat, an orphaned "X fixes this.", or a broken createChatHook sentence on the 8 UI pages). The docs skill now says to open with the call and say it once.
    • chat(), ChatClient, GenerationClient, and VideoGenerationClient throw a clear error when threadId is missing or empty, not only a type error.
    • 0.x saved data fails loudly: a bare UIMessage[] logs an error and is not overwritten, retrieveBlob throws for an artifact with no blobKey, and an unbound 0.x interrupt record logs a warning. A client tool whose server and client schemas differ logs a warning.
    • generationParamsFromBody() and generationParamsFromRequest() require threadId and runId and return them as strings, the same as chatParamsFromRequestBody() and AG-UI RunAgentInput. A body that holds only the input is rejected. The per-route if (!threadId) checks are gone from docs, the media-generation skill, and the examples.
    • Removed code that only existed while threadId could be missing or late: the devtools ?? '' fallbacks and getter wrappers, a restoreInboundUsage alias, 43 framework hook signatures that removed and re-added persistence and threadId, and the persistenceProps temporaries. WithOptionalThreadId is now one type instead of three copies. 615 lines removed, 186 added.
    • Type checks now cover testing/e2e/tests, the e2e Playwright setup, ai-octane/tests, and the ts-remix-chat tests. That found real test bugs: multi-turn-reasoning had matched no providers since a stale merge, and a durability test never compared the two tabs. The WebMCP execute type now matches what Chrome passes.
    • The published @tanstack/ai-octane/ui types are strict. The hand-written .tsrx.d.ts files for createChatUI and createChatHook had drifted to any. They are now the compiler output for the .tsrx source. Render children are typed, ToolProps types the tool input and output, and a new type test fails if the files loosen again. Octane .tsrx type checking is still blocked upstream (oxc-tsrx-lint --type-check ignores the package tsconfig (checks .tsrx as React JSX) and requires exactly oxlint-tsgolint 7.0.2002 tsrx-org/oxc#218).
    • oxlint and oxlint-plugin-eslint are at 1.89, and oxlint-tsgolint is at 7.0.2004.
    • ai-vertex tests load one copy of @google/genai. pnpm resolves two copies, and the mock did not apply to the copy that ai-gemini uses.
    • A tool with needsApproval ran with no approval through a harness adapter, because the sandbox tool bridge called execute() directly (Harness tools with needsApproval run without approval through the sandbox tool bridge #1854). createToolBridgeCore() now throws when it gets such a tool, and executeHostTool() rejects it. docs/structured-outputs/harnesses.md and the changeset say so.
    • The Vercel AI SDK comparison is one page, docs/comparison/vercel-ai-sdk.md. The Details page is gone (it was new in this PR). The page says to stay on the AI SDK only if your app already speaks its UI Message Stream protocol. It lists the reasons from the TanStack AI home page, and the feature table now matches the current packages: the official Cloudflare adapter, the Vercel AI Gateway adapter and the other gateways, memory, compaction, computer use, and live worlds. A missing provider points to OpenRouter, Vercel AI Gateway, openaiCompatible, a request in Discussions, or the community adapter guide.
    • The docs skill no longer stops to ask about readers and tone. It states them in one line each and keeps writing. The .claude, .agents, and .grok copies are the same.

Merged main up to #1850. main added facts to pages that this PR splits, so they moved to the new pages: callMetadata to Middleware: Advanced, childResumeIds to Subagents: Advanced, snapshot metadata to Chat Persistence: Advanced, the MCP extension section under Advanced in mcp/server.md, and the OpenCode stream notes to its How it works list. In withPersistence, the resume path keeps the 1.0 shape and adds rejectForgedChildSplit from #1806.

These items stay on purpose:

  1. Models and options that a provider deprecated but still serves (ElevenLabs old models, Anthropic budget thinking, llmgateway max_tokens).
  2. The sandbox and harness approval-requested event. It is a current feature with a different payload.
  3. RunErrorEvent.error. It is a current field. Only the client fallback that read it is removed.
  4. The persistence rule that treats interrupt records of unknown shape as owned by the chat. It is a safety rule, not an old-format reader.

Docs: the new page docs/migration/v1.md is the upgrade guide. docs/migration/create-ui.md is deleted and its content moved into the new page. About 50 docs pages, skills, and READMEs no longer show removed APIs.

✅ Checklist

  • I have followed the steps in the Contributing guide.
  • I have tested code changes locally with pnpm run test:pr, or these tests do not apply to this pull request.
  • I fully understand the code in this pull request, including any code generated with AI assistance.
  • Docs: I updated docs/ for this change, or this change is not user-facing.
  • Changeset: I added a changeset (pnpm changeset), or this PR does not change a published package.

🚀 Release Impact

  • This change affects published code, and I have generated a changeset.
  • This change is docs/CI/dev-only (no release).

Testing

Commands run (all pass):

  1. test:types on the 26 changed packages, after a build of their workspace dependencies.
  2. oxlint and vitest run --maxWorkers=2 on the changed test files in each changed package.
  3. pnpm test:docs and kiira on the changed docs pages.
  4. pnpm changeset status: 76 packages go to 1.0.0 (this includes the 4 new computer use packages from main).
  5. After the first CI run, these also pass:
    • pnpm test:kiira: 1813 of 1813 snippets.
    • The new packages/ai/tests/generation-params.test.ts and the ai-vertex factories.test.ts.
    • For the last leftovers: vitest on ai-client chat-client-interrupts.test.ts and ai mcp-input-interrupt.test.ts and stream-processor.test.ts. test:types for ai, ai-client, ai-devtools, ai-code-mode, testing/panel, and examples/ts-group-chat. pnpm generate-docs, then pnpm test:docs.
    • test:types for testing/e2e, testing/panel, examples/ts-react-chat, examples/sandbox-web, and examples/sandbox-cloudflare.
  6. For the review fixes:
    • vitest on ai-sandbox-cloudflare run-log-do.test.ts and run-log-watchdog.test.ts, and the new ai-octane use-chat-byok.test.ts.
    • tsc on ai-sandbox-cloudflare and test:types on ai-octane. oxlint and oxfmt on the changed files.
    • kiira on the 28 changed docs pages (144 snippets) and on the changed skills.
    • pnpm generate-docs.
    • vitest on ai-vertex (12 of 12).
    • vitest on ai-client connection-adapters.test.ts (54 of 54). Two new tests read the factory's input with chatParamsFromRequestBody. tsc on ai and ai-client. kiira on the 6 changed docs and skill files (87 snippets).
    • For Harness tools with needsApproval run without approval through the sandbox tool bridge #1854: an agent-written repro fails on main (the tool's execute() runs, through both the bridge and executeHostTool()) and passes with the fix. vitest on ai-sandbox bridge-jsonrpc.test.ts and remote-tools.test.ts (20 of 20).
    • pnpm test:docs after the Vercel AI SDK comparison merge: no broken links.

One Solid test file, tests/chat-ui/text-part.test.tsx, does not load on Windows (@solid-refresh file-URL error). This PR does not change that file.

Not run locally, CI runs them: pnpm test:pr as a whole, E2E, the full unit suites, knip, and the typecheck of testing/e2e, testing/panel, and the example apps.

Manual test:

  1. Run pnpm changeset status and make sure that every published package shows 1.0.0.
  2. Run grep -rn "@deprecated" packages/*/src. It prints nothing.
  3. Open docs/migration/v1.md and follow the steps on one example app, for example examples/ts-react-chat.

How this PR makes testing easy: the existing unit tests and the E2E suite were updated to the 1.0 APIs. The example apps and testing/e2e use only the 1.0 APIs, so the CI typecheck and E2E runs cover the call sites.

Linked issues

Closes #1854

Risk / rollback

  • A 1.0 client needs a 1.0 server. A custom server that still sends [DONE] now gets a parse error on the client.
  • Data saved in the old 0.x formats does not load. Users must move that data before they upgrade.
  • A client tool resumes only when its server definition and its .client() tool have the same schemas. If they differ, the pause shows as a generic interrupt. The E2E tool fixtures had this mismatch, and this PR fixes them.
  • /docs/migration/create-ui now returns 404.
  • After the release, run npm deprecate by hand on the three deleted -ui packages.
  • An app that passes a needsApproval tool to a harness adapter now gets an error at run start. It must remove needsApproval, or run that tool with an HTTP adapter.

Rollback: revert this PR before the Version Packages PR merges. After publish, a revert needs a new release.

Public API change

Before

const { addToolApprovalResponse } = useChat({
  connection,
  body: { userId },
})
addToolApprovalResponse({ id, approved: true })

After

const { interrupts } = useChat({
  connection,
  forwardedProps: { userId },
})
const approval = interrupts.find((item) => item.kind === 'tool-approval')
if (approval?.kind === 'tool-approval') approval.resolveInterrupt(true)

stream() and rpcStream() get the run input

// Before: threadId passed by hand, no runId or resume
stream((messages, data) => chatFn({ messages, ...data, threadId }))

// After: the same AG-UI body the HTTP adapters send
stream((_messages, _data, signal, input) => chatFn(input))
// server: const { messages, threadId, runId, resume } = await chatParamsFromRequestBody(input)

Remove every deprecated export, option, field, and type alias from all
packages, and the internal code that only served them. Remove old wire
formats, readers for old saved data, shut-down provider models, and the
@tanstack/ai-react-ui, ai-solid-ui, and ai-vue-ui packages.
@changeset-bot

changeset-bot Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 385a733

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 77 packages
Name Type
@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
ag-ui Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Walkthrough

Warning

Review details and warnings were omitted to fit the comment limit.

@nx-cloud

nx-cloud Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

View your CI Pipeline Execution ↗ for commit daf8962

Command Status Duration Result
nx run-many --targets=test:coverage --projects=... ✅ Succeeded 2s View ↗
nx affected --targets=test:sherif,test:knip,tes... ✅ Succeeded 40s View ↗
nx run-many --targets=build --exclude=examples/... ✅ Succeeded 2s View ↗

☁️ Nx Cloud last updated this comment at 2026-10-22 04:29:14 UTC

@pkg-pr-new

pkg-pr-new Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Open in StackBlitz

@tanstack/ai

npm i https://pkg.pr.new/@tanstack/ai@1840

@tanstack/ai-acp

npm i https://pkg.pr.new/@tanstack/ai-acp@1840

@tanstack/ai-angular

npm i https://pkg.pr.new/@tanstack/ai-angular@1840

@tanstack/ai-anthropic

npm i https://pkg.pr.new/@tanstack/ai-anthropic@1840

@tanstack/ai-bedrock

npm i https://pkg.pr.new/@tanstack/ai-bedrock@1840

@tanstack/ai-byteplus

npm i https://pkg.pr.new/@tanstack/ai-byteplus@1840

@tanstack/ai-claude-code

npm i https://pkg.pr.new/@tanstack/ai-claude-code@1840

@tanstack/ai-client

npm i https://pkg.pr.new/@tanstack/ai-client@1840

@tanstack/ai-cloudflare

npm i https://pkg.pr.new/@tanstack/ai-cloudflare@1840

@tanstack/ai-code-mode

npm i https://pkg.pr.new/@tanstack/ai-code-mode@1840

@tanstack/ai-code-mode-snippets

npm i https://pkg.pr.new/@tanstack/ai-code-mode-snippets@1840

@tanstack/ai-codex

npm i https://pkg.pr.new/@tanstack/ai-codex@1840

@tanstack/ai-cohere

npm i https://pkg.pr.new/@tanstack/ai-cohere@1840

@tanstack/ai-compaction

npm i https://pkg.pr.new/@tanstack/ai-compaction@1840

@tanstack/ai-computer-local

npm i https://pkg.pr.new/@tanstack/ai-computer-local@1840

@tanstack/ai-computer-playwright

npm i https://pkg.pr.new/@tanstack/ai-computer-playwright@1840

@tanstack/ai-computer-sandbox

npm i https://pkg.pr.new/@tanstack/ai-computer-sandbox@1840

@tanstack/ai-computer-use

npm i https://pkg.pr.new/@tanstack/ai-computer-use@1840

@tanstack/ai-devtools-core

npm i https://pkg.pr.new/@tanstack/ai-devtools-core@1840

@tanstack/ai-durable-stream

npm i https://pkg.pr.new/@tanstack/ai-durable-stream@1840

@tanstack/ai-elevenlabs

npm i https://pkg.pr.new/@tanstack/ai-elevenlabs@1840

@tanstack/ai-event-client

npm i https://pkg.pr.new/@tanstack/ai-event-client@1840

@tanstack/ai-fal

npm i https://pkg.pr.new/@tanstack/ai-fal@1840

@tanstack/ai-gemini

npm i https://pkg.pr.new/@tanstack/ai-gemini@1840

@tanstack/ai-grok

npm i https://pkg.pr.new/@tanstack/ai-grok@1840

@tanstack/ai-grok-build

npm i https://pkg.pr.new/@tanstack/ai-grok-build@1840

@tanstack/ai-groq

npm i https://pkg.pr.new/@tanstack/ai-groq@1840

@tanstack/ai-isolate-cloudflare

npm i https://pkg.pr.new/@tanstack/ai-isolate-cloudflare@1840

@tanstack/ai-isolate-daytona

npm i https://pkg.pr.new/@tanstack/ai-isolate-daytona@1840

@tanstack/ai-isolate-e2b

npm i https://pkg.pr.new/@tanstack/ai-isolate-e2b@1840

@tanstack/ai-isolate-node

npm i https://pkg.pr.new/@tanstack/ai-isolate-node@1840

@tanstack/ai-isolate-quickjs

npm i https://pkg.pr.new/@tanstack/ai-isolate-quickjs@1840

@tanstack/ai-isolate-quickjs-bun

npm i https://pkg.pr.new/@tanstack/ai-isolate-quickjs-bun@1840

@tanstack/ai-llmgateway

npm i https://pkg.pr.new/@tanstack/ai-llmgateway@1840

@tanstack/ai-lovable

npm i https://pkg.pr.new/@tanstack/ai-lovable@1840

@tanstack/ai-mcp

npm i https://pkg.pr.new/@tanstack/ai-mcp@1840

@tanstack/ai-memory

npm i https://pkg.pr.new/@tanstack/ai-memory@1840

@tanstack/ai-mistral

npm i https://pkg.pr.new/@tanstack/ai-mistral@1840

@tanstack/ai-octane

npm i https://pkg.pr.new/@tanstack/ai-octane@1840

@tanstack/ai-ollama

npm i https://pkg.pr.new/@tanstack/ai-ollama@1840

@tanstack/ai-ollaya

npm i https://pkg.pr.new/@tanstack/ai-ollaya@1840

@tanstack/ai-openai

npm i https://pkg.pr.new/@tanstack/ai-openai@1840

@tanstack/ai-opencode

npm i https://pkg.pr.new/@tanstack/ai-opencode@1840

@tanstack/ai-openrouter

npm i https://pkg.pr.new/@tanstack/ai-openrouter@1840

@tanstack/ai-perplexity

npm i https://pkg.pr.new/@tanstack/ai-perplexity@1840

@tanstack/ai-persistence

npm i https://pkg.pr.new/@tanstack/ai-persistence@1840

@tanstack/ai-preact

npm i https://pkg.pr.new/@tanstack/ai-preact@1840

@tanstack/ai-react

npm i https://pkg.pr.new/@tanstack/ai-react@1840

@tanstack/ai-reactor

npm i https://pkg.pr.new/@tanstack/ai-reactor@1840

@tanstack/ai-remix

npm i https://pkg.pr.new/@tanstack/ai-remix@1840

@tanstack/ai-sandbox

npm i https://pkg.pr.new/@tanstack/ai-sandbox@1840

@tanstack/ai-sandbox-blaxel

npm i https://pkg.pr.new/@tanstack/ai-sandbox-blaxel@1840

@tanstack/ai-sandbox-boxd

npm i https://pkg.pr.new/@tanstack/ai-sandbox-boxd@1840

@tanstack/ai-sandbox-cloudflare

npm i https://pkg.pr.new/@tanstack/ai-sandbox-cloudflare@1840

@tanstack/ai-sandbox-daytona

npm i https://pkg.pr.new/@tanstack/ai-sandbox-daytona@1840

@tanstack/ai-sandbox-docker

npm i https://pkg.pr.new/@tanstack/ai-sandbox-docker@1840

@tanstack/ai-sandbox-e2b

npm i https://pkg.pr.new/@tanstack/ai-sandbox-e2b@1840

@tanstack/ai-sandbox-local-process

npm i https://pkg.pr.new/@tanstack/ai-sandbox-local-process@1840

@tanstack/ai-sandbox-railway

npm i https://pkg.pr.new/@tanstack/ai-sandbox-railway@1840

@tanstack/ai-sandbox-sprites

npm i https://pkg.pr.new/@tanstack/ai-sandbox-sprites@1840

@tanstack/ai-sandbox-upstash-box

npm i https://pkg.pr.new/@tanstack/ai-sandbox-upstash-box@1840

@tanstack/ai-sandbox-vercel

npm i https://pkg.pr.new/@tanstack/ai-sandbox-vercel@1840

@tanstack/ai-skills

npm i https://pkg.pr.new/@tanstack/ai-skills@1840

@tanstack/ai-solid

npm i https://pkg.pr.new/@tanstack/ai-solid@1840

@tanstack/ai-svelte

npm i https://pkg.pr.new/@tanstack/ai-svelte@1840

@tanstack/ai-typesafe

npm i https://pkg.pr.new/@tanstack/ai-typesafe@1840

@tanstack/ai-utils

npm i https://pkg.pr.new/@tanstack/ai-utils@1840

@tanstack/ai-vercel-gateway

npm i https://pkg.pr.new/@tanstack/ai-vercel-gateway@1840

@tanstack/ai-vertex

npm i https://pkg.pr.new/@tanstack/ai-vertex@1840

@tanstack/ai-vue

npm i https://pkg.pr.new/@tanstack/ai-vue@1840

@tanstack/ai-worldlabs

npm i https://pkg.pr.new/@tanstack/ai-worldlabs@1840

@tanstack/openai-base

npm i https://pkg.pr.new/@tanstack/openai-base@1840

@tanstack/preact-ai-devtools

npm i https://pkg.pr.new/@tanstack/preact-ai-devtools@1840

@tanstack/react-ai-devtools

npm i https://pkg.pr.new/@tanstack/react-ai-devtools@1840

@tanstack/solid-ai-devtools

npm i https://pkg.pr.new/@tanstack/solid-ai-devtools@1840

@tanstack/svelte-ai-devtools

npm i https://pkg.pr.new/@tanstack/svelte-ai-devtools@1840

commit: 385a733

The 1.0 client does not send the data copy of forwardedProps.
generationParamsFromBody still required body.data, so every
generation request to a route that used it failed. The envelope is
now found by forwardedProps, and the input comes from forwardedProps.
Server routes in the examples, the e2e app, and the panel still read
body.data. The 1.0 client sends the input only in forwardedProps, so
these routes now read forwardedProps and no longer fall back to data.
The server definitions of show_notification and display_chart had no
outputSchema, but the browser tools had one. The schema hashes did not
match, so the client treated the pause as a generic interrupt and did
not resume after the tool ran. The removed pre-binding fallback hid
this before.
The lockfile moved the ai-vertex dev copy of @google/genai to another
peer set. The vertex tests mock @google/genai, but ai-gemini loaded
the other copy, so the mock did not apply and the tests failed.
1.0 removed modelOptions.container.skills, so the code block failed
the kiira type check. Skills go on codeExecutionTool instead.
Remove the deprecated ComputerUseTool alias that main added, and add
the four computer use packages to the 1.0.0 changeset.
@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Coverage

✅ Coverage held across 72 compared package(s).

Each package is measured twice in this job — on this PR and on its merge-base with main — and compared. A metric fails only when it is at or above 60% on the merge-base and under 60% on this PR. Other drops are listed but do not fail. Packages your PR doesn't affect are not measured and not listed.

package statements branches functions lines
ai 92.04% (+0.37) 85.91% (+0.40) 92.67% (+0.24) 93.65% (+0.36) ok
ai-acp 78.41% (0.00) 66.66% (-0.13) 70.27% (0.00) 80.13% (0.00) ok
ai-angular 73.83% (-0.27) 60.89% (-1.31) 61.83% (+0.18) 75.40% (-0.20) ok
ai-anthropic 92.27% (-0.10) 87.45% (+0.13) 95.86% (0.00) 92.66% (-0.09) ok
ai-bedrock 90.05% (-0.06) 82.59% (-0.23) 94.20% (0.00) 91.27% (-0.06) ok
ai-byteplus 97.05% (-0.01) 91.62% (-0.04) 98.27% (0.00) 98.48% (-0.01) ok
ai-claude-code 88.90% (-0.03) 76.88% (0.00) 86.66% (-0.22) 90.38% (-0.02) ok
ai-client 87.71% (-0.25) 79.80% (-0.58) 86.73% (-0.40) 90.03% (-0.23) ok
ai-cloudflare 85.55% (0.00) 76.44% (0.00) 85.48% (0.00) 86.79% (0.00) ok
ai-code-mode 91.71% (0.00) 83.12% (0.00) 86.27% (0.00) 92.63% (0.00) ok
ai-code-mode-snippets 87.13% (0.00) 75.67% (0.00) 91.11% (0.00) 88.39% (0.00) ok
ai-codex 94.53% (-0.02) 85.10% (0.00) 89.09% (-0.19) 95.54% (-0.02) ok
ai-cohere 88.97% (0.00) 88.37% (0.00) 85.71% (0.00) 91.80% (0.00) ok
ai-compaction 97.38% (0.00) 92.79% (0.00) 100.00% (0.00) 98.88% (0.00) ok
ai-computer-local 97.29% (0.00) 85.71% (0.00) 88.00% (0.00) 96.84% (0.00) ok
ai-computer-playwright 100.00% (0.00) 100.00% (0.00) 100.00% (0.00) 100.00% (0.00) ok
ai-computer-sandbox 96.20% (0.00) 84.37% (0.00) 100.00% (0.00) 95.94% (0.00) ok
ai-computer-use 97.26% (0.00) 93.36% (0.00) 100.00% (0.00) 99.36% (0.00) ok
ai-devtools 83.13% (0.00) 72.77% (0.00) 87.07% (0.00) 85.22% (0.00) ok
ai-durable-stream 86.70% (0.00) 82.25% (0.00) 92.30% (0.00) 88.72% (0.00) ok
ai-elevenlabs 74.68% (0.00) 69.59% (0.00) 59.13% (0.00) 75.46% (0.00) ok
ai-event-client 56.83% (0.00) 48.07% (+1.20) 68.96% (0.00) 58.33% (+0.44) ok
ai-fal 91.10% (0.00) 82.63% (0.00) 92.40% (0.00) 91.60% (0.00) ok
ai-gemini 68.49% (+0.16) 67.97% (+0.09) 64.62% (0.00) 69.08% (+0.15) ok
ai-grok 48.80% (-0.05) 53.49% (0.00) 56.46% (0.00) 49.63% (-0.04) ok
ai-grok-build 79.14% (-0.05) 63.56% (0.00) 76.99% (-0.40) 80.97% (-0.05) ok
ai-groq 52.54% (0.00) 47.73% (0.00) 67.39% (0.00) 54.66% (0.00) ok
ai-isolate-cloudflare 94.11% (0.00) 70.66% (0.00) 100.00% (0.00) 93.96% (0.00) ok
ai-isolate-daytona 90.25% (0.00) 80.59% (0.00) 100.00% (0.00) 90.15% (0.00) ok
ai-isolate-e2b 92.11% (0.00) 82.22% (+0.74) 97.36% (0.00) 95.05% (0.00) ok
ai-isolate-node 84.00% (0.00) 43.39% (0.00) 100.00% (0.00) 83.78% (0.00) ok
ai-isolate-quickjs 89.07% (0.00) 76.41% (0.00) 90.90% (0.00) 90.30% (0.00) ok
ai-isolate-quickjs-bun 7.76% (0.00) 8.08% (0.00) 5.00% (0.00) 8.33% (0.00) ok
ai-llmgateway 97.67% (0.00) 100.00% (0.00) 88.88% (0.00) 97.67% (0.00) ok
ai-lovable 73.21% (0.00) 55.63% (0.00) 85.07% (0.00) 73.96% (0.00) ok
ai-mcp 96.94% (0.00) 92.61% (0.00) 97.35% (0.00) 98.74% (0.00) ok
ai-memory 73.87% (0.00) 52.70% (0.00) 79.74% (0.00) 76.04% (0.00) ok
ai-mistral 84.82% (0.00) 79.82% (-0.06) 92.59% (0.00) 85.46% (0.00) ok
ai-octane 91.19% (+0.52) 68.26% (+0.52) 87.44% (+0.78) 91.47% (+0.68) ok
ai-ollama 93.80% (+1.07) 80.92% (+2.77) 90.62% (0.00) 93.76% (+1.08) ok
ai-ollaya 86.84% (0.00) 89.28% (0.00) 85.71% (0.00) 91.66% (0.00) ok
ai-openai 65.34% (0.00) 65.72% (0.00) 66.66% (0.00) 65.63% (0.00) ok
ai-opencode 70.29% (0.00) 61.93% (-0.18) 65.97% (0.00) 71.96% (0.00) ok
ai-openrouter 88.26% (+0.38) 73.44% (+0.44) 90.78% (0.00) 90.22% (+0.43) ok
ai-perplexity 91.34% (0.00) 90.43% (0.00) 100.00% (0.00) 93.87% (0.00) ok
ai-persistence 92.22% (-0.08) 82.60% (-0.16) 97.45% (-0.04) 94.91% (-0.19) ok
ai-preact 86.50% (+0.88) 71.00% (+0.19) 87.50% (+1.54) 87.98% (+0.96) ok
ai-react 81.94% (+8.99) 65.42% (+13.53) 80.73% (+6.96) 82.67% (+9.60) ok
ai-reactor 94.91% (0.00) 83.33% (0.00) 93.33% (0.00) 96.55% (0.00) ok
ai-remix 43.02% (+6.32) 30.35% (+7.66) 39.02% (+4.84) 46.23% (+7.19) ok
ai-sandbox 77.51% (-0.02) 82.76% (-0.08) 74.52% (-0.06) 78.01% (-0.02) ok
ai-sandbox-blaxel 87.64% (0.00) 77.18% (0.00) 82.26% (0.00) 89.71% (0.00) ok
ai-sandbox-boxd 95.86% (0.00) 87.12% (0.00) 95.31% (0.00) 98.17% (0.00) ok
ai-sandbox-cloudflare 67.73% (-0.18) 57.27% (-0.20) 71.64% (-0.15) 68.92% (-0.70) ok
ai-sandbox-daytona 82.84% (0.00) 81.89% (0.00) 67.60% (0.00) 85.25% (0.00) ok
ai-sandbox-docker 80.15% (0.00) 71.49% (0.00) 77.38% (0.00) 82.13% (0.00) ok
ai-sandbox-e2b 94.42% (0.00) 88.97% (0.00) 93.24% (0.00) 98.63% (0.00) ok
ai-sandbox-local-process 68.00% (0.00) 53.59% (0.00) 75.86% (0.00) 68.88% (0.00) ok
ai-sandbox-railway 94.75% (0.00) 92.68% (0.00) 90.90% (0.00) 97.59% (0.00) ok
ai-sandbox-sprites 73.23% (0.00) 59.70% (0.00) 73.83% (0.00) 76.17% (0.00) ok
ai-sandbox-upstash-box 94.82% (0.00) 91.52% (0.00) 91.04% (0.00) 97.76% (0.00) ok
ai-sandbox-vercel 44.67% (0.00) 38.18% (0.00) 35.18% (0.00) 45.76% (0.00) ok
ai-skills 80.38% (0.00) 64.05% (0.00) 84.86% (0.00) 82.44% (0.00) ok
ai-solid 75.81% (+23.68) 57.63% (+19.34) 71.28% (+21.46) 78.11% (+21.24) ok
ai-svelte 74.05% (+0.29) 50.99% (-3.60) 70.05% (+0.90) 78.64% (+0.31) ok
ai-typesafe 78.04% (0.00) 84.61% (0.00) 66.66% (0.00) 82.05% (0.00) ok
ai-utils 75.34% (0.00) 74.00% (0.00) 85.71% (0.00) 75.38% (0.00) ok
ai-vercel-gateway 75.97% (0.00) 55.63% (0.00) 85.41% (0.00) 79.38% (0.00) ok
ai-vertex 96.77% (0.00) 97.22% (0.00) 100.00% (0.00) 96.77% (0.00) ok
ai-vue 73.33% (+13.26) 48.73% (+14.63) 73.28% (+13.94) 74.66% (+13.62) ok
ai-worldlabs 79.62% (0.00) 71.50% (0.00) 91.42% (0.00) 82.66% (0.00) ok
openai-base 90.83% (+0.23) 79.44% (+0.42) 97.78% (0.00) 93.02% (+0.29) ok

The /api/audio route reads its input from forwardedProps or from the
plain body. The audio page and the devtools generation hooks page still
wrapped the input in { data }, so the route got no provider and failed.
- Stop reading the 0.x interrupt reasons approval_required and
  client_tool_input in the stream processor. The kind comes from
  metadata.kind only. These reasons are no longer reserved for MCP input.
- Rewrite the tests that asserted the old reason aliases.
- Remove the deprecated pending alias from the useChat test titles.
- Reword comments, the codemods README, the adapter skill, and CLAUDE.md
  that still described removed or deprecated APIs.
- Move the testing panel chunk tables and sample traces to AG-UI events.
- Remove the unused deprecated setHandler from the group chat example.
This removes the pages and members of the deprecated APIs.
# Conflicts:
#	docs/reference/functions/chat.md
#	docs/reference/interfaces/ActivityDeltaEvent.md
#	docs/reference/interfaces/ActivitySnapshotEvent.md
#	docs/reference/interfaces/AgentLoopState.md
#	docs/reference/interfaces/ApprovalRequestedEvent.md
#	docs/reference/interfaces/AudioGenerationOptions.md
#	docs/reference/interfaces/AudioGenerationResult.md
#	docs/reference/interfaces/BaseAGUIEvent.md
#	docs/reference/interfaces/CatalogVoice.md
#	docs/reference/interfaces/CodeModeConsoleEvent.md
#	docs/reference/interfaces/CodeModeExecutionStartedEvent.md
#	docs/reference/interfaces/CodeModeExternalCallEvent.md
#	docs/reference/interfaces/CodeModeExternalErrorEvent.md
#	docs/reference/interfaces/CodeModeExternalResultEvent.md
#	docs/reference/interfaces/CodeModeSnippetCallEvent.md
#	docs/reference/interfaces/CodeModeSnippetErrorEvent.md
#	docs/reference/interfaces/CodeModeSnippetResultEvent.md
#	docs/reference/interfaces/CustomEvent.md
#	docs/reference/interfaces/DefaultMessageMetadataByModality.md
#	docs/reference/interfaces/Embedding.md
#	docs/reference/interfaces/EmbeddingOptions.md
#	docs/reference/interfaces/EmbeddingResult.md
#	docs/reference/interfaces/FileChangedEvent.md
#	docs/reference/interfaces/GeneratedVoice.md
#	docs/reference/interfaces/ImageGenerationOptions.md
#	docs/reference/interfaces/ImageGenerationResult.md
#	docs/reference/interfaces/LazyToolsConfig.md
#	docs/reference/interfaces/ListVoicesOptions.md
#	docs/reference/interfaces/ListVoicesResult.md
#	docs/reference/interfaces/LiveVideoGenerationOptions.md
#	docs/reference/interfaces/LiveVideoGenerationResult.md
#	docs/reference/interfaces/MediaInputMetadata.md
#	docs/reference/interfaces/MessagesSnapshotEvent.md
#	docs/reference/interfaces/PersistedArtifactRef.md
#	docs/reference/interfaces/ProviderTool.md
#	docs/reference/interfaces/RawEvent.md
#	docs/reference/interfaces/ReasoningEncryptedValueEvent.md
#	docs/reference/interfaces/ReasoningEndEvent.md
#	docs/reference/interfaces/ReasoningMessageChunkEvent.md
#	docs/reference/interfaces/ReasoningMessageContentEvent.md
#	docs/reference/interfaces/ReasoningMessageEndEvent.md
#	docs/reference/interfaces/ReasoningMessageStartEvent.md
#	docs/reference/interfaces/ReasoningStartEvent.md
#	docs/reference/interfaces/RerankAdapterResult.md
#	docs/reference/interfaces/RerankOptions.md
#	docs/reference/interfaces/RerankResult.md
#	docs/reference/interfaces/ResolvedPromptCache.md
#	docs/reference/interfaces/ResponseFormat.md
#	docs/reference/interfaces/RunErrorEvent.md
#	docs/reference/interfaces/RunFinishedEvent.md
#	docs/reference/interfaces/RunStartedEvent.md
#	docs/reference/interfaces/SandboxFileCustomEvent.md
#	docs/reference/interfaces/SandboxFileDiffEvent.md
#	docs/reference/interfaces/ServerTool.md
#	docs/reference/interfaces/SessionIdEvent.md
#	docs/reference/interfaces/SnippetRegisteredEvent.md
#	docs/reference/interfaces/StateDeltaEvent.md
#	docs/reference/interfaces/StateSnapshotEvent.md
#	docs/reference/interfaces/StepFinishedEvent.md
#	docs/reference/interfaces/StepStartedEvent.md
#	docs/reference/interfaces/StructuredOutputCompleteEvent.md
#	docs/reference/interfaces/StructuredOutputStartEvent.md
#	docs/reference/interfaces/SubagentErrorEvent.md
#	docs/reference/interfaces/SubagentFinishedEvent.md
#	docs/reference/interfaces/SubagentStartedEvent.md
#	docs/reference/interfaces/SummarizationOptions.md
#	docs/reference/interfaces/SummarizationResult.md
#	docs/reference/interfaces/TTSAlignment.md
#	docs/reference/interfaces/TTSOptions.md
#	docs/reference/interfaces/TTSResult.md
#	docs/reference/interfaces/TTSSegment.md
#	docs/reference/interfaces/TTSTurn.md
#	docs/reference/interfaces/TextCompactOptions.md
#	docs/reference/interfaces/TextCompletionChunk.md
#	docs/reference/interfaces/TextMessageChunkEvent.md
#	docs/reference/interfaces/TextMessageContentEvent.md
#	docs/reference/interfaces/TextMessageEndEvent.md
#	docs/reference/interfaces/TextMessageStartEvent.md
#	docs/reference/interfaces/TextOptions.md
#	docs/reference/interfaces/Tool.md
#	docs/reference/interfaces/ToolCallArgsEvent.md
#	docs/reference/interfaces/ToolCallChunkEvent.md
#	docs/reference/interfaces/ToolCallEndEvent.md
#	docs/reference/interfaces/ToolCallResultEvent.md
#	docs/reference/interfaces/ToolCallStartEvent.md
#	docs/reference/interfaces/ToolConfig.md
#	docs/reference/interfaces/ToolDefinition.md
#	docs/reference/interfaces/ToolDefinitionInstance.md
#	docs/reference/interfaces/ToolInputAvailableEvent.md
#	docs/reference/interfaces/ToolInputRepairContext.md
#	docs/reference/interfaces/TranscriptionOptions.md
#	docs/reference/interfaces/TranscriptionResult.md
#	docs/reference/interfaces/TranscriptionSegment.md
#	docs/reference/interfaces/TranscriptionWord.md
#	docs/reference/interfaces/UIResourceEvent.md
#	docs/reference/interfaces/VideoGenerationOptions.md
#	docs/reference/interfaces/VideoJobResult.md
#	docs/reference/interfaces/VideoStatusResult.md
#	docs/reference/interfaces/VideoStreamResult.md
#	docs/reference/interfaces/VideoUrlResult.md
#	docs/reference/interfaces/VoiceGenerationOptions.md
#	docs/reference/interfaces/VoiceResult.md
#	docs/reference/interfaces/WorldGenerationAssets.md
#	docs/reference/interfaces/WorldGenerationOptions.md
#	docs/reference/interfaces/WorldGenerationResult.md
#	docs/reference/type-aliases/AGUIEvent.md
#	docs/reference/type-aliases/AGUIEventType.md
#	docs/reference/type-aliases/AgentLoopStrategy.md
#	docs/reference/type-aliases/AnyTool.md
#	docs/reference/type-aliases/ChatStream.md
#	docs/reference/type-aliases/EmbeddingContentParts.md
#	docs/reference/type-aliases/EmbeddingInputItem.md
#	docs/reference/type-aliases/EmbeddingInputItemFor.md
#	docs/reference/type-aliases/EmbeddingModality.md
#	docs/reference/type-aliases/EmbeddingModelInputModalitiesByName.md
#	docs/reference/type-aliases/FetchWrapper.md
#	docs/reference/type-aliases/GeneratedAudio.md
#	docs/reference/type-aliases/GeneratedImage.md
#	docs/reference/type-aliases/GeneratedMediaSource.md
#	docs/reference/type-aliases/Interrupt.md
#	docs/reference/type-aliases/KnownCustomEvent.md
#	docs/reference/type-aliases/MediaInputRole.md
#	docs/reference/type-aliases/MediaPrompt.md
#	docs/reference/type-aliases/MediaPromptFor.md
#	docs/reference/type-aliases/MediaPromptModality.md
#	docs/reference/type-aliases/MediaPromptPart.md
#	docs/reference/type-aliases/ModelInputModalitiesByName.md
#	docs/reference/type-aliases/PersistedArtifactActivity.md
#	docs/reference/type-aliases/PersistedArtifactRole.md
#	docs/reference/type-aliases/PromptCacheOptions.md
#	docs/reference/type-aliases/PromptCacheRetention.md
#	docs/reference/type-aliases/RunAgentResumeItem.md
#	docs/reference/type-aliases/RunFinishedOutcome.md
#	docs/reference/type-aliases/StreamChunk.md
#	docs/reference/type-aliases/StreamChunkType.md
#	docs/reference/type-aliases/StructuredOutputStream.md
#	docs/reference/type-aliases/TaggedCustomEvent.md
#	docs/reference/type-aliases/ToolChoice.md
#	docs/reference/type-aliases/ToolExecuteFunction.md
#	docs/reference/type-aliases/TranscriptionResponseFormat.md
#	docs/reference/type-aliases/UsageTotals.md
#	docs/reference/type-aliases/VoiceOrigin.md
#	docs/reference/type-aliases/VoiceTrainingStatus.md
TOOL_CALL_START now carries the tool name only in toolCallName, the
AG-UI field. The adapter extra toolName is also gone, so adapters no
longer send it on TOOL_CALL_START or TOOL_CALL_END. The stream
normalizer no longer copies toolName into toolCallName, and the client
no longer adds toolName back on inbound chunks.
@github-actions
github-actions Bot requested a review from tombeckenham October 21, 2026 17:17
@github-actions github-actions Bot added the waiting-on: maintainer The ball is in the maintainers’ court label Oct 21, 2026
#1843)

* docs: rewrite the docs so a reader can set up each feature in a few minutes

Rewrite every hand-written docs page in plain, friendly English. Each
page starts with the problem and a short setup that runs. The deep
details move to an Advanced part, or to a new advanced page next to it.

- Add 23 advanced pages and their nav entries.
- Correct facts that did not match the source code.
- Keep page URLs and the anchors that other pages link to.

* docs: fix the code samples that failed the kiira type check

* docs: rewrite the computer use pages and use gpt-6.1-sol in the samples

* docs: show the interrupt flow in the tool approval diagram

* docs: read toolCallName on TOOL_CALL_START in the OpenAI samples
tombeckenham and others added 10 commits October 22, 2026 12:04
The docs skill told pages to open with the reader's problem as a short
scene. The docs now open with the call and what the reader gets, which
answers "is this my page?" in one line. Encode that, and add the rule
the rewrite missed on some pages: the opener is said once, so the next
paragraph starts the steps or adds a new fact.

Co-Authored-By: Claude <noreply@anthropic.com>
The call-first openers landed above the old intro paragraphs, so 42
pages repeated the opener, kept a "X fixes this." line whose problem
was cut, or kept a broken "createChatHook from ..." fragment (all eight
UI framework pages). Remove the repeats and orphaned lines, keep each
new fact as one sentence, and fix the fragments. Openers are unchanged.

Co-Authored-By: Claude <noreply@anthropic.com>
- chat(), ChatClient, GenerationClient and VideoGenerationClient throw a
  clear error when threadId is missing or empty. The type already
  required it; a JS caller got persistence keyed "undefined" and runs
  with no thread. Drops two guards that could no longer fire.
- A 0.x bare UIMessage[] in client persistence logs an error and is not
  overwritten by the next save, so the history is not lost.
- retrieveBlob throws a clear error for a 0.x artifact record with no
  blobKey, instead of a misleading not-found.
- A 0.x unbound tool interrupt record logs a warning that it stays
  pending.
- A client tool or approval interrupt whose server and client schemas
  differ logs a warning naming the tool before it falls back to a
  generic interrupt.

Co-Authored-By: Claude <noreply@anthropic.com>
GenerationParams typed threadId and runId as optional and the parser
also took a bare input body, a 0.x shape with no ids. 1.0 generation
functions need a threadId, so every route repeated an
`if (!threadId) return 400` check. AG-UI RunAgentInput requires both
ids, and chatParamsFromRequestBody already does.

- generationParamsFromBody reads only the envelope and throws when
  threadId or runId is missing or empty. Drops the bare-input branches
  and three helpers.
- Remove the per-route threadId checks and optional runId spreads from
  docs, the media-generation skill, and the examples.

Co-Authored-By: Claude <noreply@anthropic.com>
69a3bbe made chat(), ChatClient, GenerationClient and
VideoGenerationClient throw at runtime on a missing threadId. Tests that
called them without one now failed, and tests that checked the
"connection or fetcher" error hit the threadId error first. Pass a
threadId so each test reaches the case it is about.

Co-Authored-By: Claude <noreply@anthropic.com>
- ai-client devtools: the bridge threadId is required, so drop
  withLiveClientIdentity, the `?? ''` fallbacks, the always-true branch,
  and the `const client = this` getters in the three clients.
- ai-client: drop the restoreInboundUsage alias and a `?? {}` on a spread.
- Framework generation hooks: drop the `Omit<..., 'persistence' |
  'threadId'> & GenerationPersistenceOptions` that re-added what it
  removed (43 signatures), and the persistenceProps temporary in 8 files.
- ai-react: delete tool-result-content.ts; its only caller was deleted.
- ai: one WithOptionalThreadId type, reused by BoundTextActivityOptions,
  bound calls, and createChatOptions, which reuses BoundTextActivityOptions
  instead of a copy. Drop the 0.x nested RUN_ERROR copy in
  normalizeStreamChunk.
- ai-persistence: artifactBlobKey is a local function in middleware.ts;
  simplify the resume guard.

Co-Authored-By: Claude <noreply@anthropic.com>
testing/e2e/tsconfig.json only included src/, so tsc never saw tests/.
Include it and fix the 20 errors with narrowing and real types, no casts:

- multi-turn-reasoning never ran: a stale-branch squash merge (98979f7)
  dropped the feature from the E2E registry, so the spec matched no
  providers. Restore it for Anthropic.
- delivery-durability: "a second tab joins an existing run" parsed the
  producing tab's output but never compared it. Assert both tabs match.
- web-mcp-tools: the local registration type required `options`, which
  Chrome does not pass. Make it optional.
- getMessages() returns UIMessage[] instead of any[]; narrow the reads
  that exposed. Type guards for tool-call events, typed fixtures.

Co-Authored-By: Claude <noreply@anthropic.com>
…code pass

Chrome calls a registered WebMCP tool's execute(input) with no options,
and the function TanStack AI registers already takes optional options.
The internal WebMCPTool interface required them.

Co-Authored-By: Claude <noreply@anthropic.com>
- ai-octane: include tests/ in the type check. Type the chat-ui test
  callbacks with the real ai-client UI types, add a declaration for the
  SSR fixture, and resolve @octanejs/testing-library subpaths through a
  tsconfig paths entry that mirrors the vite alias. Fix two test bugs:
  "preserves unrelated caller metadata" passed a field the hook does not
  accept, and a TEXT_MESSAGE_CONTENT event carried a `content` field.
- ts-remix-chat: type-check its tests; build the test router with the
  render middleware the app's RouterTypes expects.
- e2e: type-check the Playwright config and global setup/teardown. Drop
  a `duration` field aimock never reads, and type the aimock global
  instead of casting globalThis.
- ts-solid-chat: delete three files nothing imported.

Co-Authored-By: Claude <noreply@anthropic.com>
The repo was on oxlint-tsgolint 0.24, the pre-TypeScript-7 line, and
`^0.24.0` can never reach 7.x. oxlint 1.89 requires
oxlint-tsgolint >= 7.0.2003. Bump oxlint, oxlint-plugin-eslint and
oxlint-tsgolint together.

The only new finding across all 76 linted projects: a zero-width space
in an ai-skills doc comment, used to break up `**/`. Write the path as
`skills/<name>/SKILL.md` instead.

Co-Authored-By: Claude <noreply@anthropic.com>
The hand-written create-ui and create-chat-hook .tsrx.d.ts files had
drifted to ComponentBody<any> and loose prop shapes. Replace them with
the real declaration emit, export the part and interrupt mixin types,
drop the hand-copied test aliases, and add a typetest that fails if the
declarations loosen again. The docs sample now uses ToolProps directly.
# Conflicts:
#	docs/adapters/opencode.md
#	docs/advanced/middleware.md
#	docs/chat/subagents.md
#	docs/config.json
#	docs/mcp/server.md
#	docs/persistence/chat-persistence.md
#	packages/ai-persistence/src/middleware.ts
@socket-security

socket-security Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatednpm/​oxlint-plugin-eslint@​1.74.0 ⏵ 1.89.099 +201008696 +1100
Updatednpm/​oxlint@​1.74.0 ⏵ 1.89.099 +11009196 +1100
Updatednpm/​oxlint-tsgolint@​0.24.0 ⏵ 7.0.2004991009793100

View full report

@tombeckenham tombeckenham left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for driving 1.0. Checked the deprecated-API removals and the required threadId, merged main twice (conflicts moved onto the split docs pages), fixed the new activity test for threadId, and CI is green.

@tombeckenham
tombeckenham merged commit f1b3f65 into main Oct 22, 2026
16 checks passed
@tombeckenham
tombeckenham deleted the t3/prepare-v1-release branch October 22, 2026 04:35
tombeckenham added a commit that referenced this pull request Oct 22, 2026
Resolve conflicts with the 1.0 release (#1840) and the subagent resume fix (#1806):

- ai-persistence: use main's rejectForgedChildSplit with the branch's
  durableGenericResumeState (interrupts store arg).
- Docs: take main's split pages, and port the branch's additions
  (onGuardToolCall, passEnv, session stores, harness links) to the new
  -advanced pages.
- Adapt to removed APIs: required threadId on chat() and activities,
  required ArtifactRecord.blobKey, no toolName on TOOL_CALL_START,
  z.object inputSchema for MCP registerTool, single threadId on
  ToolExecutionContext.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

waiting-on: maintainer The ball is in the maintainers’ court

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Harness tools with needsApproval run without approval through the sandbox tool bridge

2 participants