@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,92 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "Mermaid Diagrams"
|
|
3
|
-
description: Render Mermaid diagrams in chat messages with streaming support.
|
|
4
|
-
platforms: ["react"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
import { MermaidSample } from "@/components/pages/docs/samples/mermaid";
|
|
8
|
-
|
|
9
|
-
<MermaidSample />
|
|
10
|
-
|
|
11
|
-
## Getting Started
|
|
12
|
-
|
|
13
|
-
<Steps>
|
|
14
|
-
<Step>
|
|
15
|
-
|
|
16
|
-
### Add `mermaid-diagram` component
|
|
17
|
-
|
|
18
|
-
<InstallCommand shadcn={["mermaid-diagram"]} />
|
|
19
|
-
|
|
20
|
-
This will install the required dependencies and add the component to your project.
|
|
21
|
-
|
|
22
|
-
</Step>
|
|
23
|
-
<Step>
|
|
24
|
-
|
|
25
|
-
### Add it to `componentsByLanguage` in `markdown-text.tsx`
|
|
26
|
-
|
|
27
|
-
```tsx title="/components/assistant-ui/markdown-text.tsx"
|
|
28
|
-
import { MermaidDiagram } from "@/components/assistant-ui/mermaid-diagram"; // [!code ++]
|
|
29
|
-
|
|
30
|
-
const MarkdownTextImpl = () => {
|
|
31
|
-
return (
|
|
32
|
-
<MarkdownTextPrimitive
|
|
33
|
-
remarkPlugins={[remarkGfm]}
|
|
34
|
-
className="aui-md"
|
|
35
|
-
components={defaultComponents}
|
|
36
|
-
componentsByLanguage={{ // [!code ++]
|
|
37
|
-
mermaid: { // [!code ++]
|
|
38
|
-
SyntaxHighlighter: MermaidDiagram // [!code ++]
|
|
39
|
-
}, // [!code ++]
|
|
40
|
-
}} // [!code ++]
|
|
41
|
-
/>
|
|
42
|
-
);
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
export const MarkdownText = memo(MarkdownTextImpl);
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
</Step>
|
|
49
|
-
</Steps>
|
|
50
|
-
|
|
51
|
-
## Configuration
|
|
52
|
-
|
|
53
|
-
Configure rendering options in `mermaid-diagram.tsx`:
|
|
54
|
-
|
|
55
|
-
```tsx title="/components/assistant-ui/mermaid-diagram.tsx"
|
|
56
|
-
renderMermaidSVG(code, {
|
|
57
|
-
bg: "var(--background)",
|
|
58
|
-
fg: "var(--foreground)",
|
|
59
|
-
muted: "var(--muted-foreground)",
|
|
60
|
-
border: "var(--border)",
|
|
61
|
-
accent: "var(--foreground)",
|
|
62
|
-
transparent: true,
|
|
63
|
-
});
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
The palette follows your theme's background, foreground, and shadcn color tokens, so diagrams match light and dark mode automatically.
|
|
67
|
-
|
|
68
|
-
## Streaming Performance
|
|
69
|
-
|
|
70
|
-
The `MermaidDiagram` component is optimized for streaming scenarios:
|
|
71
|
-
|
|
72
|
-
- **Skeleton while streaming**: Shows a placeholder skeleton until the response finishes streaming, then renders the diagram synchronously
|
|
73
|
-
- **Raw source fallback**: Invalid or unsupported diagrams fall back to displaying the raw source
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
## Supported Diagram Types
|
|
77
|
-
|
|
78
|
-
The component renders these diagram types:
|
|
79
|
-
|
|
80
|
-
- Flowcharts and decision trees
|
|
81
|
-
- Sequence diagrams
|
|
82
|
-
- Class diagrams
|
|
83
|
-
- State diagrams
|
|
84
|
-
- Entity relationship diagrams
|
|
85
|
-
- XY charts (bar, line, combined)
|
|
86
|
-
|
|
87
|
-
Other mermaid diagram types fall back to displaying the raw source. See the [Mermaid documentation](https://mermaid.js.org/) for syntax reference.
|
|
88
|
-
|
|
89
|
-
## Related Components
|
|
90
|
-
|
|
91
|
-
- [Markdown](/docs/ui/markdown) - Rich text rendering where mermaid is integrated
|
|
92
|
-
- [Syntax Highlighting](/docs/ui/syntax-highlighting) - Code highlighting for other languages
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Message Timing
|
|
3
|
-
description: Display streaming performance stats — TTFT, total time, tok/s, and chunk count — as a badge with hover popover.
|
|
4
|
-
platforms: ["react"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
import { MessageTimingSample } from "@/components/pages/docs/samples/message-timing";
|
|
8
|
-
|
|
9
|
-
<MessageTimingSample />
|
|
10
|
-
|
|
11
|
-
<Callout type="warn">
|
|
12
|
-
This component is experimental. The API and displayed metrics may change in future versions. When used with the Vercel AI SDK, token counts and tok/s are **estimated** client-side and may be inaccurate — see [Accuracy](#accuracy) below.
|
|
13
|
-
</Callout>
|
|
14
|
-
|
|
15
|
-
## Getting Started
|
|
16
|
-
|
|
17
|
-
<Steps>
|
|
18
|
-
<Step>
|
|
19
|
-
|
|
20
|
-
### Add `message-timing`
|
|
21
|
-
|
|
22
|
-
<InstallCommand shadcn={["message-timing"]} />
|
|
23
|
-
|
|
24
|
-
This adds a `/components/assistant-ui/message-timing.tsx` file to your project.
|
|
25
|
-
|
|
26
|
-
</Step>
|
|
27
|
-
<Step>
|
|
28
|
-
|
|
29
|
-
### Use in your application
|
|
30
|
-
|
|
31
|
-
Place `MessageTiming` inside `ActionBarPrimitive.Root` in your `thread.tsx`. It will inherit the action bar's auto-hide behaviour and only renders after the stream completes.
|
|
32
|
-
|
|
33
|
-
```tsx title="/components/assistant-ui/thread.tsx" {2,12}
|
|
34
|
-
import { ActionBarPrimitive } from "@assistant-ui/react";
|
|
35
|
-
import { MessageTiming } from "@/components/assistant-ui/message-timing";
|
|
36
|
-
|
|
37
|
-
const AssistantActionBar: FC = () => {
|
|
38
|
-
return (
|
|
39
|
-
<ActionBarPrimitive.Root
|
|
40
|
-
hideWhenRunning
|
|
41
|
-
autohide="not-last"
|
|
42
|
-
>
|
|
43
|
-
<ActionBarPrimitive.Copy />
|
|
44
|
-
<ActionBarPrimitive.Reload />
|
|
45
|
-
<MessageTiming />
|
|
46
|
-
</ActionBarPrimitive.Root>
|
|
47
|
-
);
|
|
48
|
-
};
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
</Step>
|
|
52
|
-
</Steps>
|
|
53
|
-
|
|
54
|
-
## What It Shows
|
|
55
|
-
|
|
56
|
-
The badge displays `totalStreamTime` inline and reveals a popover on hover with the full breakdown:
|
|
57
|
-
|
|
58
|
-
| Metric | Description |
|
|
59
|
-
|--------|-------------|
|
|
60
|
-
| **First token** | Time from request start to first text chunk (TTFT) |
|
|
61
|
-
| **Total** | Total wall-clock time from start to stream end |
|
|
62
|
-
| **Speed** | Output tokens per second (hidden for very short messages) |
|
|
63
|
-
| **Chunks** | Number of stream chunks received |
|
|
64
|
-
|
|
65
|
-
## Accuracy
|
|
66
|
-
|
|
67
|
-
Timing accuracy depends on how your backend is connected.
|
|
68
|
-
|
|
69
|
-
### Data Stream (accurate)
|
|
70
|
-
|
|
71
|
-
When using the [Data Stream](/docs/runtimes/custom/data-stream) protocol on the backend (via `assistant-stream`), token counts come directly from the model's usage data sent in `step-finish` chunks. The `tokensPerSecond` metric is exact whenever your backend reports `outputTokens`.
|
|
72
|
-
|
|
73
|
-
### Vercel AI SDK (estimated)
|
|
74
|
-
|
|
75
|
-
When using the AI SDK integration (`useChatRuntime`), token counts are **estimated** client-side using a 4 characters per token approximation. This can overcount significantly for short messages.
|
|
76
|
-
|
|
77
|
-
## API Reference
|
|
78
|
-
|
|
79
|
-
### `MessageTiming` component
|
|
80
|
-
|
|
81
|
-
| Prop | Type | Default | Description |
|
|
82
|
-
|------|------|---------|-------------|
|
|
83
|
-
| `className` | `string` | — | Additional class names on the root element |
|
|
84
|
-
| `side` | `"top" \| "right" \| "bottom" \| "left"` | `"right"` | Side of the tooltip relative to the badge |
|
|
85
|
-
|
|
86
|
-
Renders `null` until `totalStreamTime` is available (i.e., while streaming or for user messages).
|
|
87
|
-
|
|
88
|
-
For the underlying `useMessageTiming()` hook, field definitions, and runtime-specific setup (LocalRuntime, ExternalStore, etc.), see the [Message Timing guide](/docs/guides/message-timing).
|
|
89
|
-
|
|
90
|
-
## Related
|
|
91
|
-
|
|
92
|
-
- [Message Timing guide](/docs/guides/message-timing) — `useMessageTiming()` hook, runtime support table, and custom timing UI
|
|
93
|
-
- [Thread](/docs/ui/thread) — The action bar context that `MessageTiming` is typically placed inside
|
|
@@ -1,455 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Model Selector
|
|
3
|
-
description: Composable model picker with reasoning effort levels, search, and runtime integration.
|
|
4
|
-
platforms: ["react"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
import { ModelSelectorSample } from "@/components/pages/docs/samples/model-selector";
|
|
8
|
-
import * as ModelSelectorRadixSamples from "@/components/pages/docs/samples/model-selector.radix";
|
|
9
|
-
import { Flavored, FlavorSwitcher } from "@/components/pages/docs/contexts/flavor.server";
|
|
10
|
-
|
|
11
|
-
A picker that lets users switch between AI models and choose a reasoning effort (thinking) level. It is built on Popover + Command, so search, provider grouping, and filtering compose in without being built in. The default export integrates with assistant-ui's `ModelContext` system, so the selection reaches your backend on every request with no extra wiring.
|
|
12
|
-
|
|
13
|
-
<FlavorSwitcher />
|
|
14
|
-
|
|
15
|
-
<Flavored radix={<ModelSelectorRadixSamples.ModelSelectorSample />} base={<ModelSelectorSample />} />
|
|
16
|
-
|
|
17
|
-
## Getting Started
|
|
18
|
-
|
|
19
|
-
<Steps>
|
|
20
|
-
<Step>
|
|
21
|
-
|
|
22
|
-
### Add `model-selector`
|
|
23
|
-
|
|
24
|
-
<InstallCommand shadcn={["model-selector"]} />
|
|
25
|
-
|
|
26
|
-
</Step>
|
|
27
|
-
<Step>
|
|
28
|
-
|
|
29
|
-
### Use in your application
|
|
30
|
-
|
|
31
|
-
Place the `ModelSelector` inside your thread component, typically in the composer area. Each model needs an `id` and a display `name`; everything else is optional:
|
|
32
|
-
|
|
33
|
-
```tsx title="/components/assistant-ui/thread.tsx" {1,6-15}
|
|
34
|
-
import { ModelSelector } from "@/components/assistant-ui/model-selector";
|
|
35
|
-
|
|
36
|
-
const ComposerAction: FC = () => {
|
|
37
|
-
return (
|
|
38
|
-
<div className="flex items-center gap-1">
|
|
39
|
-
<ModelSelector
|
|
40
|
-
models={[
|
|
41
|
-
{ id: "gpt-5.6-luna", name: "GPT-5.6 Luna", description: "Fast and efficient" },
|
|
42
|
-
{ id: "gpt-5.6-terra", name: "GPT-5.6 Terra", description: "Balanced performance" },
|
|
43
|
-
{ id: "gpt-5.6-sol", name: "GPT-5.6 Sol", description: "Most capable", efforts: true },
|
|
44
|
-
]}
|
|
45
|
-
defaultValue="gpt-5.6-luna"
|
|
46
|
-
defaultEffort="medium"
|
|
47
|
-
size="sm"
|
|
48
|
-
/>
|
|
49
|
-
</div>
|
|
50
|
-
);
|
|
51
|
-
};
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
</Step>
|
|
55
|
-
<Step>
|
|
56
|
-
|
|
57
|
-
### Read the selection in your API route
|
|
58
|
-
|
|
59
|
-
The selected model's `id` arrives as `config.modelName`, and the effort level as `config.reasoningEffort`:
|
|
60
|
-
|
|
61
|
-
```tsx title="app/api/chat/route.ts" {2,5-11}
|
|
62
|
-
export async function POST(req: Request) {
|
|
63
|
-
const { messages, config } = await req.json();
|
|
64
|
-
|
|
65
|
-
const result = streamText({
|
|
66
|
-
model: openai(config?.modelName ?? "gpt-5.6-luna"),
|
|
67
|
-
providerOptions: {
|
|
68
|
-
openai:
|
|
69
|
-
config?.reasoningEffort !== undefined
|
|
70
|
-
? { reasoningEffort: config.reasoningEffort }
|
|
71
|
-
: {},
|
|
72
|
-
},
|
|
73
|
-
messages: await convertToModelMessages(messages),
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
return result.toUIMessageStreamResponse();
|
|
77
|
-
}
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
`config.reasoningEffort` is only present when the selected model supports the chosen level, so the route only forwards it when it exists. See [How It Works](#how-it-works).
|
|
81
|
-
|
|
82
|
-
</Step>
|
|
83
|
-
</Steps>
|
|
84
|
-
|
|
85
|
-
## Reasoning Efforts
|
|
86
|
-
|
|
87
|
-
A model that declares `efforts` shows a "Thinking" row at the bottom of the popover. `efforts: true` enables the default Low / Medium / High levels; pass a list of `{ id, name }` objects to define your own:
|
|
88
|
-
|
|
89
|
-
```tsx
|
|
90
|
-
{
|
|
91
|
-
id: "gpt-5.6-sol",
|
|
92
|
-
name: "GPT-5.6 Sol",
|
|
93
|
-
efforts: [
|
|
94
|
-
{ id: "minimal", name: "Minimal" },
|
|
95
|
-
{ id: "high", name: "High" },
|
|
96
|
-
],
|
|
97
|
-
}
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
Omit `efforts` for models without configurable reasoning. The row is hidden while such a model is selected.
|
|
101
|
-
|
|
102
|
-
### Sticky Selection
|
|
103
|
-
|
|
104
|
-
The effort selection survives model switches. Switching to a model that doesn't support the current level omits `reasoningEffort` from the request instead of resetting the user's choice, and the level applies again when the user switches back. The exported `resolveModelEffort` helper applies the same rule if you build your own runtime integration around `ModelSelector.Root`; see [`resolveModelEffort`](#resolvemodeleffort).
|
|
105
|
-
|
|
106
|
-
### Custom Effort UI
|
|
107
|
-
|
|
108
|
-
`ModelSelector.Effort` lays the levels out as horizontal segments, which overflows the popover width once a model has more than a few. For those cases, or for a different layout such as a slider or a sub-dropdown, build your own control with the `useModelSelectorEfforts` hook. It exposes the selected model's levels and the active selection:
|
|
109
|
-
|
|
110
|
-
```tsx
|
|
111
|
-
import { useModelSelectorEfforts } from "@/components/assistant-ui/model-selector";
|
|
112
|
-
import {
|
|
113
|
-
DropdownMenu,
|
|
114
|
-
DropdownMenuContent,
|
|
115
|
-
DropdownMenuRadioGroup,
|
|
116
|
-
DropdownMenuRadioItem,
|
|
117
|
-
DropdownMenuTrigger,
|
|
118
|
-
} from "@/components/ui/dropdown-menu";
|
|
119
|
-
|
|
120
|
-
function EffortDropdown() {
|
|
121
|
-
const { efforts, effort, setEffort } = useModelSelectorEfforts();
|
|
122
|
-
if (!efforts?.length) return null;
|
|
123
|
-
|
|
124
|
-
return (
|
|
125
|
-
<div className="flex items-center justify-between gap-3 border-t px-3 py-2">
|
|
126
|
-
<span className="text-muted-foreground text-xs">Thinking</span>
|
|
127
|
-
<DropdownMenu>
|
|
128
|
-
<DropdownMenuTrigger className="text-xs">
|
|
129
|
-
{efforts.find((e) => e.id === effort)?.name ?? "Select"}
|
|
130
|
-
</DropdownMenuTrigger>
|
|
131
|
-
<DropdownMenuContent align="end">
|
|
132
|
-
<DropdownMenuRadioGroup value={effort} onValueChange={setEffort}>
|
|
133
|
-
{efforts.map((option) => (
|
|
134
|
-
<DropdownMenuRadioItem key={option.id} value={option.id}>
|
|
135
|
-
{option.name}
|
|
136
|
-
</DropdownMenuRadioItem>
|
|
137
|
-
))}
|
|
138
|
-
</DropdownMenuRadioGroup>
|
|
139
|
-
</DropdownMenuContent>
|
|
140
|
-
</DropdownMenu>
|
|
141
|
-
</div>
|
|
142
|
-
);
|
|
143
|
-
}
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
Render it inside `ModelSelector.Content` in place of `ModelSelector.Effort`. The same hook supports any shape that reads the levels and writes the selection.
|
|
147
|
-
|
|
148
|
-
## Provider Logos
|
|
149
|
-
|
|
150
|
-
Each model's `icon` accepts any `ReactNode` and renders in the trigger and the dropdown items. The optional `logos` registry item ships `OpenAILogo`, `ClaudeLogo`, and `GeminiLogo` marks to plug in:
|
|
151
|
-
|
|
152
|
-
<InstallCommand shadcn={["logos"]} />
|
|
153
|
-
|
|
154
|
-
```tsx
|
|
155
|
-
import { ClaudeLogo, GeminiLogo, OpenAILogo } from "@/components/assistant-ui/logos";
|
|
156
|
-
|
|
157
|
-
<ModelSelector
|
|
158
|
-
models={[
|
|
159
|
-
{ id: "gpt-5.6-sol", name: "GPT-5.6 Sol", icon: <OpenAILogo /> },
|
|
160
|
-
{ id: "claude-opus-4.5", name: "Claude Opus 4.5", icon: <ClaudeLogo /> },
|
|
161
|
-
{ id: "gemini-3-pro", name: "Gemini 3 Pro", icon: <GeminiLogo /> },
|
|
162
|
-
]}
|
|
163
|
-
/>;
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
Icons are opt-in per model — omit `icon` and the entry renders text-only.
|
|
167
|
-
|
|
168
|
-
## Search
|
|
169
|
-
|
|
170
|
-
Search is opt-in. Pass `searchable` to the default component:
|
|
171
|
-
|
|
172
|
-
```tsx
|
|
173
|
-
<ModelSelector models={models} searchable />
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
The same prop works on `ModelSelector.Content` when it renders its default children. Or compose `ModelSelector.Search` into a custom layout. Matching runs against each model's `id`, `name`, and `keywords`; add the provider name to `keywords` so typing "openai" finds its models.
|
|
177
|
-
|
|
178
|
-
## Composition
|
|
179
|
-
|
|
180
|
-
All parts are exported individually. The default popover content is `List` + `Effort`; replace it to add search, provider groups, or anything else:
|
|
181
|
-
|
|
182
|
-
```tsx
|
|
183
|
-
import {
|
|
184
|
-
ModelSelectorRoot,
|
|
185
|
-
ModelSelectorTrigger,
|
|
186
|
-
ModelSelectorContent,
|
|
187
|
-
ModelSelectorSearch,
|
|
188
|
-
ModelSelectorList,
|
|
189
|
-
ModelSelectorEmpty,
|
|
190
|
-
ModelSelectorGroup,
|
|
191
|
-
ModelSelectorItem,
|
|
192
|
-
ModelSelectorEffort,
|
|
193
|
-
} from "@/components/assistant-ui/model-selector";
|
|
194
|
-
|
|
195
|
-
<ModelSelectorRoot
|
|
196
|
-
models={models}
|
|
197
|
-
value={modelId}
|
|
198
|
-
onValueChange={setModelId}
|
|
199
|
-
effort={effort}
|
|
200
|
-
onEffortChange={setEffort}
|
|
201
|
-
>
|
|
202
|
-
<ModelSelectorTrigger variant="outline" />
|
|
203
|
-
<ModelSelectorContent>
|
|
204
|
-
<ModelSelectorSearch placeholder="Search models..." />
|
|
205
|
-
<ModelSelectorList>
|
|
206
|
-
<ModelSelectorEmpty />
|
|
207
|
-
<ModelSelectorGroup heading="OpenAI">
|
|
208
|
-
{openaiModels.map((model) => (
|
|
209
|
-
<ModelSelectorItem key={model.id} model={model} />
|
|
210
|
-
))}
|
|
211
|
-
</ModelSelectorGroup>
|
|
212
|
-
<ModelSelectorGroup heading="Anthropic">
|
|
213
|
-
{anthropicModels.map((model) => (
|
|
214
|
-
<ModelSelectorItem key={model.id} model={model} />
|
|
215
|
-
))}
|
|
216
|
-
</ModelSelectorGroup>
|
|
217
|
-
</ModelSelectorList>
|
|
218
|
-
<ModelSelectorEffort label="Thinking" />
|
|
219
|
-
</ModelSelectorContent>
|
|
220
|
-
</ModelSelectorRoot>
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
| Component | Description |
|
|
224
|
-
|-----------|-------------|
|
|
225
|
-
| `ModelSelector` | Default export with runtime integration |
|
|
226
|
-
| `ModelSelector.Root` | Presentational root (no runtime, controlled state) |
|
|
227
|
-
| `ModelSelector.Trigger` | CVA-styled trigger showing the current selection |
|
|
228
|
-
| `ModelSelector.Value` | Selected model name, icon, and active effort |
|
|
229
|
-
| `ModelSelector.Content` | Popover content wrapping a Command |
|
|
230
|
-
| `ModelSelector.Search` | Search input that filters the list |
|
|
231
|
-
| `ModelSelector.FocusAnchor` | Visually hidden input that anchors keyboard navigation when there is no search box |
|
|
232
|
-
| `ModelSelector.List` | List of model items (renders all models by default) |
|
|
233
|
-
| `ModelSelector.Empty` | Empty state shown when search has no matches |
|
|
234
|
-
| `ModelSelector.Group` | Labeled group of items (e.g. by provider) |
|
|
235
|
-
| `ModelSelector.Separator` | Divider between groups or items |
|
|
236
|
-
| `ModelSelector.Item` | Individual model option |
|
|
237
|
-
| `ModelSelector.Effort` | Thinking level row for the selected model |
|
|
238
|
-
|
|
239
|
-
`ModelSelector.List` is a Command list, so filtering and keyboard navigation work across groups automatically. Custom sorting is plain code: order the models before rendering items.
|
|
240
|
-
|
|
241
|
-
Keyboard navigation needs a focused input to drive it. When content is unfiltered (`searchable={false}` on `ModelSelector.Content`, or the default children), `ModelSelector.Content` renders a visually hidden `ModelSelector.FocusAnchor` automatically, so custom layouts without a search box stay keyboard-operable. In a custom layout that renders neither `ModelSelector.Search` nor `searchable={false}`, place `ModelSelector.FocusAnchor` yourself to keep the list reachable from the keyboard.
|
|
242
|
-
|
|
243
|
-
<Callout type="warn">
|
|
244
|
-
`ModelSelector.Content` wraps a Command whose root keydown handler claims
|
|
245
|
-
<Kbd>Enter</Kbd> to select the highlighted model and the arrow keys to move
|
|
246
|
-
through the list. Interactive elements composed inside it (filter chips,
|
|
247
|
-
custom effort controls) should stop propagation for the keys they handle in
|
|
248
|
-
their own `onKeyDown` so the focused control responds instead.
|
|
249
|
-
`ModelSelector.Effort` does this for <Kbd>Home</Kbd> / <Kbd>End</Kbd> (which
|
|
250
|
-
cmdk would otherwise use to jump to the first / last model), lets its
|
|
251
|
-
radiogroup own <Kbd>ArrowLeft</Kbd> / <Kbd>ArrowRight</Kbd>, and hands
|
|
252
|
-
<Kbd>ArrowUp</Kbd> / <Kbd>ArrowDown</Kbd> back to the model list by
|
|
253
|
-
refocusing cmdk's input, so the highlight only moves while a following
|
|
254
|
-
<Kbd>Enter</Kbd> can act on it.
|
|
255
|
-
</Callout>
|
|
256
|
-
|
|
257
|
-
## Variants
|
|
258
|
-
|
|
259
|
-
Use the `variant` prop to change the trigger's visual style.
|
|
260
|
-
|
|
261
|
-
```tsx
|
|
262
|
-
<ModelSelector variant="outline" /> // Border (default)
|
|
263
|
-
<ModelSelector variant="ghost" /> // No background
|
|
264
|
-
<ModelSelector variant="muted" /> // Solid background
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
| Variant | Description |
|
|
268
|
-
| --------- | ---------------------------------------------- |
|
|
269
|
-
| `outline` | Border with transparent background (default) |
|
|
270
|
-
| `ghost` | No background, subtle hover |
|
|
271
|
-
| `muted` | Solid secondary background |
|
|
272
|
-
|
|
273
|
-
## Sizes
|
|
274
|
-
|
|
275
|
-
Use the `size` prop to control the trigger dimensions.
|
|
276
|
-
|
|
277
|
-
```tsx
|
|
278
|
-
<ModelSelector size="sm" /> // Compact (h-8, text-xs)
|
|
279
|
-
<ModelSelector size="default" /> // Standard (h-9)
|
|
280
|
-
<ModelSelector size="lg" /> // Large (h-10)
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
## Keyboard Navigation
|
|
284
|
-
|
|
285
|
-
The picker is fully operable from the keyboard, including when search is disabled.
|
|
286
|
-
|
|
287
|
-
| Key | Action |
|
|
288
|
-
| --- | --- |
|
|
289
|
-
| <Kbd>ArrowDown</Kbd> / <Kbd>ArrowUp</Kbd> | Open the popover from the focused trigger; move between models once open, returning focus to the list from the Thinking row |
|
|
290
|
-
| <Kbd>Enter</Kbd> | Select the highlighted model and close |
|
|
291
|
-
| <Kbd>Escape</Kbd> | Close the popover and return focus to the trigger |
|
|
292
|
-
| <Kbd>Tab</Kbd> | Move from the model list to the Thinking row |
|
|
293
|
-
| <Kbd>ArrowLeft</Kbd> / <Kbd>ArrowRight</Kbd> | Move between reasoning effort levels (Thinking row) |
|
|
294
|
-
| <Kbd>Home</Kbd> / <Kbd>End</Kbd> | Jump to the first / last model (list) or effort level (Thinking row) |
|
|
295
|
-
|
|
296
|
-
When `searchable` is set, typing filters the list; otherwise the keys above drive selection directly.
|
|
297
|
-
|
|
298
|
-
## Accessibility
|
|
299
|
-
|
|
300
|
-
The picker implements the WAI-ARIA combobox pattern over Popover + Command.
|
|
301
|
-
|
|
302
|
-
- The trigger is `role="combobox"` with `aria-haspopup="listbox"`; the popover primitive manages `aria-expanded` and `aria-controls`.
|
|
303
|
-
- The model list is a Command (cmdk) listbox: each item is `role="option"` with `aria-selected`, and the active item is tracked with `aria-activedescendant`.
|
|
304
|
-
- Keyboard navigation works without a visible search box: `ModelSelector.Content` renders a visually hidden input (`ModelSelector.FocusAnchor`) that anchors cmdk's focus so the list stays reachable. Pass `searchable` to surface a real search input instead.
|
|
305
|
-
- The Thinking row (`ModelSelector.Effort`) is a `role="radiogroup"` of `role="radio"` toggles with roving tabindex, so it is a single tab stop and <Kbd>ArrowLeft</Kbd> / <Kbd>ArrowRight</Kbd> move focus and select in one step. <Kbd>ArrowUp</Kbd> / <Kbd>ArrowDown</Kbd> return focus to the model list.
|
|
306
|
-
|
|
307
|
-
## How It Works
|
|
308
|
-
|
|
309
|
-
The default `ModelSelector` export registers the selection with assistant-ui's `ModelContext` system:
|
|
310
|
-
|
|
311
|
-
1. The component calls `aui.modelContext.register()` with `config.modelName`, plus `config.reasoningEffort` when the selected model supports the chosen level
|
|
312
|
-
2. The `AssistantChatTransport` includes `config` in the request body of every chat request
|
|
313
|
-
3. Your API route reads `config.modelName` and `config.reasoningEffort`
|
|
314
|
-
|
|
315
|
-
This works out of the box with `@assistant-ui/ai-sdk`. `ModelSelector.Root` performs no registration; it is purely presentational, with controlled and uncontrolled props for the value, effort, and open state.
|
|
316
|
-
|
|
317
|
-
## API Reference
|
|
318
|
-
|
|
319
|
-
### ModelSelector
|
|
320
|
-
|
|
321
|
-
<ParametersTable
|
|
322
|
-
type="ModelSelectorProps"
|
|
323
|
-
parameters={[
|
|
324
|
-
{
|
|
325
|
-
name: "models",
|
|
326
|
-
type: "ModelOption[]",
|
|
327
|
-
required: true,
|
|
328
|
-
description: "Array of available models to display.",
|
|
329
|
-
},
|
|
330
|
-
{
|
|
331
|
-
name: "defaultValue",
|
|
332
|
-
type: "string",
|
|
333
|
-
description: "Initial model ID for uncontrolled usage. Defaults to the first model, captured on first render; if models loads asynchronously, control the value instead.",
|
|
334
|
-
},
|
|
335
|
-
{
|
|
336
|
-
name: "value",
|
|
337
|
-
type: "string",
|
|
338
|
-
description: "Controlled selected model ID.",
|
|
339
|
-
},
|
|
340
|
-
{
|
|
341
|
-
name: "onValueChange",
|
|
342
|
-
type: "(value: string) => void",
|
|
343
|
-
description: "Callback when selected model changes.",
|
|
344
|
-
},
|
|
345
|
-
{
|
|
346
|
-
name: "defaultEffort",
|
|
347
|
-
type: "string",
|
|
348
|
-
description: "Initial effort level ID for uncontrolled usage.",
|
|
349
|
-
},
|
|
350
|
-
{
|
|
351
|
-
name: "effort",
|
|
352
|
-
type: "string",
|
|
353
|
-
description: "Controlled effort level ID.",
|
|
354
|
-
},
|
|
355
|
-
{
|
|
356
|
-
name: "onEffortChange",
|
|
357
|
-
type: "(effort: string) => void",
|
|
358
|
-
description: "Callback when effort level changes.",
|
|
359
|
-
},
|
|
360
|
-
{
|
|
361
|
-
name: "searchable",
|
|
362
|
-
type: "boolean",
|
|
363
|
-
default: "false",
|
|
364
|
-
description: "Render a search input above the model list.",
|
|
365
|
-
},
|
|
366
|
-
{
|
|
367
|
-
name: "variant",
|
|
368
|
-
type: '"outline" | "ghost" | "muted"',
|
|
369
|
-
default: '"outline"',
|
|
370
|
-
description: "Visual style of the trigger button.",
|
|
371
|
-
},
|
|
372
|
-
{
|
|
373
|
-
name: "size",
|
|
374
|
-
type: '"sm" | "default" | "lg"',
|
|
375
|
-
default: '"default"',
|
|
376
|
-
description: "Size of the trigger button.",
|
|
377
|
-
},
|
|
378
|
-
{
|
|
379
|
-
name: "align",
|
|
380
|
-
type: '"start" | "center" | "end"',
|
|
381
|
-
default: '"start"',
|
|
382
|
-
description: "Alignment of the dropdown relative to the trigger.",
|
|
383
|
-
},
|
|
384
|
-
{
|
|
385
|
-
name: "contentClassName",
|
|
386
|
-
type: "string",
|
|
387
|
-
description: "Additional class name for the dropdown content.",
|
|
388
|
-
},
|
|
389
|
-
]}
|
|
390
|
-
/>
|
|
391
|
-
|
|
392
|
-
### ModelOption
|
|
393
|
-
|
|
394
|
-
<ParametersTable
|
|
395
|
-
type="ModelOption"
|
|
396
|
-
parameters={[
|
|
397
|
-
{
|
|
398
|
-
name: "id",
|
|
399
|
-
type: "string",
|
|
400
|
-
required: true,
|
|
401
|
-
description: "Unique identifier sent to the backend as modelName.",
|
|
402
|
-
},
|
|
403
|
-
{
|
|
404
|
-
name: "name",
|
|
405
|
-
type: "string",
|
|
406
|
-
required: true,
|
|
407
|
-
description: "Display name shown in trigger and dropdown.",
|
|
408
|
-
},
|
|
409
|
-
{
|
|
410
|
-
name: "description",
|
|
411
|
-
type: "string",
|
|
412
|
-
description: "Optional subtitle shown below the model name.",
|
|
413
|
-
},
|
|
414
|
-
{
|
|
415
|
-
name: "icon",
|
|
416
|
-
type: "React.ReactNode",
|
|
417
|
-
description: "Optional icon displayed before the model name.",
|
|
418
|
-
},
|
|
419
|
-
{
|
|
420
|
-
name: "disabled",
|
|
421
|
-
type: "boolean",
|
|
422
|
-
description: "Disable selection of this model.",
|
|
423
|
-
},
|
|
424
|
-
{
|
|
425
|
-
name: "keywords",
|
|
426
|
-
type: "string[]",
|
|
427
|
-
description: "Extra search terms matched by ModelSelector.Search (e.g. the provider name).",
|
|
428
|
-
},
|
|
429
|
-
{
|
|
430
|
-
name: "efforts",
|
|
431
|
-
type: "boolean | ModelSelectorEffortOption[]",
|
|
432
|
-
description: "Reasoning effort levels. true enables the default Low/Medium/High; pass a custom { id, name } list to override. Omit for models without configurable reasoning.",
|
|
433
|
-
},
|
|
434
|
-
]}
|
|
435
|
-
/>
|
|
436
|
-
|
|
437
|
-
### `useModelSelectorEfforts`
|
|
438
|
-
|
|
439
|
-
```tsx
|
|
440
|
-
const { efforts, effort, setEffort } = useModelSelectorEfforts();
|
|
441
|
-
```
|
|
442
|
-
|
|
443
|
-
The selected model's effort levels and the active selection, for building a [custom effort UI](#custom-effort-ui) inside `ModelSelector.Content`. `efforts` is `undefined` for models without configurable reasoning.
|
|
444
|
-
|
|
445
|
-
### `resolveModelEffort`
|
|
446
|
-
|
|
447
|
-
```tsx
|
|
448
|
-
resolveModelEffort(models, modelId, effort); // => string | undefined
|
|
449
|
-
```
|
|
450
|
-
|
|
451
|
-
Returns the effort ID when the given model supports it, otherwise `undefined`. This is the [sticky selection](#sticky-selection) rule the default component applies before registering the selection.
|
|
452
|
-
|
|
453
|
-
## Related
|
|
454
|
-
|
|
455
|
-
- [Model Context](/docs/copilots/model-context): How registered context (instructions, tools, config) reaches your backend
|