Skip to content

Releases: TanStack/ai

@tanstack/solid-ai-devtools@0.2.62

26 Jun 17:52
Immutable release. Only release title and notes can be modified.
8a4ee6a

Choose a tag to compare

Patch Changes

  • Updated dependencies []:
    • @tanstack/ai-devtools-core@0.4.19

@tanstack/react-ai-devtools@0.2.62

26 Jun 17:52
Immutable release. Only release title and notes can be modified.
8a4ee6a

Choose a tag to compare

Patch Changes

  • Updated dependencies []:
    • @tanstack/ai-devtools-core@0.4.19

@tanstack/preact-ai-devtools@0.1.62

26 Jun 17:52
Immutable release. Only release title and notes can be modified.
8a4ee6a

Choose a tag to compare

Patch Changes

  • Updated dependencies []:
    • @tanstack/ai-devtools-core@0.4.19

@tanstack/openai-base@0.9.5

26 Jun 17:52
Immutable release. Only release title and notes can be modified.
8a4ee6a

Choose a tag to compare

Patch Changes

  • Updated dependencies [c1a8732]:
    • @tanstack/ai@0.38.0

@tanstack/ai@0.38.0

26 Jun 17:51
Immutable release. Only release title and notes can be modified.
8a4ee6a

Choose a tag to compare

Minor Changes

  • #843 c1a8732 - feat: MCP Apps support — render interactive ui:// widgets served by MCP servers

    Adds support for the ratified MCP Apps standard, letting MCP server tools return interactive UI widgets that render in the chat.

    • @tanstack/ai — MCP tool results that link a ui:// resource (via _meta.ui.resourceUri) now surface as a new UIResourcePart on the assistant UIMessage (carried as an AG-UI CUSTOM event). The widget never enters model input. The ui:// resource is read eagerly during the run, fail-soft.
    • @tanstack/ai-mcp — tool discovery now captures serverId + the UI resource link; MCPClient gains a public callTool and getInfo() (returns the client's transport descriptor); MCPClients gains getServers() (returns all pool entries' descriptors). New @tanstack/ai-mcp/apps subpath exports createMcpAppCallHandler — a server-side tool-call proxy for interactive widgets that takes the MCP client(s)/pool you already created (clients: MCPClient | MCPClients | Array<MCPClient | MCPClients>), reads each client's transport descriptor via MCPClient.getInfo() / MCPClients.getServers() (pure config, no live socket required), and reconnects per call (stateless, serverless-safe by default, same-server allowlist). Also exports an in-memory McpSessionStore seam for stateful transports.
    • @tanstack/ai-clientcreateMcpAppBridge, a framework-agnostic bridge routing widget tool-calls to the call handler, follow-up prompts into the chat, and blocking links unless a handler is supplied.
    • @tanstack/ai-react / @tanstack/ai-preact — a MCPAppResource component (new ./mcp-apps subpath) that renders a UIResourcePart via @mcp-ui/client's AppRenderer (optional peer dependency), wired to the bridge. Plus a useMcpAppBridge hook (main entry) that returns a stable createMcpAppBridge for a given threadId/callEndpoint while always calling the latest sendMessage/onLink.

    Persistence is intentionally out of scope (in-memory seams only); Solid/Vue/Svelte/Angular renderers are deferred (the renderer SDK is currently React-only).

@tanstack/ai-vue@0.14.0

26 Jun 17:52
Immutable release. Only release title and notes can be modified.
8a4ee6a

Choose a tag to compare

Minor Changes

  • #810 33acdd4 - Add AudioRecorder (@tanstack/ai-client) and framework hooks for recording an
    audio message in the browser: useAudioRecorder (React/Solid/Vue),
    createAudioRecorder (Svelte), and injectAudioRecorder (Angular). The
    recording exposes a ready-to-use audio content part (.part) for sendMessage
    and base64 (.base64) for the generation hooks. Native recorder output
    (webm/mp4), no transcoding, no new dependency.

    Each hook also returns a reactive recording field — the latest resolved
    recording (AudioRecording | null), available without awaiting stop(). Pass
    onComplete: (recording) => T | Promise<T> to transform the output: stop()
    then resolves to T and recording becomes T | null. Omitting onComplete
    keeps the raw AudioRecording.

