@assistant-ui/mcp-docs-server 0.2.3 → 0.3.0
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 +76 -0
- package/dist/proxy.js.map +1 -0
- package/package.json +8 -12
- package/src/index.ts +3 -115
- package/src/proxy.test.ts +250 -0
- package/src/proxy.ts +111 -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,619 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Assistant Context API
|
|
3
|
-
description: Read and update assistant state to build custom React components in your chat UI — composable context API for thread, message, and runtime data via assistant-ui.
|
|
4
|
-
platforms: ["react"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
The Context API provides direct access to assistant-ui's state management system, enabling you to build custom components that integrate seamlessly with the assistant runtime.
|
|
8
|
-
|
|
9
|
-
## Introduction
|
|
10
|
-
|
|
11
|
-
The Context API is assistant-ui's powerful state management system that enables you to build custom components with full access to the assistant's state and capabilities. It provides:
|
|
12
|
-
|
|
13
|
-
- **Reactive state access** - Subscribe to state changes with automatic re-renders
|
|
14
|
-
- **Action execution** - Trigger operations like sending messages or reloading responses
|
|
15
|
-
- **Event listening** - React to user interactions and system events
|
|
16
|
-
- **Scope-aware design** - Components automatically know their context (message, thread, etc.)
|
|
17
|
-
|
|
18
|
-
It's the foundation that powers all assistant-ui primitives. When the built-in components don't meet your needs, you can use the Context API to create custom components with the same capabilities.
|
|
19
|
-
|
|
20
|
-
The Context API is backed by the runtime you provide to `<AssistantRuntimeProvider>`. This runtime acts as a unified store that manages all assistant state, handles actions, and dispatches events across your entire application.
|
|
21
|
-
|
|
22
|
-
## Core Concepts
|
|
23
|
-
|
|
24
|
-
### Scopes and Hierarchy
|
|
25
|
-
|
|
26
|
-
assistant-ui organizes state into **scopes** - logical boundaries that provide access to relevant data and actions. Each scope corresponds to a specific part of the chat interface and automatically provides context-aware functionality.
|
|
27
|
-
|
|
28
|
-
```
|
|
29
|
-
🗂️ ThreadList (threads) - Manages the list of conversations
|
|
30
|
-
├── 📄 ThreadListItem (threadListItem) - Individual thread in the list
|
|
31
|
-
└── 💬 Thread (thread) - Active conversation with messages
|
|
32
|
-
├── 🔵 Message (message) - User or assistant message
|
|
33
|
-
│ ├── 📝 Part (part) - Content within a message (text, tool calls, etc.)
|
|
34
|
-
│ ├── 🧠 ChainOfThought (chainOfThought) - Reasoning steps within a message
|
|
35
|
-
│ │ └── 📝 Part (part) - Individual reasoning/tool-call step
|
|
36
|
-
│ ├── 📎 Attachment (attachment) - Files attached to messages
|
|
37
|
-
│ └── ✏️ Composer (composer) - Edit mode for existing messages
|
|
38
|
-
│ └── 📎 Attachment (attachment) - Files in edit mode
|
|
39
|
-
└── ✏️ Composer (composer) - New message input
|
|
40
|
-
└── 📎 Attachment (attachment) - Files being added
|
|
41
|
-
|
|
42
|
-
💡 Suggestions (suggestions) - Follow-up message suggestions
|
|
43
|
-
└── 💬 Suggestion (suggestion) - Individual suggestion item
|
|
44
|
-
🔧 Tools (tools) - Custom UI components for tool calls
|
|
45
|
-
🧩 ModelContext (modelContext) - Model context and tool registration
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
**How scopes work:**
|
|
49
|
-
|
|
50
|
-
- Scopes are **automatically determined** by where your component is rendered
|
|
51
|
-
- A button inside a `<ThreadPrimitive.Messages>` automatically gets `message` scope
|
|
52
|
-
- A button inside a `<ComposerPrimitive.Attachments>` automatically gets `attachment` scope
|
|
53
|
-
- Child scopes can access parent scope data (e.g., a `message` component can access `thread` data)
|
|
54
|
-
|
|
55
|
-
```tsx
|
|
56
|
-
// Inside a message component
|
|
57
|
-
function MessageButton() {
|
|
58
|
-
// ✅ Available: message scope (current message)
|
|
59
|
-
const role = useAuiState((s) => s.message.role);
|
|
60
|
-
|
|
61
|
-
// ✅ Available: thread scope (parent)
|
|
62
|
-
const isRunning = useAuiState((s) => s.thread.isRunning);
|
|
63
|
-
}
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### State Management Model
|
|
67
|
-
|
|
68
|
-
The Context API follows a predictable state management pattern:
|
|
69
|
-
|
|
70
|
-
1. **State** is immutable and flows down through scopes
|
|
71
|
-
2. **Actions** are methods that trigger state changes
|
|
72
|
-
3. **Events** notify components of state changes and user interactions
|
|
73
|
-
4. **Subscriptions** let components react to changes
|
|
74
|
-
|
|
75
|
-
## Essential Hooks
|
|
76
|
-
|
|
77
|
-
### useAuiState
|
|
78
|
-
|
|
79
|
-
Read state reactively with automatic re-renders when values change. This hook works like Zustand's selector pattern - you provide a function that extracts the specific data you need, and your component only re-renders when that data changes.
|
|
80
|
-
|
|
81
|
-
```tsx
|
|
82
|
-
import { useAuiState } from "@assistant-ui/react";
|
|
83
|
-
|
|
84
|
-
// Basic usage - extract a single property
|
|
85
|
-
const role = useAuiState((s) => s.message.role); // "user" | "assistant"
|
|
86
|
-
const isRunning = useAuiState((s) => s.thread.isRunning); // boolean
|
|
87
|
-
|
|
88
|
-
// Access nested data
|
|
89
|
-
const attachmentCount = useAuiState(
|
|
90
|
-
(s) => s.composer.attachments.length,
|
|
91
|
-
);
|
|
92
|
-
const lastMessage = useAuiState((s) => s.thread.messages.at(-1));
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
The selector function receives all available scopes for your component's location and should return a specific value. The component re-renders only when that returned value changes.
|
|
96
|
-
|
|
97
|
-
**Common patterns:**
|
|
98
|
-
|
|
99
|
-
```tsx
|
|
100
|
-
// Access multiple scopes
|
|
101
|
-
const canSend = useAuiState(
|
|
102
|
-
(s) => !s.thread.isRunning && s.composer.text.length > 0,
|
|
103
|
-
);
|
|
104
|
-
|
|
105
|
-
// Compute derived state
|
|
106
|
-
const messageCount = useAuiState((s) => s.thread.messages.length);
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
**Important:** Never create new objects in selectors. Return primitive values or stable references to avoid infinite re-renders.
|
|
110
|
-
|
|
111
|
-
```tsx
|
|
112
|
-
// ❌ Bad - creates new object every time
|
|
113
|
-
const data = useAuiState((s) => ({
|
|
114
|
-
role: s.message.role,
|
|
115
|
-
content: s.message.content,
|
|
116
|
-
}));
|
|
117
|
-
|
|
118
|
-
// ✅ Good - returns stable values
|
|
119
|
-
const role = useAuiState((s) => s.message.role);
|
|
120
|
-
const content = useAuiState((s) => s.message.content);
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
### useAui
|
|
124
|
-
|
|
125
|
-
Access the API instance for imperative operations and actions. Unlike `useAuiState`, this hook does not subscribe to state updates: the client's identity only changes on structural changes (a scope resolving to a different instance), making it well suited for event handlers and imperative operations.
|
|
126
|
-
|
|
127
|
-
```tsx
|
|
128
|
-
import { useAui } from "@assistant-ui/react";
|
|
129
|
-
|
|
130
|
-
function CustomMessageActions() {
|
|
131
|
-
const aui = useAui();
|
|
132
|
-
|
|
133
|
-
// Perform actions in event handlers
|
|
134
|
-
const handleSend = () => {
|
|
135
|
-
aui.composer.send();
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
const handleReload = () => {
|
|
139
|
-
aui.message.reload();
|
|
140
|
-
};
|
|
141
|
-
|
|
142
|
-
// Read state imperatively when needed
|
|
143
|
-
const handleConditionalAction = () => {
|
|
144
|
-
const { isRunning } = aui.thread.getState();
|
|
145
|
-
const { text } = aui.composer.getState();
|
|
146
|
-
|
|
147
|
-
if (!isRunning && text.length > 0) {
|
|
148
|
-
aui.composer.send();
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
return (
|
|
153
|
-
<div>
|
|
154
|
-
<button onClick={handleSend}>Send</button>
|
|
155
|
-
<button onClick={handleReload}>Reload</button>
|
|
156
|
-
<button onClick={handleConditionalAction}>Smart Send</button>
|
|
157
|
-
</div>
|
|
158
|
-
);
|
|
159
|
-
}
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
The API object doesn't cause re-renders on state updates. Use it for:
|
|
163
|
-
|
|
164
|
-
- **Triggering actions** in event handlers and callbacks
|
|
165
|
-
- **Reading current state** imperatively when you don't need subscriptions
|
|
166
|
-
- **Accessing nested scopes** programmatically
|
|
167
|
-
- **Checking scope availability** before performing actions
|
|
168
|
-
|
|
169
|
-
**Available actions by scope:**
|
|
170
|
-
|
|
171
|
-
```tsx
|
|
172
|
-
// Thread actions
|
|
173
|
-
aui.thread.append(message);
|
|
174
|
-
aui.thread.startRun(config);
|
|
175
|
-
aui.thread.resumeRun(config);
|
|
176
|
-
aui.thread.cancelRun();
|
|
177
|
-
aui.thread.getState();
|
|
178
|
-
aui.thread.message({ index: idx });
|
|
179
|
-
aui.thread.message({ id: messageId });
|
|
180
|
-
aui.thread.composer();
|
|
181
|
-
|
|
182
|
-
// Message actions
|
|
183
|
-
aui.message.reload();
|
|
184
|
-
aui.message.speak();
|
|
185
|
-
aui.message.stopSpeaking();
|
|
186
|
-
aui.message.submitFeedback({ type: "positive" | "negative" });
|
|
187
|
-
aui.message.switchToBranch({ position, branchId });
|
|
188
|
-
aui.message.getState();
|
|
189
|
-
aui.message.part({ index: idx });
|
|
190
|
-
aui.message.part({ toolCallId });
|
|
191
|
-
aui.message.composer();
|
|
192
|
-
|
|
193
|
-
// Part actions
|
|
194
|
-
aui.part.addToolResult(result);
|
|
195
|
-
aui.part.resumeToolCall(result);
|
|
196
|
-
aui.part.getState();
|
|
197
|
-
|
|
198
|
-
// Composer actions
|
|
199
|
-
aui.composer.send();
|
|
200
|
-
aui.composer.setText(text);
|
|
201
|
-
aui.composer.setRole(role);
|
|
202
|
-
aui.composer.addAttachment(file); // File object
|
|
203
|
-
aui.composer.addAttachment({ name, content }); // external source
|
|
204
|
-
await aui.composer.clearAttachments();
|
|
205
|
-
await aui.composer.reset();
|
|
206
|
-
aui.composer.getState();
|
|
207
|
-
|
|
208
|
-
// Attachment actions
|
|
209
|
-
aui.attachment.remove();
|
|
210
|
-
aui.attachment.getState();
|
|
211
|
-
|
|
212
|
-
// ThreadList actions
|
|
213
|
-
aui.threads.switchToNewThread();
|
|
214
|
-
aui.threads.switchToThread(threadId);
|
|
215
|
-
aui.threads.reload();
|
|
216
|
-
await aui.threads.getLoadThreadsPromise();
|
|
217
|
-
aui.threads.getState();
|
|
218
|
-
|
|
219
|
-
// ThreadListItem actions
|
|
220
|
-
aui.threadListItem.switchTo();
|
|
221
|
-
aui.threadListItem.rename(title);
|
|
222
|
-
aui.threadListItem.updateCustom(custom);
|
|
223
|
-
aui.threadListItem.archive();
|
|
224
|
-
aui.threadListItem.unarchive();
|
|
225
|
-
aui.threadListItem.delete();
|
|
226
|
-
aui.threadListItem.getState();
|
|
227
|
-
|
|
228
|
-
// Suggestions actions
|
|
229
|
-
aui.suggestions.getState();
|
|
230
|
-
aui.suggestions.suggestion({ index: 0 });
|
|
231
|
-
|
|
232
|
-
// Suggestion actions
|
|
233
|
-
aui.suggestion.getState();
|
|
234
|
-
|
|
235
|
-
// ChainOfThought actions
|
|
236
|
-
aui.chainOfThought.getState();
|
|
237
|
-
aui.chainOfThought.setCollapsed(collapsed);
|
|
238
|
-
aui.chainOfThought.part({ index: 0 });
|
|
239
|
-
|
|
240
|
-
// ModelContext actions — see /docs/copilots/model-context for full usage
|
|
241
|
-
aui.modelContext.register(provider);
|
|
242
|
-
aui.modelContext.getState();
|
|
243
|
-
|
|
244
|
-
// Tools actions
|
|
245
|
-
aui.tools.setToolUI(toolName, render);
|
|
246
|
-
aui.tools.getState();
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
### useAuiEvent
|
|
250
|
-
|
|
251
|
-
Subscribe to events with automatic cleanup on unmount. This hook is perfect for reacting to user interactions, system events, or integrating with external analytics.
|
|
252
|
-
|
|
253
|
-
```tsx
|
|
254
|
-
import { useAuiEvent } from "@assistant-ui/react";
|
|
255
|
-
|
|
256
|
-
// Listen to current scope events (most common)
|
|
257
|
-
useAuiEvent("composer.send", (event) => {
|
|
258
|
-
console.log("Composer sent message in thread:", event.threadId);
|
|
259
|
-
});
|
|
260
|
-
|
|
261
|
-
// Listen to thread events
|
|
262
|
-
useAuiEvent("thread.modelContextUpdate", (event) => {
|
|
263
|
-
console.log("Model context updated in thread:", event.threadId);
|
|
264
|
-
});
|
|
265
|
-
|
|
266
|
-
// Listen to all events of a type across all scopes
|
|
267
|
-
useAuiEvent({ event: "composer.send", scope: "*" }, (event) => {
|
|
268
|
-
console.log("Any composer sent a message:", event.threadId);
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
// Listen to ALL events (useful for debugging or analytics)
|
|
272
|
-
useAuiEvent("*", (event) => {
|
|
273
|
-
console.log("Event occurred:", event.event, event.payload);
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
// Practical example: Track user interactions
|
|
277
|
-
function AnalyticsTracker() {
|
|
278
|
-
useAuiEvent("composer.send", (event) => {
|
|
279
|
-
analytics.track("message_sent", {
|
|
280
|
-
threadId: event.threadId,
|
|
281
|
-
});
|
|
282
|
-
});
|
|
283
|
-
|
|
284
|
-
return null; // This component only tracks events
|
|
285
|
-
}
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
**Event name patterns:**
|
|
289
|
-
|
|
290
|
-
- Event names follow `source.action` format in camelCase (e.g., `composer.send`, `thread.runStart`)
|
|
291
|
-
- Use `"*"` as the event name to listen to all events
|
|
292
|
-
- The `scope` parameter controls which instances trigger the event
|
|
293
|
-
|
|
294
|
-
## Working with Scopes
|
|
295
|
-
|
|
296
|
-
### Available Scopes
|
|
297
|
-
|
|
298
|
-
Each scope provides access to specific state and actions:
|
|
299
|
-
|
|
300
|
-
- **ThreadList** (`threads`): Collection and management of threads
|
|
301
|
-
- **ThreadListItem** (`threadListItem`): Individual thread in the list
|
|
302
|
-
- **Thread** (`thread`): Conversation with messages
|
|
303
|
-
- **Message** (`message`): Individual message (user or assistant)
|
|
304
|
-
- **Part** (`part`): Content part within a message (text, tool calls, etc.)
|
|
305
|
-
- **ChainOfThought** (`chainOfThought`): Reasoning steps grouped within a message
|
|
306
|
-
- **Composer** (`composer`): Text input for sending or editing messages
|
|
307
|
-
- **Attachment** (`attachment`): File or media attached to a message or composer
|
|
308
|
-
- **Suggestions** (`suggestions`): Collection of follow-up message suggestions
|
|
309
|
-
- **Suggestion** (`suggestion`): Individual follow-up suggestion
|
|
310
|
-
- **Tools** (`tools`): Tool UI components
|
|
311
|
-
- **ModelContext** (`modelContext`): Model context and tool registration
|
|
312
|
-
|
|
313
|
-
### Scope Resolution
|
|
314
|
-
|
|
315
|
-
The Context API automatically resolves the current scope based on component location:
|
|
316
|
-
|
|
317
|
-
```tsx
|
|
318
|
-
function MessageButton() {
|
|
319
|
-
const aui = useAui();
|
|
320
|
-
|
|
321
|
-
// Automatically uses the current message scope
|
|
322
|
-
const handleReload = () => {
|
|
323
|
-
aui.message.reload();
|
|
324
|
-
};
|
|
325
|
-
|
|
326
|
-
return <button onClick={handleReload}>Reload</button>;
|
|
327
|
-
}
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
### Checking Scope Availability
|
|
331
|
-
|
|
332
|
-
Read scopes that may be unavailable through the optional view — they resolve to `undefined` instead of throwing:
|
|
333
|
-
|
|
334
|
-
```tsx
|
|
335
|
-
const role = useAuiState((s) => s.optional.message?.role);
|
|
336
|
-
```
|
|
337
|
-
|
|
338
|
-
### Accessing Nested Scopes
|
|
339
|
-
|
|
340
|
-
Navigate through the scope hierarchy programmatically:
|
|
341
|
-
|
|
342
|
-
```tsx
|
|
343
|
-
const aui = useAui();
|
|
344
|
-
|
|
345
|
-
// Access specific message by ID or index
|
|
346
|
-
const messageById = aui.thread.message({ id: "msg_123" });
|
|
347
|
-
const messageByIndex = aui.thread.message({ index: 0 });
|
|
348
|
-
|
|
349
|
-
// Access part by index or tool call ID
|
|
350
|
-
const partByIndex = aui.message.part({ index: 0 });
|
|
351
|
-
const partByToolCall = aui.message.part({ toolCallId: "call_123" });
|
|
352
|
-
|
|
353
|
-
// Access attachment by index
|
|
354
|
-
const attachment = aui.composer.attachment({ index: 0 }).getState();
|
|
355
|
-
|
|
356
|
-
// Access thread list item by ID, index, or the "main" selector
|
|
357
|
-
const threadItem = aui.threads.item({ id: "thread_123" });
|
|
358
|
-
const threadByIndex = aui.threads.item({ index: 0 });
|
|
359
|
-
const archivedThread = aui.threads.item({ index: 0, archived: true });
|
|
360
|
-
|
|
361
|
-
// Traverse to the main thread directly
|
|
362
|
-
const mainThread = aui.threads.thread("main");
|
|
363
|
-
const message = aui.threads.thread("main").message({ id: "msg_123" });
|
|
364
|
-
```
|
|
365
|
-
|
|
366
|
-
## Common Patterns
|
|
367
|
-
|
|
368
|
-
### Conditional Rendering
|
|
369
|
-
|
|
370
|
-
```tsx
|
|
371
|
-
function RunIndicator() {
|
|
372
|
-
const isRunning = useAuiState((s) => s.thread.isRunning);
|
|
373
|
-
|
|
374
|
-
if (!isRunning) return null;
|
|
375
|
-
return <div>Assistant is thinking...</div>;
|
|
376
|
-
}
|
|
377
|
-
```
|
|
378
|
-
|
|
379
|
-
### Custom Action Buttons
|
|
380
|
-
|
|
381
|
-
```tsx
|
|
382
|
-
function CopyButton() {
|
|
383
|
-
const aui = useAui();
|
|
384
|
-
|
|
385
|
-
const handleCopy = () => {
|
|
386
|
-
navigator.clipboard.writeText(aui.message.getCopyText());
|
|
387
|
-
};
|
|
388
|
-
|
|
389
|
-
return <button onClick={handleCopy}>Copy</button>;
|
|
390
|
-
}
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
### State-Aware Components
|
|
394
|
-
|
|
395
|
-
```tsx
|
|
396
|
-
function SmartComposer() {
|
|
397
|
-
const aui = useAui();
|
|
398
|
-
const isRunning = useAuiState((s) => s.thread.isRunning);
|
|
399
|
-
const text = useAuiState((s) => s.composer.text);
|
|
400
|
-
|
|
401
|
-
const canSend = !isRunning && text.length > 0;
|
|
402
|
-
|
|
403
|
-
return (
|
|
404
|
-
<div>
|
|
405
|
-
<textarea
|
|
406
|
-
value={text}
|
|
407
|
-
onChange={(e) => aui.composer.setText(e.target.value)}
|
|
408
|
-
disabled={isRunning}
|
|
409
|
-
/>
|
|
410
|
-
<button onClick={() => aui.composer.send()} disabled={!canSend}>
|
|
411
|
-
Send
|
|
412
|
-
</button>
|
|
413
|
-
</div>
|
|
414
|
-
);
|
|
415
|
-
}
|
|
416
|
-
```
|
|
417
|
-
|
|
418
|
-
### Event-Driven Updates
|
|
419
|
-
|
|
420
|
-
```tsx
|
|
421
|
-
function MessageCounter() {
|
|
422
|
-
const [sendCount, setSendCount] = useState(0);
|
|
423
|
-
|
|
424
|
-
useAuiEvent("composer.send", () => {
|
|
425
|
-
setSendCount((c) => c + 1);
|
|
426
|
-
});
|
|
427
|
-
|
|
428
|
-
return <div>Messages sent: {sendCount}</div>;
|
|
429
|
-
}
|
|
430
|
-
```
|
|
431
|
-
|
|
432
|
-
## Advanced Topics
|
|
433
|
-
|
|
434
|
-
### Resolution Dynamics
|
|
435
|
-
|
|
436
|
-
Scopes are resolved during render and bound into the client. State updates never change the client's identity; a structural change (for example, switching threads) produces a new client and re-renders consumers through React:
|
|
437
|
-
|
|
438
|
-
```tsx
|
|
439
|
-
const aui = useAui();
|
|
440
|
-
|
|
441
|
-
// Bound to the thread current at this render
|
|
442
|
-
aui.thread.append({ role: "user", content: "Hello" });
|
|
443
|
-
|
|
444
|
-
// After a thread switch, the component re-renders with a new client.
|
|
445
|
-
// Accessors read from a previous render keep pointing at the old thread.
|
|
446
|
-
```
|
|
447
|
-
|
|
448
|
-
### Performance Optimization
|
|
449
|
-
|
|
450
|
-
**Selector optimization:**
|
|
451
|
-
|
|
452
|
-
```tsx
|
|
453
|
-
// ❌ Expensive computation in selector (runs on every store update)
|
|
454
|
-
const result = useAuiState(
|
|
455
|
-
(s) => s.thread.messages.filter((m) => m.role === "user").length,
|
|
456
|
-
);
|
|
457
|
-
|
|
458
|
-
// ✅ Memoize expensive computations
|
|
459
|
-
const messages = useAuiState((s) => s.thread.messages);
|
|
460
|
-
const userCount = useMemo(
|
|
461
|
-
() => messages.filter((m) => m.role === "user").length,
|
|
462
|
-
[messages],
|
|
463
|
-
);
|
|
464
|
-
```
|
|
465
|
-
|
|
466
|
-
**Minimize re-renders:**
|
|
467
|
-
|
|
468
|
-
```tsx
|
|
469
|
-
// ❌ Subscribes to entire thread state
|
|
470
|
-
const thread = useAuiState((s) => s.thread);
|
|
471
|
-
|
|
472
|
-
// ✅ Subscribe only to needed values
|
|
473
|
-
const isRunning = useAuiState((s) => s.thread.isRunning);
|
|
474
|
-
```
|
|
475
|
-
|
|
476
|
-
## API Reference
|
|
477
|
-
|
|
478
|
-
### Hooks
|
|
479
|
-
|
|
480
|
-
| Hook | Purpose | Returns |
|
|
481
|
-
| ----------------------------- | -------------------------- | -------------- |
|
|
482
|
-
| `useAuiState(selector)` | Subscribe to state changes | Selected value |
|
|
483
|
-
| `useAui()` | Get API instance | API object |
|
|
484
|
-
| `useAuiEvent(event, handler)` | Subscribe to events | void |
|
|
485
|
-
|
|
486
|
-
### Scope States
|
|
487
|
-
|
|
488
|
-
| Scope | Key State Properties | Description |
|
|
489
|
-
| -------------- | ------------------------------------------------------------------------------------------------ | -------------------------------------------------- |
|
|
490
|
-
| ThreadList | `mainThreadId`, `newThreadId`, `threadIds`, `archivedThreadIds`, `isLoading`, `threadItems` (`readonly ThreadListItemState[]`) | Manages all available conversation threads |
|
|
491
|
-
| ThreadListItem | `id`, `title`, `status`, `remoteId`, `externalId`, `custom?: Record<string, unknown>` | Individual thread metadata and status; `custom` carries arbitrary per-thread metadata set by remote runtimes |
|
|
492
|
-
| Thread | `isRunning` (may be explicitly set by the runtime rather than derived from last-message status), `isLoading`, `isDisabled`, `isEmpty`, `messages`, `capabilities`, `suggestions` | Active conversation state and message history |
|
|
493
|
-
| Message | `role`, `content`, `status`, `attachments`, `parts`, `parentId`, `branchNumber`, `branchCount`, `isLast`, `index` | Individual message content and metadata |
|
|
494
|
-
| Part | `type`, `status`, `text`, `toolCallId`, `toolName` | Content parts within messages (text, tool calls) |
|
|
495
|
-
| ChainOfThought | `parts`, `collapsed`, `status` | Reasoning steps grouped within a message |
|
|
496
|
-
| Composer | `text`, `role`, `attachments`, `isEmpty`, `canCancel`, `type`, `isEditing` | Text input state for new/edited messages |
|
|
497
|
-
| Attachment | `id`, `type`, `name`, `contentType`, `status` | File attachments metadata and content |
|
|
498
|
-
| Suggestions | `suggestions` | Collection of follow-up message suggestions |
|
|
499
|
-
| Suggestion | `title`, `label`, `prompt` | Individual suggestion with title, label, and prompt |
|
|
500
|
-
| ModelContext | *(empty — use `register()` / `getToolCallParams()` methods; see [Model Context](/docs/copilots/model-context))* | System instructions, tools, and context providers |
|
|
501
|
-
|
|
502
|
-
### Available Actions by Scope
|
|
503
|
-
|
|
504
|
-
The table below covers the most commonly used actions. For the full catalog, see the [API Reference](/docs/api-reference/overview).
|
|
505
|
-
|
|
506
|
-
| Scope | Actions | Use Cases |
|
|
507
|
-
| -------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |
|
|
508
|
-
| ThreadList | `switchToNewThread()`, `switchToThread(id)`, `reload()`, `getLoadThreadsPromise()`, `item(selector)`, `thread("main")`, `getState()` | Thread navigation, creation, and sync |
|
|
509
|
-
| ThreadListItem | `switchTo()`, `rename(title)`, `updateCustom(custom)`, `archive()`, `unarchive()`, `delete()`, `getState()` | Thread management operations |
|
|
510
|
-
| Thread | `append(message)`, `startRun(config)`, `resumeRun(config)`, `cancelRun()`, `reset()`, `export()`, `import(repository)`, `message(selector)`, `composer()`, `getState()` | Message handling and conversation control |
|
|
511
|
-
| Message | `reload()`, `speak()`, `stopSpeaking()`, `submitFeedback(feedback)`, `switchToBranch(options)`, `getCopyText()`, `part(selector)`, `attachment(selector)`, `composer()`, `setIsCopied(value)`, `setIsHovering(value)`, `getState()` | Message interactions and regeneration |
|
|
512
|
-
| Part | `addToolResult(result)`, `resumeToolCall(result)`, `getState()` | Tool call result handling |
|
|
513
|
-
| ChainOfThought | `setCollapsed(collapsed)`, `part({ index })`, `getState()` | Expand/collapse reasoning steps |
|
|
514
|
-
| Composer | `send()`, `setText(text)`, `setRole(role)`, `addAttachment(file \| attachment)`, `clearAttachments()` (async), `reset()` (async), `getState()` | Text input and message composition |
|
|
515
|
-
| Attachment | `remove()`, `getState()` | File management |
|
|
516
|
-
| Suggestions | `suggestion({ index })`, `getState()` | Access follow-up suggestions |
|
|
517
|
-
| Suggestion | `getState()` | Read individual suggestion data |
|
|
518
|
-
| ModelContext | `register(provider)`, `getState()` | Register providers; full details in [Model Context](/docs/copilots/model-context) |
|
|
519
|
-
|
|
520
|
-
### Events vs State Observation
|
|
521
|
-
|
|
522
|
-
Use `useAuiState` to render the current value of something; use `useAuiEvent` to react to the moment something happens. Both are supported: many events mark a transition you could also observe in state, and subscribing to the event is the intended way to run a side effect at that transition.
|
|
523
|
-
|
|
524
|
-
The rule of thumb:
|
|
525
|
-
|
|
526
|
-
1. Rendering a value? → use `useAuiState`.
|
|
527
|
-
2. Are you the caller and want immediate feedback? → catch the rejection / read the return value.
|
|
528
|
-
3. Running a side effect when something happens? → use `useAuiEvent`.
|
|
529
|
-
|
|
530
|
-
#### Available Events
|
|
531
|
-
|
|
532
|
-
| Event | When It Fires |
|
|
533
|
-
| ----------------------------- | ---------------------------------------------------------------------------- |
|
|
534
|
-
| `threads.selectionChanged` | The main thread selection changed. Payload carries `threadId` (newly selected) and `previousThreadId`. Does not fire for the initially selected thread on mount. |
|
|
535
|
-
| `thread.runStart` / `runEnd` | A run started / ended on the thread (also visible as `isRunning` flipping) |
|
|
536
|
-
| `thread.initialize` | The thread transitioned from new to initialized, before the first message is added |
|
|
537
|
-
| `thread.modelContextUpdate` | The model context provider notified a change. The model context lives in a provider, not in thread state, so this event has no state-derivable equivalent. |
|
|
538
|
-
| `composer.send` | The user sent the composer contents; `messageId` is set for edit-composer sends |
|
|
539
|
-
| `composer.attachmentAdd` | An attachment was added to the composer |
|
|
540
|
-
| `composer.attachmentAddError` | An `addAttachment()` call failed. Payload `reason` discriminates `no-adapter` / `not-accepted` / `adapter-error`. The event additionally surfaces a human-readable `message` (and the underlying `Error` instance via the low-level `runtime.unstable_on("attachmentAddError")` API; `useAuiEvent` payloads omit it because raw `Error` objects are not store-serializable). |
|
|
541
|
-
|
|
542
|
-
#### Deprecated Events
|
|
543
|
-
|
|
544
|
-
| Deprecated Event | Use Instead |
|
|
545
|
-
| ----------------------------- | ---------------------------------------------------------------------------- |
|
|
546
|
-
| `threadListItem.switchedTo` | `threads.selectionChanged` — its `threadId` is the newly selected thread |
|
|
547
|
-
| `threadListItem.switchedAway` | `threads.selectionChanged` — its `previousThreadId` is the thread switched away from |
|
|
548
|
-
|
|
549
|
-
## Troubleshooting
|
|
550
|
-
|
|
551
|
-
### Common Errors
|
|
552
|
-
|
|
553
|
-
**"Cannot access [scope] outside of [scope] context"**
|
|
554
|
-
|
|
555
|
-
```tsx
|
|
556
|
-
// ❌ This will throw if not inside a message component
|
|
557
|
-
const role = useAuiState((s) => s.message.role);
|
|
558
|
-
|
|
559
|
-
// ✅ Read through the optional view — unavailable scopes resolve to undefined
|
|
560
|
-
const role = useAuiState((s) => s.optional.message?.role ?? "none");
|
|
561
|
-
```
|
|
562
|
-
|
|
563
|
-
**"Maximum update depth exceeded" / Infinite re-renders**
|
|
564
|
-
|
|
565
|
-
```tsx
|
|
566
|
-
// ❌ Creating new objects in selectors causes infinite re-renders
|
|
567
|
-
const data = useAuiState((s) => ({
|
|
568
|
-
role: s.message.role,
|
|
569
|
-
content: s.message.content, // New object every time!
|
|
570
|
-
}));
|
|
571
|
-
|
|
572
|
-
// ✅ Return primitive values or use separate selectors
|
|
573
|
-
const role = useAuiState((s) => s.message.role);
|
|
574
|
-
const content = useAuiState((s) => s.message.content);
|
|
575
|
-
```
|
|
576
|
-
|
|
577
|
-
**"Scope resolution failed" / Stale scope references**
|
|
578
|
-
|
|
579
|
-
```tsx
|
|
580
|
-
// ❌ Storing scope references can lead to stale data
|
|
581
|
-
const aui = useAui();
|
|
582
|
-
const thread = aui.thread; // This reference might become stale
|
|
583
|
-
|
|
584
|
-
useEffect(() => {
|
|
585
|
-
// This might reference the wrong thread if user switched
|
|
586
|
-
thread.cancelRun();
|
|
587
|
-
}, [thread]);
|
|
588
|
-
|
|
589
|
-
// ✅ Resolve scopes fresh each time
|
|
590
|
-
const aui = useAui();
|
|
591
|
-
|
|
592
|
-
useEffect(() => {
|
|
593
|
-
// Always gets the current thread
|
|
594
|
-
aui.thread.cancelRun();
|
|
595
|
-
}, [aui]);
|
|
596
|
-
```
|
|
597
|
-
|
|
598
|
-
## Quick Reference
|
|
599
|
-
|
|
600
|
-
```tsx
|
|
601
|
-
// Read state
|
|
602
|
-
const value = useAuiState((s) => s.scope.property);
|
|
603
|
-
|
|
604
|
-
// Perform action
|
|
605
|
-
const aui = useAui();
|
|
606
|
-
aui.scope.action();
|
|
607
|
-
|
|
608
|
-
// Listen to events
|
|
609
|
-
useAuiEvent("source.event", (e) => {});
|
|
610
|
-
|
|
611
|
-
// Read a scope that may be unavailable
|
|
612
|
-
const maybe = useAuiState((s) => s.optional.scope?.property);
|
|
613
|
-
|
|
614
|
-
// Get state imperatively
|
|
615
|
-
const state = aui.scope.getState();
|
|
616
|
-
|
|
617
|
-
// Navigate scopes
|
|
618
|
-
aui.thread.message({ id: "..." }).getState();
|
|
619
|
-
```
|