Releases: TanStack/ai
@tanstack/solid-ai-devtools@0.2.62
Patch Changes
- Updated dependencies []:
- @tanstack/ai-devtools-core@0.4.19
@tanstack/react-ai-devtools@0.2.62
Patch Changes
- Updated dependencies []:
- @tanstack/ai-devtools-core@0.4.19
@tanstack/preact-ai-devtools@0.1.62
Patch Changes
- Updated dependencies []:
- @tanstack/ai-devtools-core@0.4.19
@tanstack/openai-base@0.9.5
Patch Changes
- Updated dependencies [
c1a8732]:- @tanstack/ai@0.38.0
@tanstack/ai@0.38.0
Minor Changes
-
#843
c1a8732- feat: MCP Apps support — render interactiveui://widgets served by MCP serversAdds 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 aui://resource (via_meta.ui.resourceUri) now surface as a newUIResourceParton the assistantUIMessage(carried as an AG-UICUSTOMevent). The widget never enters model input. Theui://resource is read eagerly during the run, fail-soft.@tanstack/ai-mcp— tool discovery now capturesserverId+ the UI resource link;MCPClientgains a publiccallToolandgetInfo()(returns the client's transport descriptor);MCPClientsgainsgetServers()(returns all pool entries' descriptors). New@tanstack/ai-mcp/appssubpath exportscreateMcpAppCallHandler— 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 viaMCPClient.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-memoryMcpSessionStoreseam for stateful transports.@tanstack/ai-client—createMcpAppBridge, 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— aMCPAppResourcecomponent (new./mcp-appssubpath) that renders aUIResourcePartvia@mcp-ui/client'sAppRenderer(optional peer dependency), wired to the bridge. Plus auseMcpAppBridgehook (main entry) that returns a stablecreateMcpAppBridgefor a giventhreadId/callEndpointwhile always calling the latestsendMessage/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
Minor Changes
-
#810
33acdd4- AddAudioRecorder(@tanstack/ai-client) and framework hooks for recording an
audio message in the browser:useAudioRecorder(React/Solid/Vue),
createAudioRecorder(Svelte), andinjectAudioRecorder(Angular). The
recording exposes a ready-to-use audio content part (.part) forsendMessage
and base64 (.base64) for the generation hooks. Native recorder output
(webm/mp4), no transcoding, no new dependency.Each hook also returns a reactive
recordingfield — the latest resolved
recording (AudioRecording | null), available without awaitingstop(). Pass
onComplete: (recording) => T | Promise<T>to transform the output:stop()
then resolves toTandrecordingbecomesT | null. OmittingonComplete
keeps the rawAudioRecording.
Patch Changes
-
#856
c22c663- FixonResulttransform type inference on the generation hooks across every
framework package — the base generation hook plusgenerateImage,
generateAudio,generateSpeech,generateVideo,transcription, and
summarize(Reactuse*, Vueuse*, Soliduse*, Sveltecreate*, and
Angularinject*).The hooks declared the
onResulttransform via a single defaulted type
parameter inferred from an optional nested property, which TypeScript collapses
to its default — leaving the callback parameter typedany(a hard error under
strict) and never narrowingresultto the transform's return type. The
hooks now infer the transform type from theonResultreturn position (a
covariant inference site that works for an optional nested property), so the
callback parameter is typed as the raw result andresultnarrows 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
@tanstack/ai-svelte@0.14.0
Minor Changes
-
#810
33acdd4- AddAudioRecorder(@tanstack/ai-client) and framework hooks for recording an
audio message in the browser:useAudioRecorder(React/Solid/Vue),
createAudioRecorder(Svelte), andinjectAudioRecorder(Angular). The
recording exposes a ready-to-use audio content part (.part) forsendMessage
and base64 (.base64) for the generation hooks. Native recorder output
(webm/mp4), no transcoding, no new dependency.Each hook also returns a reactive
recordingfield — the latest resolved
recording (AudioRecording | null), available without awaitingstop(). Pass
onComplete: (recording) => T | Promise<T>to transform the output:stop()
then resolves toTandrecordingbecomesT | null. OmittingonComplete
keeps the rawAudioRecording.
Patch Changes
-
#856
c22c663- FixonResulttransform type inference on the generation hooks across every
framework package — the base generation hook plusgenerateImage,
generateAudio,generateSpeech,generateVideo,transcription, and
summarize(Reactuse*, Vueuse*, Soliduse*, Sveltecreate*, and
Angularinject*).The hooks declared the
onResulttransform via a single defaulted type
parameter inferred from an optional nested property, which TypeScript collapses
to its default — leaving the callback parameter typedany(a hard error under
strict) and never narrowingresultto the transform's return type. The
hooks now infer the transform type from theonResultreturn position (a
covariant inference site that works for an optional nested property), so the
callback parameter is typed as the raw result andresultnarrows 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
Minor Changes
-
#810
33acdd4- AddAudioRecorder(@tanstack/ai-client) and framework hooks for recording an
audio message in the browser:useAudioRecorder(React/Solid/Vue),
createAudioRecorder(Svelte), andinjectAudioRecorder(Angular). The
recording exposes a ready-to-use audio content part (.part) forsendMessage
and base64 (.base64) for the generation hooks. Native recorder output
(webm/mp4), no transcoding, no new dependency.Each hook also returns a reactive
recordingfield — the latest resolved
recording (AudioRecording | null), available without awaitingstop(). Pass
onComplete: (recording) => T | Promise<T>to transform the output:stop()
then resolves toTandrecordingbecomesT | null. OmittingonComplete
keeps the rawAudioRecording.
Patch Changes
-
#856
c22c663- FixonResulttransform type inference on the generation hooks across every
framework package — the base generation hook plusgenerateImage,
generateAudio,generateSpeech,generateVideo,transcription, and
summarize(Reactuse*, Vueuse*, Soliduse*, Sveltecreate*, and
Angularinject*).The hooks declared the
onResulttransform via a single defaulted type
parameter inferred from an optional nested property, which TypeScript collapses
to its default — leaving the callback parameter typedany(a hard error under
strict) and never narrowingresultto the transform's return type. The
hooks now infer the transform type from theonResultreturn position (a
covariant inference site that works for an optional nested property), so the
callback parameter is typed as the raw result andresultnarrows 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