@assistant-ui/mcp-docs-server 0.2.3 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -43
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -91
- package/dist/index.js.map +1 -1
- package/dist/proxy.d.ts +9 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +91 -0
- package/dist/proxy.js.map +1 -0
- package/package.json +8 -12
- package/src/index.ts +3 -115
- package/src/proxy.test.ts +385 -0
- package/src/proxy.ts +126 -0
- package/.docs/organized/code-examples/waterfall.md +0 -807
- package/.docs/organized/code-examples/with-a2a.md +0 -675
- package/.docs/organized/code-examples/with-ag-ui.md +0 -553
- package/.docs/organized/code-examples/with-ai-sdk-v7.md +0 -466
- package/.docs/organized/code-examples/with-artifacts.md +0 -815
- package/.docs/organized/code-examples/with-assistant-transport.md +0 -576
- package/.docs/organized/code-examples/with-browser-extension.md +0 -371
- package/.docs/organized/code-examples/with-chain-of-thought.md +0 -962
- package/.docs/organized/code-examples/with-cloud-standalone.md +0 -681
- package/.docs/organized/code-examples/with-cloud.md +0 -439
- package/.docs/organized/code-examples/with-custom-thread-list.md +0 -569
- package/.docs/organized/code-examples/with-elevenlabs-conversational.md +0 -527
- package/.docs/organized/code-examples/with-elevenlabs-scribe.md +0 -697
- package/.docs/organized/code-examples/with-eve.md +0 -405
- package/.docs/organized/code-examples/with-expo.md +0 -2246
- package/.docs/organized/code-examples/with-external-store.md +0 -421
- package/.docs/organized/code-examples/with-ffmpeg.md +0 -829
- package/.docs/organized/code-examples/with-generative-ui.md +0 -1810
- package/.docs/organized/code-examples/with-google-adk.md +0 -368
- package/.docs/organized/code-examples/with-heat-graph.md +0 -304
- package/.docs/organized/code-examples/with-image-generation.md +0 -463
- package/.docs/organized/code-examples/with-interactables.md +0 -733
- package/.docs/organized/code-examples/with-langchain.md +0 -446
- package/.docs/organized/code-examples/with-langgraph.md +0 -855
- package/.docs/organized/code-examples/with-livekit.md +0 -643
- package/.docs/organized/code-examples/with-mcp.md +0 -782
- package/.docs/organized/code-examples/with-nuxt.md +0 -2428
- package/.docs/organized/code-examples/with-opencode.md +0 -1974
- package/.docs/organized/code-examples/with-openui.md +0 -450
- package/.docs/organized/code-examples/with-pi.md +0 -2084
- package/.docs/organized/code-examples/with-react-hook-form.md +0 -727
- package/.docs/organized/code-examples/with-react-ink-web.md +0 -740
- package/.docs/organized/code-examples/with-react-ink.md +0 -473
- package/.docs/organized/code-examples/with-react-router.md +0 -936
- package/.docs/organized/code-examples/with-resumable-stream.md +0 -668
- package/.docs/organized/code-examples/with-store.md +0 -679
- package/.docs/organized/code-examples/with-svelte.md +0 -415
- package/.docs/organized/code-examples/with-sveltekit.md +0 -1061
- package/.docs/organized/code-examples/with-tanstack.md +0 -812
- package/.docs/organized/code-examples/with-tap-runtime.md +0 -813
- package/.docs/organized/code-examples/with-virtualized-thread.md +0 -681
- package/.docs/organized/code-examples/with-vue.md +0 -408
- package/.docs/raw/docs/(getting-started)/architecture.mdx +0 -146
- package/.docs/raw/docs/(getting-started)/base-ui.mdx +0 -39
- package/.docs/raw/docs/(getting-started)/cli.mdx +0 -542
- package/.docs/raw/docs/(getting-started)/devtools.mdx +0 -79
- package/.docs/raw/docs/(getting-started)/index.mdx +0 -23
- package/.docs/raw/docs/(getting-started)/installation.mdx +0 -483
- package/.docs/raw/docs/(getting-started)/llm.mdx +0 -211
- package/.docs/raw/docs/(getting-started)/rtl.mdx +0 -78
- package/.docs/raw/docs/(reference)/api-reference/adapters/attachments.mdx +0 -36
- package/.docs/raw/docs/(reference)/api-reference/adapters/feedback.mdx +0 -20
- package/.docs/raw/docs/(reference)/api-reference/adapters/index.mdx +0 -34
- package/.docs/raw/docs/(reference)/api-reference/adapters/model.mdx +0 -44
- package/.docs/raw/docs/(reference)/api-reference/adapters/persistence.mdx +0 -59
- package/.docs/raw/docs/(reference)/api-reference/adapters/runtime.mdx +0 -20
- package/.docs/raw/docs/(reference)/api-reference/adapters/suggestions.mdx +0 -26
- package/.docs/raw/docs/(reference)/api-reference/context-providers/assistant-runtime-provider.mdx +0 -84
- package/.docs/raw/docs/(reference)/api-reference/context-providers/index.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/context-providers/scoped-providers.mdx +0 -64
- package/.docs/raw/docs/(reference)/api-reference/external-store/index.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +0 -57
- package/.docs/raw/docs/(reference)/api-reference/external-store/runtime.mdx +0 -49
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/a2ui.mdx +0 -40
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/actions.mdx +0 -56
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/components.mdx +0 -86
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/index.mdx +0 -39
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/json-generative-ui.mdx +0 -42
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/rendering.mdx +0 -84
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/slack.mdx +0 -85
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/spec.mdx +0 -45
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/teams.mdx +0 -93
- package/.docs/raw/docs/(reference)/api-reference/generative-ui/tokens.mdx +0 -62
- package/.docs/raw/docs/(reference)/api-reference/hooks/composer-triggers.mdx +0 -129
- package/.docs/raw/docs/(reference)/api-reference/hooks/index.mdx +0 -31
- package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +0 -34
- package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +0 -350
- package/.docs/raw/docs/(reference)/api-reference/hooks/runtimes.mdx +0 -28
- package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +0 -97
- package/.docs/raw/docs/(reference)/api-reference/integrations/ai-sdk.mdx +0 -200
- package/.docs/raw/docs/(reference)/api-reference/integrations/cloud-ai-sdk.mdx +0 -24
- package/.docs/raw/docs/(reference)/api-reference/integrations/eve.mdx +0 -118
- package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +0 -28
- package/.docs/raw/docs/(reference)/api-reference/integrations/react-data-stream.mdx +0 -37
- package/.docs/raw/docs/(reference)/api-reference/model-context/context.mdx +0 -50
- package/.docs/raw/docs/(reference)/api-reference/model-context/index.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/model-context/registry.mdx +0 -20
- package/.docs/raw/docs/(reference)/api-reference/overview.mdx +0 -566
- package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar-more.mdx +0 -152
- package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar.mdx +0 -239
- package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +0 -208
- package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-modal.mdx +0 -108
- package/.docs/raw/docs/(reference)/api-reference/primitives/attachment.mdx +0 -99
- package/.docs/raw/docs/(reference)/api-reference/primitives/branch-picker.mdx +0 -145
- package/.docs/raw/docs/(reference)/api-reference/primitives/chain-of-thought.mdx +0 -82
- package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +0 -637
- package/.docs/raw/docs/(reference)/api-reference/primitives/composition.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/primitives/error.mdx +0 -65
- package/.docs/raw/docs/(reference)/api-reference/primitives/index.mdx +0 -73
- package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +0 -117
- package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +0 -339
- package/.docs/raw/docs/(reference)/api-reference/primitives/queue-item.mdx +0 -77
- package/.docs/raw/docs/(reference)/api-reference/primitives/selection-toolbar.mdx +0 -88
- package/.docs/raw/docs/(reference)/api-reference/primitives/suggestion.mdx +0 -81
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item-more.mdx +0 -129
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list-item.mdx +0 -138
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread-list.mdx +0 -122
- package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +0 -289
- package/.docs/raw/docs/(reference)/api-reference/runtimes/assistant-runtime.mdx +0 -20
- package/.docs/raw/docs/(reference)/api-reference/runtimes/attachment-runtime.mdx +0 -24
- package/.docs/raw/docs/(reference)/api-reference/runtimes/composer-runtime.mdx +0 -32
- package/.docs/raw/docs/(reference)/api-reference/runtimes/index.mdx +0 -43
- package/.docs/raw/docs/(reference)/api-reference/runtimes/message-part-runtime.mdx +0 -43
- package/.docs/raw/docs/(reference)/api-reference/runtimes/message-runtime.mdx +0 -24
- package/.docs/raw/docs/(reference)/api-reference/runtimes/queue-state.mdx +0 -20
- package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-item-runtime.mdx +0 -24
- package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +0 -24
- package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-runtime.mdx +0 -36
- package/.docs/raw/docs/(reference)/api-reference/tools/component-tools.mdx +0 -85
- package/.docs/raw/docs/(reference)/api-reference/tools/index.mdx +0 -45
- package/.docs/raw/docs/(reference)/api-reference/tools/interactables-legacy.mdx +0 -55
- package/.docs/raw/docs/(reference)/api-reference/tools/interactables.mdx +0 -151
- package/.docs/raw/docs/(reference)/api-reference/tools/rendering.mdx +0 -106
- package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +0 -62
- package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +0 -178
- package/.docs/raw/docs/(reference)/api-reference/transport/assistant-transport.mdx +0 -48
- package/.docs/raw/docs/(reference)/api-reference/transport/frame.mdx +0 -62
- package/.docs/raw/docs/(reference)/api-reference/transport/index.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/utilities/index.mdx +0 -19
- package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +0 -152
- package/.docs/raw/docs/(reference)/api-reference/voice/index.mdx +0 -22
- package/.docs/raw/docs/(reference)/api-reference/voice/session.mdx +0 -54
- package/.docs/raw/docs/(reference)/api-reference/voice/speech-dictation.mdx +0 -36
- package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +0 -527
- package/.docs/raw/docs/cloud/ai-sdk.mdx +0 -604
- package/.docs/raw/docs/cloud/authorization.mdx +0 -252
- package/.docs/raw/docs/cloud/index.mdx +0 -46
- package/.docs/raw/docs/cloud/langgraph.mdx +0 -554
- package/.docs/raw/docs/copilots/assistant-frame.mdx +0 -411
- package/.docs/raw/docs/copilots/make-assistant-visible.mdx +0 -82
- package/.docs/raw/docs/copilots/model-context.mdx +0 -156
- package/.docs/raw/docs/copilots/motivation.mdx +0 -202
- package/.docs/raw/docs/copilots/use-assistant-instructions.mdx +0 -64
- package/.docs/raw/docs/guides/attachments.mdx +0 -619
- package/.docs/raw/docs/guides/branching.mdx +0 -76
- package/.docs/raw/docs/guides/chain-of-thought.mdx +0 -164
- package/.docs/raw/docs/guides/chatgpt-subscription.mdx +0 -108
- package/.docs/raw/docs/guides/context-api.mdx +0 -619
- package/.docs/raw/docs/guides/dictation.mdx +0 -298
- package/.docs/raw/docs/guides/editing.mdx +0 -102
- package/.docs/raw/docs/guides/electron.mdx +0 -369
- package/.docs/raw/docs/guides/headless-composer-input.mdx +0 -113
- package/.docs/raw/docs/guides/image-generation.mdx +0 -74
- package/.docs/raw/docs/guides/index.mdx +0 -117
- package/.docs/raw/docs/guides/input-history.mdx +0 -55
- package/.docs/raw/docs/guides/latex.mdx +0 -158
- package/.docs/raw/docs/guides/mentions.mdx +0 -575
- package/.docs/raw/docs/guides/message-timing.mdx +0 -215
- package/.docs/raw/docs/guides/quoting.mdx +0 -169
- package/.docs/raw/docs/guides/resumable-stream-deployment.mdx +0 -212
- package/.docs/raw/docs/guides/resumable-stream-stores.mdx +0 -152
- package/.docs/raw/docs/guides/resumable-streams.mdx +0 -292
- package/.docs/raw/docs/guides/slash-commands.mdx +0 -358
- package/.docs/raw/docs/guides/speech.mdx +0 -172
- package/.docs/raw/docs/guides/suggestions.mdx +0 -384
- package/.docs/raw/docs/guides/virtualization.mdx +0 -133
- package/.docs/raw/docs/guides/voice.mdx +0 -310
- package/.docs/raw/docs/ink/adapters.mdx +0 -99
- package/.docs/raw/docs/ink/custom-backend.mdx +0 -254
- package/.docs/raw/docs/ink/hooks.mdx +0 -469
- package/.docs/raw/docs/ink/index.mdx +0 -237
- package/.docs/raw/docs/ink/migration.mdx +0 -138
- package/.docs/raw/docs/ink/primitives.mdx +0 -1259
- package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +0 -528
- package/.docs/raw/docs/integrations/auth/better-auth.mdx +0 -188
- package/.docs/raw/docs/integrations/auth/clerk.mdx +0 -166
- package/.docs/raw/docs/integrations/auth/next-auth.mdx +0 -191
- package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +0 -88
- package/.docs/raw/docs/integrations/frameworks/cloudflare-agents.mdx +0 -283
- package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +0 -188
- package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +0 -57
- package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +0 -201
- package/.docs/raw/docs/integrations/gateways/index.mdx +0 -162
- package/.docs/raw/docs/integrations/index.mdx +0 -178
- package/.docs/raw/docs/integrations/observability/helicone.mdx +0 -129
- package/.docs/raw/docs/integrations/observability/langfuse.mdx +0 -161
- package/.docs/raw/docs/integrations/observability/langsmith.mdx +0 -151
- package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +0 -773
- package/.docs/raw/docs/migrations/deprecation-policy.mdx +0 -42
- package/.docs/raw/docs/migrations/index.mdx +0 -50
- package/.docs/raw/docs/migrations/react-compatibility.mdx +0 -74
- package/.docs/raw/docs/migrations/react-langgraph-v0-7.mdx +0 -328
- package/.docs/raw/docs/migrations/toolkit-tools.mdx +0 -236
- package/.docs/raw/docs/migrations/v0-11.mdx +0 -172
- package/.docs/raw/docs/migrations/v0-12.mdx +0 -302
- package/.docs/raw/docs/migrations/v0-14.mdx +0 -297
- package/.docs/raw/docs/migrations/v0-15.mdx +0 -270
- package/.docs/raw/docs/primitives/action-bar.mdx +0 -352
- package/.docs/raw/docs/primitives/assistant-modal.mdx +0 -216
- package/.docs/raw/docs/primitives/attachment.mdx +0 -217
- package/.docs/raw/docs/primitives/branch-picker.mdx +0 -222
- package/.docs/raw/docs/primitives/chain-of-thought.mdx +0 -315
- package/.docs/raw/docs/primitives/composer.mdx +0 -659
- package/.docs/raw/docs/primitives/error.mdx +0 -142
- package/.docs/raw/docs/primitives/index.mdx +0 -99
- package/.docs/raw/docs/primitives/message.mdx +0 -618
- package/.docs/raw/docs/primitives/selection-toolbar.mdx +0 -191
- package/.docs/raw/docs/primitives/suggestion.mdx +0 -254
- package/.docs/raw/docs/primitives/thread-list.mdx +0 -467
- package/.docs/raw/docs/primitives/thread.mdx +0 -509
- package/.docs/raw/docs/react-native/adapters.mdx +0 -94
- package/.docs/raw/docs/react-native/custom-backend.mdx +0 -207
- package/.docs/raw/docs/react-native/hooks.mdx +0 -339
- package/.docs/raw/docs/react-native/index.mdx +0 -289
- package/.docs/raw/docs/react-native/migration.mdx +0 -142
- package/.docs/raw/docs/react-native/primitives.mdx +0 -976
- package/.docs/raw/docs/runtimes/a2a/client-and-hooks.mdx +0 -399
- package/.docs/raw/docs/runtimes/a2a/overview.mdx +0 -60
- package/.docs/raw/docs/runtimes/a2a/quickstart.mdx +0 -216
- package/.docs/raw/docs/runtimes/ag-ui/agent-state.mdx +0 -124
- package/.docs/raw/docs/runtimes/ag-ui/overview.mdx +0 -70
- package/.docs/raw/docs/runtimes/ag-ui/quickstart.mdx +0 -243
- package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +0 -267
- package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +0 -61
- package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +0 -122
- package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +0 -135
- package/.docs/raw/docs/runtimes/ai-sdk/v6-legacy.mdx +0 -636
- package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +0 -731
- package/.docs/raw/docs/runtimes/claude-managed-agents.mdx +0 -118
- package/.docs/raw/docs/runtimes/concepts/adapters.mdx +0 -265
- package/.docs/raw/docs/runtimes/concepts/architecture.mdx +0 -167
- package/.docs/raw/docs/runtimes/concepts/stability.mdx +0 -68
- package/.docs/raw/docs/runtimes/concepts/threads.mdx +0 -513
- package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +0 -763
- package/.docs/raw/docs/runtimes/custom/data-stream.mdx +0 -339
- package/.docs/raw/docs/runtimes/custom/external-store.mdx +0 -957
- package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +0 -902
- package/.docs/raw/docs/runtimes/custom/overview.mdx +0 -71
- package/.docs/raw/docs/runtimes/eve/overview.mdx +0 -151
- package/.docs/raw/docs/runtimes/eve/quickstart.mdx +0 -192
- package/.docs/raw/docs/runtimes/google-adk/api.mdx +0 -256
- package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +0 -784
- package/.docs/raw/docs/runtimes/google-adk/overview.mdx +0 -69
- package/.docs/raw/docs/runtimes/google-adk/quickstart.mdx +0 -229
- package/.docs/raw/docs/runtimes/langchain.mdx +0 -901
- package/.docs/raw/docs/runtimes/langgraph/agent-state.mdx +0 -181
- package/.docs/raw/docs/runtimes/langgraph/generative-ui.mdx +0 -305
- package/.docs/raw/docs/runtimes/langgraph/interrupts.mdx +0 -104
- package/.docs/raw/docs/runtimes/langgraph/overview.mdx +0 -84
- package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +0 -496
- package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +0 -144
- package/.docs/raw/docs/runtimes/langgraph/threads.mdx +0 -113
- package/.docs/raw/docs/runtimes/langgraph/tutorial/introduction.mdx +0 -29
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +0 -93
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +0 -347
- package/.docs/raw/docs/runtimes/langgraph/tutorial/part-3.mdx +0 -393
- package/.docs/raw/docs/runtimes/opencode/hooks.mdx +0 -194
- package/.docs/raw/docs/runtimes/opencode/overview.mdx +0 -58
- package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +0 -119
- package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +0 -133
- package/.docs/raw/docs/tools/a2ui.mdx +0 -107
- package/.docs/raw/docs/tools/backend.mdx +0 -147
- package/.docs/raw/docs/tools/defining-tools.mdx +0 -574
- package/.docs/raw/docs/tools/dynamic-tools.mdx +0 -112
- package/.docs/raw/docs/tools/generative-ui-primitive.mdx +0 -180
- package/.docs/raw/docs/tools/generative-ui-slack.mdx +0 -167
- package/.docs/raw/docs/tools/generative-ui-teams.mdx +0 -160
- package/.docs/raw/docs/tools/generative-ui.mdx +0 -322
- package/.docs/raw/docs/tools/index.mdx +0 -72
- package/.docs/raw/docs/tools/interactables.mdx +0 -1084
- package/.docs/raw/docs/tools/mcp-apps.mdx +0 -363
- package/.docs/raw/docs/tools/mcp.mdx +0 -466
- package/.docs/raw/docs/tools/multi-agent.mdx +0 -237
- package/.docs/raw/docs/tools/openui.mdx +0 -175
- package/.docs/raw/docs/tools/tool-ui.mdx +0 -1020
- package/.docs/raw/docs/tools/user-managed-mcp.mdx +0 -428
- package/.docs/raw/docs/ui/assistant-modal.mdx +0 -166
- package/.docs/raw/docs/ui/assistant-sidebar.mdx +0 -89
- package/.docs/raw/docs/ui/attachment.mdx +0 -279
- package/.docs/raw/docs/ui/composer-trigger-popover.mdx +0 -247
- package/.docs/raw/docs/ui/context-display.mdx +0 -148
- package/.docs/raw/docs/ui/directive-text.mdx +0 -114
- package/.docs/raw/docs/ui/file.mdx +0 -159
- package/.docs/raw/docs/ui/follow-up-suggestions.mdx +0 -82
- package/.docs/raw/docs/ui/image.mdx +0 -102
- package/.docs/raw/docs/ui/markdown.mdx +0 -103
- package/.docs/raw/docs/ui/mcp-config.mdx +0 -107
- package/.docs/raw/docs/ui/mermaid.mdx +0 -92
- package/.docs/raw/docs/ui/message-timing.mdx +0 -93
- package/.docs/raw/docs/ui/model-selector.mdx +0 -455
- package/.docs/raw/docs/ui/part-grouping.mdx +0 -614
- package/.docs/raw/docs/ui/quote.mdx +0 -211
- package/.docs/raw/docs/ui/reasoning.mdx +0 -214
- package/.docs/raw/docs/ui/scrollbar.mdx +0 -77
- package/.docs/raw/docs/ui/sources.mdx +0 -186
- package/.docs/raw/docs/ui/streamdown.mdx +0 -392
- package/.docs/raw/docs/ui/syntax-highlighting.mdx +0 -205
- package/.docs/raw/docs/ui/thread-list.mdx +0 -411
- package/.docs/raw/docs/ui/thread.mdx +0 -559
- package/.docs/raw/docs/ui/tool-fallback.mdx +0 -141
- package/.docs/raw/docs/ui/tool-group.mdx +0 -240
- package/.docs/raw/docs/ui/voice.mdx +0 -173
- package/.docs/raw/docs/utilities/heat-graph.mdx +0 -237
- package/.docs/raw/docs/utilities/react-o11y.mdx +0 -362
- package/.docs/raw/docs/utilities/tw-shimmer.mdx +0 -212
- package/dist/constants.d.ts +0 -14
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js +0 -19
- package/dist/constants.js.map +0 -1
- package/dist/prepare-docs/code-examples.d.ts +0 -5
- package/dist/prepare-docs/code-examples.d.ts.map +0 -1
- package/dist/prepare-docs/code-examples.js +0 -117
- package/dist/prepare-docs/code-examples.js.map +0 -1
- package/dist/prepare-docs/copy-raw.d.ts +0 -5
- package/dist/prepare-docs/copy-raw.d.ts.map +0 -1
- package/dist/prepare-docs/copy-raw.js +0 -49
- package/dist/prepare-docs/copy-raw.js.map +0 -1
- package/dist/prepare-docs/prepare.d.ts +0 -1
- package/dist/prepare-docs/prepare.js +0 -22
- package/dist/prepare-docs/prepare.js.map +0 -1
- package/dist/prompts/xulux-playground.d.ts +0 -12
- package/dist/prompts/xulux-playground.d.ts.map +0 -1
- package/dist/prompts/xulux-playground.js +0 -33
- package/dist/prompts/xulux-playground.js.map +0 -1
- package/dist/tools/docs.d.ts +0 -22
- package/dist/tools/docs.d.ts.map +0 -1
- package/dist/tools/docs.js +0 -177
- package/dist/tools/docs.js.map +0 -1
- package/dist/tools/examples.d.ts +0 -24
- package/dist/tools/examples.d.ts.map +0 -1
- package/dist/tools/examples.js +0 -87
- package/dist/tools/examples.js.map +0 -1
- package/dist/tools/resources.d.ts +0 -6
- package/dist/tools/resources.d.ts.map +0 -1
- package/dist/tools/resources.js +0 -75
- package/dist/tools/resources.js.map +0 -1
- package/dist/tools/search.d.ts +0 -24
- package/dist/tools/search.d.ts.map +0 -1
- package/dist/tools/search.js +0 -39
- package/dist/tools/search.js.map +0 -1
- package/dist/tools/tests/mcp-test-client.d.ts +0 -15
- package/dist/tools/tests/mcp-test-client.d.ts.map +0 -1
- package/dist/tools/tests/mcp-test-client.js +0 -68
- package/dist/tools/tests/mcp-test-client.js.map +0 -1
- package/dist/tools/tests/test-setup.d.ts +0 -7
- package/dist/tools/tests/test-setup.d.ts.map +0 -1
- package/dist/tools/tests/test-setup.js +0 -36
- package/dist/tools/tests/test-setup.js.map +0 -1
- package/dist/tools/xulux-templates.d.ts +0 -58
- package/dist/tools/xulux-templates.d.ts.map +0 -1
- package/dist/tools/xulux-templates.js +0 -84
- package/dist/tools/xulux-templates.js.map +0 -1
- package/dist/utils/cache.d.ts +0 -5
- package/dist/utils/cache.d.ts.map +0 -1
- package/dist/utils/cache.js +0 -18
- package/dist/utils/cache.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -10
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -20
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/mcp-format.d.ts +0 -11
- package/dist/utils/mcp-format.d.ts.map +0 -1
- package/dist/utils/mcp-format.js +0 -14
- package/dist/utils/mcp-format.js.map +0 -1
- package/dist/utils/mdx.d.ts +0 -12
- package/dist/utils/mdx.d.ts.map +0 -1
- package/dist/utils/mdx.js +0 -45
- package/dist/utils/mdx.js.map +0 -1
- package/dist/utils/paths.d.ts +0 -12
- package/dist/utils/paths.d.ts.map +0 -1
- package/dist/utils/paths.js +0 -93
- package/dist/utils/paths.js.map +0 -1
- package/dist/utils/search.d.ts +0 -10
- package/dist/utils/search.d.ts.map +0 -1
- package/dist/utils/search.js +0 -97
- package/dist/utils/search.js.map +0 -1
- package/dist/utils/security.d.ts +0 -5
- package/dist/utils/security.d.ts.map +0 -1
- package/dist/utils/security.js +0 -22
- package/dist/utils/security.js.map +0 -1
- package/dist/xulux/catalog-client.d.ts +0 -14
- package/dist/xulux/catalog-client.d.ts.map +0 -1
- package/dist/xulux/catalog-client.js +0 -112
- package/dist/xulux/catalog-client.js.map +0 -1
- package/dist/xulux/fallback-catalog.d.ts +0 -7
- package/dist/xulux/fallback-catalog.d.ts.map +0 -1
- package/dist/xulux/fallback-catalog.js +0 -47
- package/dist/xulux/fallback-catalog.js.map +0 -1
- package/dist/xulux/fetch-sandbox.d.ts +0 -5
- package/dist/xulux/fetch-sandbox.d.ts.map +0 -1
- package/dist/xulux/fetch-sandbox.js +0 -40
- package/dist/xulux/fetch-sandbox.js.map +0 -1
- package/dist/xulux/template-service.d.ts +0 -84
- package/dist/xulux/template-service.d.ts.map +0 -1
- package/dist/xulux/template-service.js +0 -223
- package/dist/xulux/template-service.js.map +0 -1
- package/dist/xulux/types.d.ts +0 -55
- package/dist/xulux/types.d.ts.map +0 -1
- package/dist/xulux/types.js +0 -6
- package/dist/xulux/types.js.map +0 -1
- package/src/constants.ts +0 -24
- package/src/prepare-docs/code-examples.ts +0 -158
- package/src/prepare-docs/copy-raw.ts +0 -50
- package/src/prepare-docs/prepare.ts +0 -24
- package/src/prompts/xulux-playground.ts +0 -36
- package/src/tools/docs.ts +0 -255
- package/src/tools/examples.ts +0 -114
- package/src/tools/resources.ts +0 -111
- package/src/tools/search.ts +0 -46
- package/src/tools/tests/completions.test.ts +0 -60
- package/src/tools/tests/directory-size-cap.test.ts +0 -50
- package/src/tools/tests/docs.test.ts +0 -147
- package/src/tools/tests/examples.test.ts +0 -94
- package/src/tools/tests/integration.test.ts +0 -45
- package/src/tools/tests/json-parsing.test.ts +0 -23
- package/src/tools/tests/listings-cache.test.ts +0 -19
- package/src/tools/tests/mcp-protocol.test.ts +0 -216
- package/src/tools/tests/mcp-test-client.ts +0 -111
- package/src/tools/tests/path-traversal.test.ts +0 -84
- package/src/tools/tests/resources.test.ts +0 -133
- package/src/tools/tests/search.test.ts +0 -37
- package/src/tools/tests/test-setup.ts +0 -50
- package/src/tools/tests/xulux-templates.test.ts +0 -325
- package/src/tools/xulux-templates.ts +0 -141
- package/src/utils/cache.ts +0 -20
- package/src/utils/logger.ts +0 -20
- package/src/utils/mcp-format.ts +0 -14
- package/src/utils/mdx.ts +0 -59
- package/src/utils/paths.ts +0 -139
- package/src/utils/search.ts +0 -131
- package/src/utils/security.ts +0 -52
- package/src/utils/tests/cache.test.ts +0 -51
- package/src/utils/tests/mcp-format.test.ts +0 -22
- package/src/utils/tests/security.test.ts +0 -119
- package/src/xulux/catalog-client.ts +0 -150
- package/src/xulux/fallback-catalog.ts +0 -63
- package/src/xulux/fetch-sandbox.ts +0 -56
- package/src/xulux/template-service.ts +0 -406
- package/src/xulux/types.ts +0 -64
|
@@ -1,604 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: AI SDK
|
|
3
|
-
description: Add cloud persistence to your existing AI SDK app with a single hook.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## Overview
|
|
7
|
-
|
|
8
|
-
The `@assistant-ui/cloud-ai-sdk` package provides a single hook that adds full message and thread persistence to any [AI SDK](https://sdk.vercel.ai/) application:
|
|
9
|
-
|
|
10
|
-
- **`useCloudChat`** — wraps `useChat` with automatic cloud persistence and built-in thread management
|
|
11
|
-
|
|
12
|
-
This hook works with any React UI. You keep full control of your components.
|
|
13
|
-
|
|
14
|
-
<Callout type="tip">
|
|
15
|
-
See [AI SDK + assistant-ui](/docs/cloud/ai-sdk-assistant-ui) for the full integration with assistant-ui's primitives and runtime.
|
|
16
|
-
</Callout>
|
|
17
|
-
|
|
18
|
-
## Prerequisites
|
|
19
|
-
|
|
20
|
-
<Callout type="info">
|
|
21
|
-
You need an assistant-cloud account to follow this guide. [Sign up here](https://cloud.assistant-ui.com/) to get started.
|
|
22
|
-
</Callout>
|
|
23
|
-
|
|
24
|
-
## Setup
|
|
25
|
-
|
|
26
|
-
<Steps>
|
|
27
|
-
|
|
28
|
-
<Step>
|
|
29
|
-
|
|
30
|
-
### Create a Cloud Project
|
|
31
|
-
|
|
32
|
-
Create a new project in the [assistant-cloud dashboard](https://cloud.assistant-ui.com/) and from the settings page, copy your **Frontend API URL** (`https://proj-[ID].assistant-api.com`).
|
|
33
|
-
|
|
34
|
-
</Step>
|
|
35
|
-
|
|
36
|
-
<Step>
|
|
37
|
-
|
|
38
|
-
### Configure Environment Variables
|
|
39
|
-
|
|
40
|
-
<PlatformTabs>
|
|
41
|
-
<Tab value="React">
|
|
42
|
-
|
|
43
|
-
```bash title=".env.local"
|
|
44
|
-
NEXT_PUBLIC_ASSISTANT_BASE_URL=https://proj-[YOUR-ID].assistant-api.com
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
</Tab>
|
|
48
|
-
<Tab value="React Native">
|
|
49
|
-
|
|
50
|
-
```bash title=".env"
|
|
51
|
-
EXPO_PUBLIC_ASSISTANT_BASE_URL=https://proj-[YOUR-ID].assistant-api.com
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
</Tab>
|
|
55
|
-
<Tab value="React Ink">
|
|
56
|
-
|
|
57
|
-
```bash title=".env"
|
|
58
|
-
ASSISTANT_BASE_URL=https://proj-[YOUR-ID].assistant-api.com
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
</Tab>
|
|
62
|
-
</PlatformTabs>
|
|
63
|
-
|
|
64
|
-
</Step>
|
|
65
|
-
|
|
66
|
-
<Step>
|
|
67
|
-
|
|
68
|
-
### Install Dependencies
|
|
69
|
-
|
|
70
|
-
<PlatformTabs>
|
|
71
|
-
<Tab value="React">
|
|
72
|
-
|
|
73
|
-
<InstallCommand npm={["@assistant-ui/cloud-ai-sdk", "@ai-sdk/react", "ai"]} />
|
|
74
|
-
|
|
75
|
-
</Tab>
|
|
76
|
-
<Tab value="React Native">
|
|
77
|
-
|
|
78
|
-
<InstallCommand expo={["@assistant-ui/cloud-ai-sdk", "@ai-sdk/react", "ai", "assistant-cloud"]} />
|
|
79
|
-
|
|
80
|
-
</Tab>
|
|
81
|
-
<Tab value="React Ink">
|
|
82
|
-
|
|
83
|
-
<InstallCommand npm={["@assistant-ui/cloud-ai-sdk", "@ai-sdk/react", "ai", "assistant-cloud", "ink", "react"]} />
|
|
84
|
-
|
|
85
|
-
</Tab>
|
|
86
|
-
</PlatformTabs>
|
|
87
|
-
|
|
88
|
-
</Step>
|
|
89
|
-
|
|
90
|
-
<Step>
|
|
91
|
-
|
|
92
|
-
### Integrate
|
|
93
|
-
|
|
94
|
-
<PlatformTabs>
|
|
95
|
-
<Tab value="React">
|
|
96
|
-
|
|
97
|
-
```tsx title="app/page.tsx"
|
|
98
|
-
"use client";
|
|
99
|
-
|
|
100
|
-
import { useState } from "react";
|
|
101
|
-
import { useCloudChat } from "@assistant-ui/cloud-ai-sdk";
|
|
102
|
-
|
|
103
|
-
export default function Chat() {
|
|
104
|
-
// Zero-config: auto-initializes anonymous cloud from env var with built-in threads.
|
|
105
|
-
// For custom config, pass: { cloud, threads: useThreads(...), onSyncError }
|
|
106
|
-
const { messages, sendMessage, threads } = useCloudChat();
|
|
107
|
-
|
|
108
|
-
const [input, setInput] = useState("");
|
|
109
|
-
const handleSubmit = () => {
|
|
110
|
-
if (!input.trim()) return;
|
|
111
|
-
sendMessage({ text: input });
|
|
112
|
-
setInput("");
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
return (
|
|
116
|
-
<div>
|
|
117
|
-
{/* Thread list */}
|
|
118
|
-
<ul>
|
|
119
|
-
{threads.threads.map((t) => (
|
|
120
|
-
<li key={t.id} onClick={() => threads.selectThread(t.id)}>
|
|
121
|
-
{t.title || "New conversation"}
|
|
122
|
-
</li>
|
|
123
|
-
))}
|
|
124
|
-
<li onClick={() => threads.selectThread(null)}>New chat</li>
|
|
125
|
-
</ul>
|
|
126
|
-
|
|
127
|
-
{/* Chat messages */}
|
|
128
|
-
<div>
|
|
129
|
-
{messages.map((m) => (
|
|
130
|
-
<div key={m.id}>
|
|
131
|
-
{m.parts.map((p) => p.type === "text" && p.text)}
|
|
132
|
-
</div>
|
|
133
|
-
))}
|
|
134
|
-
</div>
|
|
135
|
-
|
|
136
|
-
{/* Composer */}
|
|
137
|
-
<form onSubmit={(e) => { e.preventDefault(); handleSubmit(); }}>
|
|
138
|
-
<input value={input} onChange={(e) => setInput(e.target.value)} />
|
|
139
|
-
<button type="submit">Send</button>
|
|
140
|
-
</form>
|
|
141
|
-
</div>
|
|
142
|
-
);
|
|
143
|
-
}
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
</Tab>
|
|
147
|
-
<Tab value="React Native">
|
|
148
|
-
|
|
149
|
-
```tsx title="app/index.tsx"
|
|
150
|
-
import { useMemo, useState } from "react";
|
|
151
|
-
import { Pressable, Text, TextInput, View } from "react-native";
|
|
152
|
-
import { AssistantCloud } from "assistant-cloud";
|
|
153
|
-
import { useCloudChat } from "@assistant-ui/cloud-ai-sdk";
|
|
154
|
-
|
|
155
|
-
async function getAssistantToken() {
|
|
156
|
-
// Return a user token from your auth provider.
|
|
157
|
-
return "...";
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
export default function Chat() {
|
|
161
|
-
const cloud = useMemo(
|
|
162
|
-
() =>
|
|
163
|
-
new AssistantCloud({
|
|
164
|
-
baseUrl: process.env.EXPO_PUBLIC_ASSISTANT_BASE_URL!,
|
|
165
|
-
authToken: getAssistantToken,
|
|
166
|
-
}),
|
|
167
|
-
[],
|
|
168
|
-
);
|
|
169
|
-
const { messages, sendMessage, threads } = useCloudChat({ cloud });
|
|
170
|
-
|
|
171
|
-
const [input, setInput] = useState("");
|
|
172
|
-
const handleSubmit = () => {
|
|
173
|
-
if (!input.trim()) return;
|
|
174
|
-
sendMessage({ text: input });
|
|
175
|
-
setInput("");
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
return (
|
|
179
|
-
<View>
|
|
180
|
-
<View>
|
|
181
|
-
{threads.threads.map((t) => (
|
|
182
|
-
<Pressable key={t.id} onPress={() => threads.selectThread(t.id)}>
|
|
183
|
-
<Text>{t.title || "New conversation"}</Text>
|
|
184
|
-
</Pressable>
|
|
185
|
-
))}
|
|
186
|
-
<Pressable onPress={() => threads.selectThread(null)}>
|
|
187
|
-
<Text>New chat</Text>
|
|
188
|
-
</Pressable>
|
|
189
|
-
</View>
|
|
190
|
-
|
|
191
|
-
<View>
|
|
192
|
-
{messages.map((m) => (
|
|
193
|
-
<Text key={m.id}>
|
|
194
|
-
{m.parts.map((p) => p.type === "text" && p.text)}
|
|
195
|
-
</Text>
|
|
196
|
-
))}
|
|
197
|
-
</View>
|
|
198
|
-
|
|
199
|
-
<TextInput value={input} onChangeText={setInput} />
|
|
200
|
-
<Pressable onPress={handleSubmit}>
|
|
201
|
-
<Text>Send</Text>
|
|
202
|
-
</Pressable>
|
|
203
|
-
</View>
|
|
204
|
-
);
|
|
205
|
-
}
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
</Tab>
|
|
209
|
-
<Tab value="React Ink">
|
|
210
|
-
|
|
211
|
-
```tsx title="app.tsx"
|
|
212
|
-
import { useMemo, useState } from "react";
|
|
213
|
-
import { Box, Text, useInput } from "ink";
|
|
214
|
-
import { AssistantCloud } from "assistant-cloud";
|
|
215
|
-
import { useCloudChat } from "@assistant-ui/cloud-ai-sdk";
|
|
216
|
-
|
|
217
|
-
async function getAssistantToken() {
|
|
218
|
-
// Return a user token from your auth provider.
|
|
219
|
-
return "...";
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
export function Chat() {
|
|
223
|
-
const cloud = useMemo(
|
|
224
|
-
() =>
|
|
225
|
-
new AssistantCloud({
|
|
226
|
-
baseUrl: process.env.ASSISTANT_BASE_URL!,
|
|
227
|
-
authToken: getAssistantToken,
|
|
228
|
-
}),
|
|
229
|
-
[],
|
|
230
|
-
);
|
|
231
|
-
const { messages, sendMessage, threads } = useCloudChat({ cloud });
|
|
232
|
-
|
|
233
|
-
const [input, setInput] = useState("");
|
|
234
|
-
const handleSubmit = () => {
|
|
235
|
-
if (!input.trim()) return;
|
|
236
|
-
sendMessage({ text: input });
|
|
237
|
-
setInput("");
|
|
238
|
-
};
|
|
239
|
-
|
|
240
|
-
useInput((value, key) => {
|
|
241
|
-
if (key.return) handleSubmit();
|
|
242
|
-
else if (key.tab) threads.selectThread(null);
|
|
243
|
-
else if (key.backspace || key.delete) setInput((text) => text.slice(0, -1));
|
|
244
|
-
else if (value) setInput((text) => text + value);
|
|
245
|
-
});
|
|
246
|
-
|
|
247
|
-
return (
|
|
248
|
-
<Box flexDirection="column">
|
|
249
|
-
<Text bold>Threads</Text>
|
|
250
|
-
{threads.threads.map((t) => (
|
|
251
|
-
<Text key={t.id}>{t.title || "New conversation"}</Text>
|
|
252
|
-
))}
|
|
253
|
-
<Text dimColor>Press tab for a new chat.</Text>
|
|
254
|
-
|
|
255
|
-
{messages.map((m) => (
|
|
256
|
-
<Text key={m.id}>
|
|
257
|
-
{m.parts.map((p) => p.type === "text" && p.text)}
|
|
258
|
-
</Text>
|
|
259
|
-
))}
|
|
260
|
-
|
|
261
|
-
<Text>{"> "}{input}</Text>
|
|
262
|
-
<Text dimColor>Press enter to send.</Text>
|
|
263
|
-
</Box>
|
|
264
|
-
);
|
|
265
|
-
}
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
</Tab>
|
|
269
|
-
</PlatformTabs>
|
|
270
|
-
|
|
271
|
-
</Step>
|
|
272
|
-
|
|
273
|
-
</Steps>
|
|
274
|
-
|
|
275
|
-
That's it. Messages persist automatically as they complete, and switching threads loads the full history.
|
|
276
|
-
|
|
277
|
-
## API Reference
|
|
278
|
-
|
|
279
|
-
### `useCloudChat(options?)`
|
|
280
|
-
|
|
281
|
-
Wraps AI SDK's `useChat` with automatic cloud persistence and built-in thread management. Messages are persisted as they finish streaming. Thread creation is automatic on the first message — the hook will auto-create the thread, select it, refresh the thread list, and generate a title after the first response.
|
|
282
|
-
|
|
283
|
-
#### Configuration Modes
|
|
284
|
-
|
|
285
|
-
**1. Zero-config** — Set `NEXT_PUBLIC_ASSISTANT_BASE_URL` env var, call with no args:
|
|
286
|
-
|
|
287
|
-
```tsx
|
|
288
|
-
const chat = useCloudChat();
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
**2. Custom cloud instance** — For authenticated users or custom configuration:
|
|
292
|
-
|
|
293
|
-
```tsx
|
|
294
|
-
const cloud = new AssistantCloud({ baseUrl, authToken });
|
|
295
|
-
const chat = useCloudChat({ cloud });
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
**3. External thread management** — When threads need to be accessed from a separate component or you need custom thread options like `includeArchived`:
|
|
299
|
-
|
|
300
|
-
```tsx
|
|
301
|
-
// In a context provider or parent component
|
|
302
|
-
const myThreads = useThreads({ cloud, includeArchived: true });
|
|
303
|
-
|
|
304
|
-
// Pass to useCloudChat - it will use your thread state
|
|
305
|
-
const chat = useCloudChat({ threads: myThreads });
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
#### Parameters
|
|
309
|
-
|
|
310
|
-
| Parameter | Type | Description |
|
|
311
|
-
|-----------|------|-------------|
|
|
312
|
-
| `options.cloud` | `AssistantCloud` | Cloud instance (optional — auto-creates anonymous instance from `NEXT_PUBLIC_ASSISTANT_BASE_URL` env var if not provided) |
|
|
313
|
-
| `options.threads` | `UseThreadsResult` | External thread management from `useThreads()`. Use when you need thread operations in a separate component or custom thread options like `includeArchived` |
|
|
314
|
-
| `options.onSyncError` | `(error: Error) => void` | Callback invoked when a sync error occurs |
|
|
315
|
-
|
|
316
|
-
A subset of [AI SDK `useChat` options](https://sdk.vercel.ai/docs/reference/ai-sdk-ui/use-chat) are also accepted (those defined on `ChatInit`). Some options available on `useChat` such as `experimental_throttle` and `resume` are not supported.
|
|
317
|
-
|
|
318
|
-
**Returns:** `UseCloudChatResult`
|
|
319
|
-
|
|
320
|
-
| Value | Type | Description |
|
|
321
|
-
|-------|------|-------------|
|
|
322
|
-
| `messages` | `UIMessage[]` | Chat messages (from AI SDK) |
|
|
323
|
-
| `status` | `string` | Chat status: `"ready"`, `"submitted"`, `"streaming"`, or `"error"` |
|
|
324
|
-
| `sendMessage` | `(message, options?) => Promise<void>` | Send a message (auto-creates thread if needed) |
|
|
325
|
-
| `stop` | `() => void` | Stop the current stream |
|
|
326
|
-
| `threads` | `UseThreadsResult` | Thread management (see below) |
|
|
327
|
-
|
|
328
|
-
Plus all other properties from AI SDK's [`UseChatHelpers`](https://sdk.vercel.ai/docs/reference/ai-sdk-ui/use-chat).
|
|
329
|
-
|
|
330
|
-
**Thread management (`threads`):**
|
|
331
|
-
|
|
332
|
-
| Value | Type | Description |
|
|
333
|
-
|-------|------|-------------|
|
|
334
|
-
| `threads.cloud` | `AssistantCloud` | The cloud instance used for thread operations |
|
|
335
|
-
| `threads.threads` | `CloudThread[]` | Threads sorted by recency; includes archived threads when supplied by `useThreads({ includeArchived: true })` |
|
|
336
|
-
| `threads.threadId` | `string \| null` | Current thread ID (`null` for a new unsaved chat) |
|
|
337
|
-
| `threads.selectThread` | `(id: string \| null) => void` | Switch threads or pass `null` for a new chat |
|
|
338
|
-
| `threads.isLoading` | `boolean` | `true` during initial load or refresh |
|
|
339
|
-
| `threads.error` | `Error \| null` | Last error, if any |
|
|
340
|
-
| `threads.refresh` | `() => Promise<boolean>` | Re-fetch the thread list |
|
|
341
|
-
| `threads.get` | `(id: string) => Promise<CloudThread \| null>` | Fetch a single thread by ID |
|
|
342
|
-
| `threads.create` | `(options?: \{ externalId?: string \}) => Promise<CloudThread \| null>` | Create a new thread |
|
|
343
|
-
| `threads.delete` | `(id: string) => Promise<boolean>` | Delete a thread |
|
|
344
|
-
| `threads.rename` | `(id: string, title: string) => Promise<boolean>` | Rename a thread |
|
|
345
|
-
| `threads.archive` | `(id: string) => Promise<boolean>` | Archive a thread |
|
|
346
|
-
| `threads.unarchive` | `(id: string) => Promise<boolean>` | Unarchive a thread |
|
|
347
|
-
| `threads.generateTitle` | `(threadId: string) => Promise<string \| null>` | Generate a title using AI |
|
|
348
|
-
|
|
349
|
-
### `useThreads(options)`
|
|
350
|
-
|
|
351
|
-
Thread list management for use with `useCloudChat`. Call this explicitly and pass to `useCloudChat({ threads })` when you need access to thread operations outside the chat context (e.g., in a separate sidebar component).
|
|
352
|
-
|
|
353
|
-
```tsx
|
|
354
|
-
const myThreads = useThreads({ cloud: myCloud });
|
|
355
|
-
const { messages, sendMessage } = useCloudChat({ threads: myThreads });
|
|
356
|
-
```
|
|
357
|
-
|
|
358
|
-
`useThreads` requests 20 threads per page and follows Cloud cursors until all matching threads are loaded. With `includeArchived`, active and archived pages load concurrently and the complete list is committed after both finish.
|
|
359
|
-
|
|
360
|
-
**Parameters:**
|
|
361
|
-
|
|
362
|
-
| Parameter | Type | Description |
|
|
363
|
-
|-----------|------|-------------|
|
|
364
|
-
| `options.cloud` | `AssistantCloud` | Cloud client instance |
|
|
365
|
-
| `options.includeArchived` | `boolean` | Include archived threads (default: `false`) |
|
|
366
|
-
| `options.enabled` | `boolean` | Enable thread fetching (default: `true`) |
|
|
367
|
-
|
|
368
|
-
**Returns:** `UseThreadsResult` — same shape as `threads` from `useCloudChat()`.
|
|
369
|
-
|
|
370
|
-
## Telemetry
|
|
371
|
-
|
|
372
|
-
The `useCloudChat` hook automatically reports run telemetry to Assistant Cloud after each assistant response. This includes:
|
|
373
|
-
|
|
374
|
-
**Automatically captured:**
|
|
375
|
-
- `status` — `"completed"` or `"incomplete"` based on response content
|
|
376
|
-
- `tool_calls` — Tool invocations with name, arguments, and results. MCP tool calls are explicitly tagged with `tool_source: "mcp"`
|
|
377
|
-
- `total_steps` — Number of reasoning/tool steps in the response
|
|
378
|
-
- `output_text` — Full response text (truncated at 50K characters)
|
|
379
|
-
|
|
380
|
-
**Requires route configuration:**
|
|
381
|
-
- `model_id` — The model used for the response
|
|
382
|
-
- `input_tokens` / `output_tokens` — Token usage statistics
|
|
383
|
-
- `reasoning_tokens` — Tokens used for chain-of-thought reasoning (e.g. GPT-5.6 Luna or other reasoning models)
|
|
384
|
-
- `cached_input_tokens` — Input tokens served from the provider's prompt cache
|
|
385
|
-
|
|
386
|
-
To capture model and usage data, configure the `messageMetadata` callback in your AI SDK route:
|
|
387
|
-
|
|
388
|
-
```tsx title="app/api/chat/route.ts"
|
|
389
|
-
import { streamText } from "ai";
|
|
390
|
-
import { openai } from "@ai-sdk/openai";
|
|
391
|
-
|
|
392
|
-
export async function POST(req: Request) {
|
|
393
|
-
const { messages } = await req.json();
|
|
394
|
-
|
|
395
|
-
const result = streamText({
|
|
396
|
-
model: openai("gpt-5.6-luna"),
|
|
397
|
-
messages,
|
|
398
|
-
});
|
|
399
|
-
|
|
400
|
-
return result.toUIMessageStreamResponse({
|
|
401
|
-
messageMetadata: ({ part }) => {
|
|
402
|
-
if (part.type === "finish") {
|
|
403
|
-
return {
|
|
404
|
-
usage: part.totalUsage,
|
|
405
|
-
};
|
|
406
|
-
}
|
|
407
|
-
if (part.type === "finish-step") {
|
|
408
|
-
return {
|
|
409
|
-
modelId: part.response.modelId,
|
|
410
|
-
};
|
|
411
|
-
}
|
|
412
|
-
return undefined;
|
|
413
|
-
},
|
|
414
|
-
});
|
|
415
|
-
}
|
|
416
|
-
```
|
|
417
|
-
|
|
418
|
-
<Callout type="info">
|
|
419
|
-
The standalone hook captures message metadata when it is JSON-serializable, but it does not capture `duration_ms`, per-step breakdowns (`steps`), or `"error"` status. Those require the full runtime integration available via [`useChatRuntime`](/docs/cloud/ai-sdk-assistant-ui).
|
|
420
|
-
</Callout>
|
|
421
|
-
|
|
422
|
-
### Customizing Reports
|
|
423
|
-
|
|
424
|
-
Use the `beforeReport` hook to enrich or filter telemetry:
|
|
425
|
-
|
|
426
|
-
```tsx
|
|
427
|
-
const cloud = new AssistantCloud({
|
|
428
|
-
baseUrl: process.env.NEXT_PUBLIC_ASSISTANT_BASE_URL!,
|
|
429
|
-
anonymous: true,
|
|
430
|
-
telemetry: {
|
|
431
|
-
beforeReport: (report) => ({
|
|
432
|
-
...report,
|
|
433
|
-
metadata: { environment: "production", version: "1.0.0" },
|
|
434
|
-
}),
|
|
435
|
-
},
|
|
436
|
-
});
|
|
437
|
-
```
|
|
438
|
-
|
|
439
|
-
Return `null` from `beforeReport` to skip reporting a specific run. To disable telemetry entirely, pass `telemetry: false`.
|
|
440
|
-
|
|
441
|
-
### Sub-Agent Model Tracking
|
|
442
|
-
|
|
443
|
-
In multi-agent setups where tool calls delegate to a different model (e.g., the main run uses GPT but a tool invokes Gemini), you can track the delegated model's usage by passing sampling call data through `messageMetadata`.
|
|
444
|
-
|
|
445
|
-
**Step 1: Collect sampling data on the server**
|
|
446
|
-
|
|
447
|
-
Use `createSamplingCollector` and `wrapSamplingHandler` from `assistant-cloud` to capture LLM calls made during tool execution:
|
|
448
|
-
|
|
449
|
-
```ts title="app/api/chat/route.ts"
|
|
450
|
-
import { streamText } from "ai";
|
|
451
|
-
import { openai } from "@ai-sdk/openai";
|
|
452
|
-
import {
|
|
453
|
-
createSamplingCollector,
|
|
454
|
-
wrapSamplingHandler,
|
|
455
|
-
} from "assistant-cloud";
|
|
456
|
-
|
|
457
|
-
export async function POST(req: Request) {
|
|
458
|
-
const { messages } = await req.json();
|
|
459
|
-
|
|
460
|
-
// Collect sub-agent sampling calls per tool call
|
|
461
|
-
const samplingCalls: Record<string, SamplingCallData[]> = {};
|
|
462
|
-
|
|
463
|
-
const result = streamText({
|
|
464
|
-
model: openai("gpt-5.6-luna"),
|
|
465
|
-
messages,
|
|
466
|
-
tools: {
|
|
467
|
-
delegate_to_gemini: tool({
|
|
468
|
-
parameters: z.object({ task: z.string() }),
|
|
469
|
-
execute: async ({ task }, { toolCallId }) => {
|
|
470
|
-
const collector = createSamplingCollector();
|
|
471
|
-
// Your sub-agent logic that calls another model
|
|
472
|
-
const result = await runSubAgent(task, {
|
|
473
|
-
onSamplingCall: collector.collect,
|
|
474
|
-
});
|
|
475
|
-
samplingCalls[toolCallId] = collector.getCalls();
|
|
476
|
-
return result;
|
|
477
|
-
},
|
|
478
|
-
}),
|
|
479
|
-
},
|
|
480
|
-
});
|
|
481
|
-
|
|
482
|
-
return result.toUIMessageStreamResponse({
|
|
483
|
-
messageMetadata: ({ part }) => {
|
|
484
|
-
if (part.type === "finish") {
|
|
485
|
-
return {
|
|
486
|
-
usage: part.totalUsage,
|
|
487
|
-
samplingCalls, // attach collected sampling data
|
|
488
|
-
};
|
|
489
|
-
}
|
|
490
|
-
if (part.type === "finish-step") {
|
|
491
|
-
return { modelId: part.response.modelId };
|
|
492
|
-
}
|
|
493
|
-
return undefined;
|
|
494
|
-
},
|
|
495
|
-
});
|
|
496
|
-
}
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
**Step 2: That's it.** The telemetry reporter automatically reads `samplingCalls` from message metadata and attaches the data to matching tool calls in the report. The Cloud dashboard will show each delegated model in the model distribution chart with its own token and cost breakdown.
|
|
500
|
-
|
|
501
|
-
<Callout type="info">
|
|
502
|
-
For MCP tools that use the sampling protocol, `wrapSamplingHandler` can wrap the MCP client's sampling handler directly to capture all nested LLM calls transparently.
|
|
503
|
-
</Callout>
|
|
504
|
-
|
|
505
|
-
<Callout type="tip">
|
|
506
|
-
**On older versions** that don't yet read `samplingCalls` from metadata, use `beforeReport` to inject the data manually:
|
|
507
|
-
|
|
508
|
-
```ts
|
|
509
|
-
telemetry: {
|
|
510
|
-
beforeReport: (report) => ({
|
|
511
|
-
...report,
|
|
512
|
-
tool_calls: report.tool_calls?.map((tc) => ({
|
|
513
|
-
...tc,
|
|
514
|
-
sampling_calls: samplingCalls[tc.tool_call_id],
|
|
515
|
-
})),
|
|
516
|
-
}),
|
|
517
|
-
}
|
|
518
|
-
```
|
|
519
|
-
</Callout>
|
|
520
|
-
|
|
521
|
-
## Authentication
|
|
522
|
-
|
|
523
|
-
The React example above uses anonymous mode for quick demos. For production apps with user accounts, pass an explicit cloud instance with a token from your auth provider:
|
|
524
|
-
|
|
525
|
-
<PlatformTabs>
|
|
526
|
-
<Tab value="React">
|
|
527
|
-
|
|
528
|
-
```tsx
|
|
529
|
-
import { useMemo } from "react";
|
|
530
|
-
import { useAuth } from "@clerk/nextjs";
|
|
531
|
-
import { AssistantCloud } from "assistant-cloud";
|
|
532
|
-
import { useCloudChat } from "@assistant-ui/cloud-ai-sdk";
|
|
533
|
-
|
|
534
|
-
function Chat() {
|
|
535
|
-
const { getToken } = useAuth();
|
|
536
|
-
|
|
537
|
-
const cloud = useMemo(() => new AssistantCloud({
|
|
538
|
-
baseUrl: process.env.NEXT_PUBLIC_ASSISTANT_BASE_URL!,
|
|
539
|
-
authToken: async () => getToken({ template: "assistant-ui" }),
|
|
540
|
-
}), [getToken]);
|
|
541
|
-
|
|
542
|
-
const { messages, sendMessage, threads } = useCloudChat({ cloud });
|
|
543
|
-
// ...
|
|
544
|
-
}
|
|
545
|
-
```
|
|
546
|
-
|
|
547
|
-
</Tab>
|
|
548
|
-
<Tab value="React Native">
|
|
549
|
-
|
|
550
|
-
```tsx
|
|
551
|
-
import { useMemo } from "react";
|
|
552
|
-
import { AssistantCloud } from "assistant-cloud";
|
|
553
|
-
import { useCloudChat } from "@assistant-ui/cloud-ai-sdk";
|
|
554
|
-
|
|
555
|
-
async function getAssistantToken() {
|
|
556
|
-
// Return a user token from your native auth provider.
|
|
557
|
-
return "...";
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
function Chat() {
|
|
561
|
-
const cloud = useMemo(() => new AssistantCloud({
|
|
562
|
-
baseUrl: process.env.EXPO_PUBLIC_ASSISTANT_BASE_URL!,
|
|
563
|
-
authToken: getAssistantToken,
|
|
564
|
-
}), []);
|
|
565
|
-
|
|
566
|
-
const { messages, sendMessage, threads } = useCloudChat({ cloud });
|
|
567
|
-
// ...
|
|
568
|
-
}
|
|
569
|
-
```
|
|
570
|
-
|
|
571
|
-
</Tab>
|
|
572
|
-
<Tab value="React Ink">
|
|
573
|
-
|
|
574
|
-
```tsx
|
|
575
|
-
import { useMemo } from "react";
|
|
576
|
-
import { AssistantCloud } from "assistant-cloud";
|
|
577
|
-
import { useCloudChat } from "@assistant-ui/cloud-ai-sdk";
|
|
578
|
-
|
|
579
|
-
async function getAssistantToken() {
|
|
580
|
-
// Return a user token from your CLI auth flow.
|
|
581
|
-
return "...";
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
function Chat() {
|
|
585
|
-
const cloud = useMemo(() => new AssistantCloud({
|
|
586
|
-
baseUrl: process.env.ASSISTANT_BASE_URL!,
|
|
587
|
-
authToken: getAssistantToken,
|
|
588
|
-
}), []);
|
|
589
|
-
|
|
590
|
-
const { messages, sendMessage, threads } = useCloudChat({ cloud });
|
|
591
|
-
// ...
|
|
592
|
-
}
|
|
593
|
-
```
|
|
594
|
-
|
|
595
|
-
</Tab>
|
|
596
|
-
</PlatformTabs>
|
|
597
|
-
|
|
598
|
-
See the [Cloud Authorization](/docs/cloud/authorization) guide for other auth providers.
|
|
599
|
-
|
|
600
|
-
## Next Steps
|
|
601
|
-
|
|
602
|
-
- If you want pre-built UI components, see [AI SDK + assistant-ui](/docs/cloud/ai-sdk-assistant-ui) for the full integration
|
|
603
|
-
- Learn about [user authentication](/docs/cloud/authorization) for multi-user applications
|
|
604
|
-
- Check out the [complete example](https://github.com/assistant-ui/assistant-ui/tree/main/examples/with-cloud-standalone) on GitHub
|