Patch Changes

  • #856 c22c663 - Fix onResult transform type inference on the generation hooks across every
    framework package — the base generation hook plus generateImage,
    generateAudio, generateSpeech, generateVideo, transcription, and
    summarize (React use*, Vue use*, Solid use*, Svelte create*, and
    Angular inject*).

    The hooks declared the onResult transform via a single defaulted type
    parameter inferred from an optional nested property, which TypeScript collapses
    to its default — leaving the callback parameter typed any (a hard error under
    strict) and never narrowing result to the transform's return type. The
    hooks now infer the transform type from the onResult return position (a
    covariant inference site that works for an optional nested property), so the
    callback parameter is typed as the raw result and result narrows to the
    transform's return type; omitting the transform keeps the raw result type. See
    issue #848.

  • Updated dependencies [33acdd4, c1a8732]:

    • @tanstack/ai-client@0.19.0
    • @tanstack/ai@0.38.0

@tanstack/ai-vue-ui@0.2.28

26 Jun 17:52
Immutable release. Only release title and notes can be modified.
8a4ee6a

Choose a tag to compare

Patch Changes

@tanstack/ai-svelte@0.14.0

26 Jun 17:52
Immutable release. Only release title and notes can be modified.
8a4ee6a

Choose a tag to compare

Minor Changes

  • #810 33acdd4 - Add AudioRecorder (@tanstack/ai-client) and framework hooks for recording an
    audio message in the browser: useAudioRecorder (React/Solid/Vue),
    createAudioRecorder (Svelte), and injectAudioRecorder (Angular). The
    recording exposes a ready-to-use audio content part (.part) for sendMessage
    and base64 (.base64) for the generation hooks. Native recorder output
    (webm/mp4), no transcoding, no new dependency.

    Each hook also returns a reactive recording field — the latest resolved
    recording (AudioRecording | null), available without awaiting stop(). Pass
    onComplete: (recording) => T | Promise<T> to transform the output: stop()
    then resolves to T and recording becomes T | null. Omitting onComplete
    keeps the raw AudioRecording.

Patch Changes

  • #856 c22c663 - Fix onResult transform type inference on the generation hooks across every
    framework package — the base generation hook plus generateImage,
    generateAudio, generateSpeech, generateVideo, transcription, and
    summarize (React use*, Vue use*, Solid use*, Svelte create*, and
    Angular inject*).

    The hooks declared the onResult transform via a single defaulted type
    parameter inferred from an optional nested property, which TypeScript collapses
    to its default — leaving the callback parameter typed any (a hard error under
    strict) and never narrowing result to the transform's return type. The
    hooks now infer the transform type from the onResult return position (a
    covariant inference site that works for an optional nested property), so the
    callback parameter is typed as the raw result and result narrows to the
    transform's return type; omitting the transform keeps the raw result type. See
    issue #848.

  • Updated dependencies [33acdd4, c1a8732]:

    • @tanstack/ai-client@0.19.0
    • @tanstack/ai@0.38.0

@tanstack/ai-solid@0.14.0

26 Jun 17:52
Immutable release. Only release title and notes can be modified.
8a4ee6a

Choose a tag to compare

Minor Changes

  • #810 33acdd4 - Add AudioRecorder (@tanstack/ai-client) and framework hooks for recording an
    audio message in the browser: useAudioRecorder (React/Solid/Vue),
    createAudioRecorder (Svelte), and injectAudioRecorder (Angular). The
    recording exposes a ready-to-use audio content part (.part) for sendMessage
    and base64 (.base64) for the generation hooks. Native recorder output
    (webm/mp4), no transcoding, no new dependency.

    Each hook also returns a reactive recording field — the latest resolved
    recording (AudioRecording | null), available without awaiting stop(). Pass
    onComplete: (recording) => T | Promise<T> to transform the output: stop()
    then resolves to T and recording becomes T | null. Omitting onComplete
    keeps the raw AudioRecording.

Patch Changes

  • #856 c22c663 - Fix onResult transform type inference on the generation hooks across every
    framework package — the base generation hook plus generateImage,
    generateAudio, generateSpeech, generateVideo, transcription, and
    summarize (React use*, Vue use*, Solid use*, Svelte create*, and
    Angular inject*).

    The hooks declared the onResult transform via a single defaulted type
    parameter inferred from an optional nested property, which TypeScript collapses
    to its default — leaving the callback parameter typed any (a hard error under
    strict) and never narrowing result to the transform's return type. The
    hooks now infer the transform type from the onResult return position (a
    covariant inference site that works for an optional nested property), so the
    callback parameter is typed as the raw result and result narrows to the
    transform's return type; omitting the transform keeps the raw result type. See
    issue #848.

  • Updated dependencies [33acdd4, c1a8732]:

    • @tanstack/ai-client@0.19.0
    • @tanstack/ai@0.38.0

@tanstack/ai-solid-ui@0.7.11

26 Jun 17:52
Immutable release. Only release title and notes can be modified.
8a4ee6a

Choose a tag to compare

Patch Changes