@ulearning/ai-sdk 0.0.0-stage → 1.0.0-next.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/LICENSE +21 -0
- package/README.md +12 -2
- package/dist/_virtual/_rolldown/runtime.js +12 -0
- package/dist/adapters/OpenAIRealtimeVoiceAdapter.d.ts +22 -0
- package/dist/adapters/OpenAIRealtimeVoiceAdapter.d.ts.map +1 -0
- package/dist/adapters/OpenAIRealtimeVoiceAdapter.js +296 -0
- package/dist/adapters/OpenAIRealtimeVoiceAdapter.js.map +1 -0
- package/dist/assistant-transport.d.ts +33 -0
- package/dist/assistant-transport.d.ts.map +1 -0
- package/dist/assistant-transport.js +18 -0
- package/dist/assistant-transport.js.map +1 -0
- package/dist/augmentations.d.ts +33 -0
- package/dist/augmentations.d.ts.map +1 -0
- package/dist/augmentations.js +0 -0
- package/dist/context/ReadonlyStore.d.ts +4 -0
- package/dist/context/ReadonlyStore.d.ts.map +1 -0
- package/dist/context/ReadonlyStore.js +7 -0
- package/dist/context/ReadonlyStore.js.map +1 -0
- package/dist/context/index.d.ts +13 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +12 -0
- package/dist/context/providers/AttachmentByIndexProvider.d.ts +2 -0
- package/dist/context/providers/AttachmentByIndexProvider.d.ts.map +1 -0
- package/dist/context/providers/AttachmentByIndexProvider.js +2 -0
- package/dist/context/providers/ChainOfThoughtByIndicesProvider.d.ts +2 -0
- package/dist/context/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -0
- package/dist/context/providers/ChainOfThoughtByIndicesProvider.js +2 -0
- package/dist/context/providers/MessageByIndexProvider.d.ts +2 -0
- package/dist/context/providers/MessageByIndexProvider.d.ts.map +1 -0
- package/dist/context/providers/MessageByIndexProvider.js +2 -0
- package/dist/context/providers/MessageProvider.d.ts +3 -0
- package/dist/context/providers/MessageProvider.d.ts.map +1 -0
- package/dist/context/providers/MessageProvider.js +25 -0
- package/dist/context/providers/MessageProvider.js.map +1 -0
- package/dist/context/providers/PartByIndexProvider.d.ts +2 -0
- package/dist/context/providers/PartByIndexProvider.d.ts.map +1 -0
- package/dist/context/providers/PartByIndexProvider.js +2 -0
- package/dist/context/providers/SuggestionByIndexProvider.d.ts +2 -0
- package/dist/context/providers/SuggestionByIndexProvider.d.ts.map +1 -0
- package/dist/context/providers/SuggestionByIndexProvider.js +2 -0
- package/dist/context/providers/TextMessagePartProvider.d.ts +2 -0
- package/dist/context/providers/TextMessagePartProvider.d.ts.map +1 -0
- package/dist/context/providers/TextMessagePartProvider.js +2 -0
- package/dist/context/providers/ThreadListItemProvider.d.ts +2 -0
- package/dist/context/providers/ThreadListItemProvider.d.ts.map +1 -0
- package/dist/context/providers/ThreadListItemProvider.js +2 -0
- package/dist/context/providers/ThreadViewportProvider.d.ts +6 -0
- package/dist/context/providers/ThreadViewportProvider.d.ts.map +1 -0
- package/dist/context/providers/ThreadViewportProvider.js +32 -0
- package/dist/context/providers/ThreadViewportProvider.js.map +1 -0
- package/dist/context/stores/ThreadViewport.d.ts +88 -0
- package/dist/context/stores/ThreadViewport.d.ts.map +1 -0
- package/dist/context/stores/ThreadViewport.js +130 -0
- package/dist/context/stores/ThreadViewport.js.map +1 -0
- package/dist/context/vue/ThreadViewportContext.d.ts +24 -0
- package/dist/context/vue/ThreadViewportContext.d.ts.map +1 -0
- package/dist/context/vue/ThreadViewportContext.js +10 -0
- package/dist/context/vue/ThreadViewportContext.js.map +1 -0
- package/dist/context/vue/utils/createContextHook.d.ts +11 -0
- package/dist/context/vue/utils/createContextHook.d.ts.map +1 -0
- package/dist/context/vue/utils/createContextHook.js +20 -0
- package/dist/context/vue/utils/createContextHook.js.map +1 -0
- package/dist/context/vue/utils/createContextStoreHook.d.ts +22 -0
- package/dist/context/vue/utils/createContextStoreHook.d.ts.map +1 -0
- package/dist/context/vue/utils/createContextStoreHook.js +48 -0
- package/dist/context/vue/utils/createContextStoreHook.js.map +1 -0
- package/dist/devtools/DevToolsHooks.d.ts +32 -0
- package/dist/devtools/DevToolsHooks.d.ts.map +1 -0
- package/dist/devtools/DevToolsHooks.js +84 -0
- package/dist/devtools/DevToolsHooks.js.map +1 -0
- package/dist/hooks/useMessageQuote.d.ts +17 -0
- package/dist/hooks/useMessageQuote.d.ts.map +1 -0
- package/dist/hooks/useMessageQuote.js +23 -0
- package/dist/hooks/useMessageQuote.js.map +1 -0
- package/dist/hooks/useMessageTiming.d.ts +17 -0
- package/dist/hooks/useMessageTiming.d.ts.map +1 -0
- package/dist/hooks/useMessageTiming.js +22 -0
- package/dist/hooks/useMessageTiming.js.map +1 -0
- package/dist/hooks/useToolCallElapsed.d.ts +22 -0
- package/dist/hooks/useToolCallElapsed.d.ts.map +1 -0
- package/dist/hooks/useToolCallElapsed.js +54 -0
- package/dist/hooks/useToolCallElapsed.js.map +1 -0
- package/dist/index.d.ts +155 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -0
- package/dist/internal.d.ts +9 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +24 -0
- package/dist/internal.js.map +1 -0
- package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts +13 -0
- package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts.map +1 -0
- package/dist/legacy-runtime/AssistantRuntimeProvider.js +37 -0
- package/dist/legacy-runtime/AssistantRuntimeProvider.js.map +1 -0
- package/dist/mcp-apps/McpAppRenderer.d.ts +60 -0
- package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -0
- package/dist/mcp-apps/McpAppRenderer.js +223 -0
- package/dist/mcp-apps/McpAppRenderer.js.map +1 -0
- package/dist/mcp-apps/McpAppsRemoteHost.d.ts +3 -0
- package/dist/mcp-apps/McpAppsRemoteHost.d.ts.map +1 -0
- package/dist/mcp-apps/McpAppsRemoteHost.js +101 -0
- package/dist/mcp-apps/McpAppsRemoteHost.js.map +1 -0
- package/dist/mcp-apps/app-frame.d.ts +3 -0
- package/dist/mcp-apps/app-frame.d.ts.map +1 -0
- package/dist/mcp-apps/app-frame.js +213 -0
- package/dist/mcp-apps/app-frame.js.map +1 -0
- package/dist/mcp-apps/bridge.d.ts +18 -0
- package/dist/mcp-apps/bridge.d.ts.map +1 -0
- package/dist/mcp-apps/bridge.js +319 -0
- package/dist/mcp-apps/bridge.js.map +1 -0
- package/dist/mcp-apps/csp.d.ts +4 -0
- package/dist/mcp-apps/csp.d.ts.map +1 -0
- package/dist/mcp-apps/csp.js +92 -0
- package/dist/mcp-apps/csp.js.map +1 -0
- package/dist/mcp-apps/index.d.ts +5 -0
- package/dist/mcp-apps/index.d.ts.map +1 -0
- package/dist/mcp-apps/index.js +4 -0
- package/dist/mcp-apps/types.d.ts +161 -0
- package/dist/mcp-apps/types.d.ts.map +1 -0
- package/dist/mcp-apps/types.js +6 -0
- package/dist/mcp-apps/types.js.map +1 -0
- package/dist/mcp-apps/utils.d.ts +12 -0
- package/dist/mcp-apps/utils.d.ts.map +1 -0
- package/dist/mcp-apps/utils.js +18 -0
- package/dist/mcp-apps/utils.js.map +1 -0
- package/dist/model-context/frame/useAssistantFrameHost.d.ts +35 -0
- package/dist/model-context/frame/useAssistantFrameHost.d.ts.map +1 -0
- package/dist/model-context/frame/useAssistantFrameHost.js +109 -0
- package/dist/model-context/frame/useAssistantFrameHost.js.map +1 -0
- package/dist/model-context/makeAssistantVisible.d.ts +11 -0
- package/dist/model-context/makeAssistantVisible.d.ts.map +1 -0
- package/dist/model-context/makeAssistantVisible.js +102 -0
- package/dist/model-context/makeAssistantVisible.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarCopy.d.ts +45 -0
- package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarCopy.js +71 -0
- package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarEdit.d.ts +55 -0
- package/dist/primitives/actionBar/ActionBarEdit.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarEdit.js +47 -0
- package/dist/primitives/actionBar/ActionBarEdit.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts +26 -0
- package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarExportMarkdown.js +39 -0
- package/dist/primitives/actionBar/ActionBarExportMarkdown.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts +13 -0
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +28 -0
- package/dist/primitives/actionBar/ActionBarFeedbackNegative.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts +13 -0
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +28 -0
- package/dist/primitives/actionBar/ActionBarFeedbackPositive.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts +7 -0
- package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarInteractionContext.js +8 -0
- package/dist/primitives/actionBar/ActionBarInteractionContext.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarReload.d.ts +56 -0
- package/dist/primitives/actionBar/ActionBarReload.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarReload.js +48 -0
- package/dist/primitives/actionBar/ActionBarReload.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarRoot.d.ts +78 -0
- package/dist/primitives/actionBar/ActionBarRoot.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarRoot.js +69 -0
- package/dist/primitives/actionBar/ActionBarRoot.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarSpeak.d.ts +17 -0
- package/dist/primitives/actionBar/ActionBarSpeak.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarSpeak.js +13 -0
- package/dist/primitives/actionBar/ActionBarSpeak.js.map +1 -0
- package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts +17 -0
- package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts.map +1 -0
- package/dist/primitives/actionBar/ActionBarStopSpeaking.js +13 -0
- package/dist/primitives/actionBar/ActionBarStopSpeaking.js.map +1 -0
- package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts +15 -0
- package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts.map +1 -0
- package/dist/primitives/actionBar/useActionBarFloatStatus.js +24 -0
- package/dist/primitives/actionBar/useActionBarFloatStatus.js.map +1 -0
- package/dist/primitives/actionBar.d.ts +10 -0
- package/dist/primitives/actionBar.d.ts.map +1 -0
- package/dist/primitives/actionBar.js +25 -0
- package/dist/primitives/actionBar.js.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts +47 -0
- package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreContent.js +29 -0
- package/dist/primitives/actionBarMore/ActionBarMoreContent.js.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts +19 -0
- package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreItem.js +24 -0
- package/dist/primitives/actionBarMore/ActionBarMoreItem.js.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts +10 -0
- package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreRoot.js +39 -0
- package/dist/primitives/actionBarMore/ActionBarMoreRoot.js.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts +16 -0
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js +24 -0
- package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts +17 -0
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts.map +1 -0
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js +24 -0
- package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js.map +1 -0
- package/dist/primitives/actionBarMore/scope.d.ts +5 -0
- package/dist/primitives/actionBarMore/scope.d.ts.map +1 -0
- package/dist/primitives/actionBarMore/scope.js +7 -0
- package/dist/primitives/actionBarMore/scope.js.map +1 -0
- package/dist/primitives/actionBarMore.d.ts +6 -0
- package/dist/primitives/actionBarMore.d.ts.map +1 -0
- package/dist/primitives/actionBarMore.js +17 -0
- package/dist/primitives/actionBarMore.js.map +1 -0
- package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts +17 -0
- package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts.map +1 -0
- package/dist/primitives/assistantModal/AssistantModalAnchor.js +24 -0
- package/dist/primitives/assistantModal/AssistantModalAnchor.js.map +1 -0
- package/dist/primitives/assistantModal/AssistantModalContent.d.ts +50 -0
- package/dist/primitives/assistantModal/AssistantModalContent.d.ts.map +1 -0
- package/dist/primitives/assistantModal/AssistantModalContent.js +42 -0
- package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -0
- package/dist/primitives/assistantModal/AssistantModalRoot.d.ts +14 -0
- package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -0
- package/dist/primitives/assistantModal/AssistantModalRoot.js +35 -0
- package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -0
- package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts +16 -0
- package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts.map +1 -0
- package/dist/primitives/assistantModal/AssistantModalTrigger.js +24 -0
- package/dist/primitives/assistantModal/AssistantModalTrigger.js.map +1 -0
- package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts +139 -0
- package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts.map +1 -0
- package/dist/primitives/assistantModal/popoverRenderPrimitives.js +9 -0
- package/dist/primitives/assistantModal/popoverRenderPrimitives.js.map +1 -0
- package/dist/primitives/assistantModal/scope.d.ts +5 -0
- package/dist/primitives/assistantModal/scope.d.ts.map +1 -0
- package/dist/primitives/assistantModal/scope.js +7 -0
- package/dist/primitives/assistantModal/scope.js.map +1 -0
- package/dist/primitives/assistantModal.d.ts +5 -0
- package/dist/primitives/assistantModal.d.ts.map +1 -0
- package/dist/primitives/assistantModal.js +15 -0
- package/dist/primitives/assistantModal.js.map +1 -0
- package/dist/primitives/attachment/AttachmentName.d.ts +5 -0
- package/dist/primitives/attachment/AttachmentName.d.ts.map +1 -0
- package/dist/primitives/attachment/AttachmentName.js +14 -0
- package/dist/primitives/attachment/AttachmentName.js.map +1 -0
- package/dist/primitives/attachment/AttachmentRemove.d.ts +17 -0
- package/dist/primitives/attachment/AttachmentRemove.d.ts.map +1 -0
- package/dist/primitives/attachment/AttachmentRemove.js +15 -0
- package/dist/primitives/attachment/AttachmentRemove.js.map +1 -0
- package/dist/primitives/attachment/AttachmentRoot.d.ts +30 -0
- package/dist/primitives/attachment/AttachmentRoot.d.ts.map +1 -0
- package/dist/primitives/attachment/AttachmentRoot.js +40 -0
- package/dist/primitives/attachment/AttachmentRoot.js.map +1 -0
- package/dist/primitives/attachment/AttachmentThumb.d.ts +12 -0
- package/dist/primitives/attachment/AttachmentThumb.d.ts.map +1 -0
- package/dist/primitives/attachment/AttachmentThumb.js +32 -0
- package/dist/primitives/attachment/AttachmentThumb.js.map +1 -0
- package/dist/primitives/attachment.d.ts +7 -0
- package/dist/primitives/attachment.d.ts.map +1 -0
- package/dist/primitives/attachment.js +15 -0
- package/dist/primitives/attachment.js.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerCount.d.ts +22 -0
- package/dist/primitives/branchPicker/BranchPickerCount.d.ts.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerCount.js +27 -0
- package/dist/primitives/branchPicker/BranchPickerCount.js.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerNext.d.ts +34 -0
- package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerNext.js +26 -0
- package/dist/primitives/branchPicker/BranchPickerNext.js.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerNumber.d.ts +5 -0
- package/dist/primitives/branchPicker/BranchPickerNumber.d.ts.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerNumber.js +14 -0
- package/dist/primitives/branchPicker/BranchPickerNumber.js.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts +34 -0
- package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerPrevious.js +26 -0
- package/dist/primitives/branchPicker/BranchPickerPrevious.js.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerRoot.d.ts +43 -0
- package/dist/primitives/branchPicker/BranchPickerRoot.d.ts.map +1 -0
- package/dist/primitives/branchPicker/BranchPickerRoot.js +46 -0
- package/dist/primitives/branchPicker/BranchPickerRoot.js.map +1 -0
- package/dist/primitives/branchPicker.d.ts +6 -0
- package/dist/primitives/branchPicker.d.ts.map +1 -0
- package/dist/primitives/branchPicker.js +17 -0
- package/dist/primitives/branchPicker.js.map +1 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts +30 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts.map +1 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js +49 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js.map +1 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtParts.d.ts +2 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtParts.js +2 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts +12 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts.map +1 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js +26 -0
- package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js.map +1 -0
- package/dist/primitives/chainOfThought.d.ts +4 -0
- package/dist/primitives/chainOfThought.d.ts.map +1 -0
- package/dist/primitives/chainOfThought.js +13 -0
- package/dist/primitives/chainOfThought.js.map +1 -0
- package/dist/primitives/composer/ComposerAddAttachment.d.ts +26 -0
- package/dist/primitives/composer/ComposerAddAttachment.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerAddAttachment.js +56 -0
- package/dist/primitives/composer/ComposerAddAttachment.js.map +1 -0
- package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts +16 -0
- package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerAttachmentDropzone.js +66 -0
- package/dist/primitives/composer/ComposerAttachmentDropzone.js.map +1 -0
- package/dist/primitives/composer/ComposerAttachments.d.ts +2 -0
- package/dist/primitives/composer/ComposerAttachments.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerAttachments.js +2 -0
- package/dist/primitives/composer/ComposerCancel.d.ts +37 -0
- package/dist/primitives/composer/ComposerCancel.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerCancel.js +32 -0
- package/dist/primitives/composer/ComposerCancel.js.map +1 -0
- package/dist/primitives/composer/ComposerCompactContext.d.ts +7 -0
- package/dist/primitives/composer/ComposerCompactContext.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerCompactContext.js +8 -0
- package/dist/primitives/composer/ComposerCompactContext.js.map +1 -0
- package/dist/primitives/composer/ComposerDictate.d.ts +29 -0
- package/dist/primitives/composer/ComposerDictate.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerDictate.js +25 -0
- package/dist/primitives/composer/ComposerDictate.js.map +1 -0
- package/dist/primitives/composer/ComposerDictationTranscript.d.ts +27 -0
- package/dist/primitives/composer/ComposerDictationTranscript.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerDictationTranscript.js +42 -0
- package/dist/primitives/composer/ComposerDictationTranscript.js.map +1 -0
- package/dist/primitives/composer/ComposerIf.d.ts +3 -0
- package/dist/primitives/composer/ComposerIf.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerIf.js +2 -0
- package/dist/primitives/composer/ComposerInput.d.ts +132 -0
- package/dist/primitives/composer/ComposerInput.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerInput.js +239 -0
- package/dist/primitives/composer/ComposerInput.js.map +1 -0
- package/dist/primitives/composer/ComposerInputPluginContext.d.ts +40 -0
- package/dist/primitives/composer/ComposerInputPluginContext.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerInputPluginContext.js +30 -0
- package/dist/primitives/composer/ComposerInputPluginContext.js.map +1 -0
- package/dist/primitives/composer/ComposerQueue.d.ts +2 -0
- package/dist/primitives/composer/ComposerQueue.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerQueue.js +2 -0
- package/dist/primitives/composer/ComposerQuote.d.ts +58 -0
- package/dist/primitives/composer/ComposerQuote.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerQuote.js +95 -0
- package/dist/primitives/composer/ComposerQuote.js.map +1 -0
- package/dist/primitives/composer/ComposerResume.d.ts +27 -0
- package/dist/primitives/composer/ComposerResume.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerResume.js +24 -0
- package/dist/primitives/composer/ComposerResume.js.map +1 -0
- package/dist/primitives/composer/ComposerRoot.d.ts +56 -0
- package/dist/primitives/composer/ComposerRoot.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerRoot.js +96 -0
- package/dist/primitives/composer/ComposerRoot.js.map +1 -0
- package/dist/primitives/composer/ComposerSend.d.ts +34 -0
- package/dist/primitives/composer/ComposerSend.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerSend.js +28 -0
- package/dist/primitives/composer/ComposerSend.js.map +1 -0
- package/dist/primitives/composer/ComposerStopDictation.d.ts +29 -0
- package/dist/primitives/composer/ComposerStopDictation.d.ts.map +1 -0
- package/dist/primitives/composer/ComposerStopDictation.js +29 -0
- package/dist/primitives/composer/ComposerStopDictation.js.map +1 -0
- package/dist/primitives/composer/composerInputSelector.d.ts +3 -0
- package/dist/primitives/composer/composerInputSelector.d.ts.map +1 -0
- package/dist/primitives/composer/composerInputSelector.js +6 -0
- package/dist/primitives/composer/composerInputSelector.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopover.d.ts +63 -0
- package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopover.js +161 -0
- package/dist/primitives/composer/trigger/TriggerPopover.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts +30 -0
- package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverAction.js +49 -0
- package/dist/primitives/composer/trigger/TriggerPopoverAction.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts +16 -0
- package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverBack.js +34 -0
- package/dist/primitives/composer/trigger/TriggerPopoverBack.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts +34 -0
- package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverCategories.js +70 -0
- package/dist/primitives/composer/trigger/TriggerPopoverCategories.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts +27 -0
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.js +41 -0
- package/dist/primitives/composer/trigger/TriggerPopoverDirective.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts +36 -0
- package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverItems.js +71 -0
- package/dist/primitives/composer/trigger/TriggerPopoverItems.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts +48 -0
- package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverResource.js +67 -0
- package/dist/primitives/composer/trigger/TriggerPopoverResource.js.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts +58 -0
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js +128 -0
- package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js.map +1 -0
- package/dist/primitives/composer/trigger/detectTrigger.d.ts +18 -0
- package/dist/primitives/composer/trigger/detectTrigger.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/detectTrigger.js +39 -0
- package/dist/primitives/composer/trigger/detectTrigger.js.map +1 -0
- package/dist/primitives/composer/trigger/index.d.ts +20 -0
- package/dist/primitives/composer/trigger/index.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/index.js +15 -0
- package/dist/primitives/composer/trigger/index.js.map +1 -0
- package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts +3 -0
- package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/matchesTriggerItemQuery.js +8 -0
- package/dist/primitives/composer/trigger/matchesTriggerItemQuery.js.map +1 -0
- package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts +17 -0
- package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/triggerDetectionResource.js +25 -0
- package/dist/primitives/composer/trigger/triggerDetectionResource.js.map +1 -0
- package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts +30 -0
- package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/triggerKeyboardResource.js +85 -0
- package/dist/primitives/composer/trigger/triggerKeyboardResource.js.map +1 -0
- package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts +23 -0
- package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/triggerNavigationResource.js +88 -0
- package/dist/primitives/composer/trigger/triggerNavigationResource.js.map +1 -0
- package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts +37 -0
- package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts.map +1 -0
- package/dist/primitives/composer/trigger/triggerSelectionResource.js +52 -0
- package/dist/primitives/composer/trigger/triggerSelectionResource.js.map +1 -0
- package/dist/primitives/composer/useComposerCancelWithFocus.d.ts +2 -0
- package/dist/primitives/composer/useComposerCancelWithFocus.d.ts.map +1 -0
- package/dist/primitives/composer/useComposerCancelWithFocus.js +31 -0
- package/dist/primitives/composer/useComposerCancelWithFocus.js.map +1 -0
- package/dist/primitives/composer/useComposerInputState.d.ts +11 -0
- package/dist/primitives/composer/useComposerInputState.d.ts.map +1 -0
- package/dist/primitives/composer/useComposerInputState.js +33 -0
- package/dist/primitives/composer/useComposerInputState.js.map +1 -0
- package/dist/primitives/composer/useTextareaAutosize.d.ts +13 -0
- package/dist/primitives/composer/useTextareaAutosize.d.ts.map +1 -0
- package/dist/primitives/composer/useTextareaAutosize.js +113 -0
- package/dist/primitives/composer/useTextareaAutosize.js.map +1 -0
- package/dist/primitives/composer.d.ts +73 -0
- package/dist/primitives/composer.d.ts.map +1 -0
- package/dist/primitives/composer.js +64 -0
- package/dist/primitives/composer.js.map +1 -0
- package/dist/primitives/dropdownMenuRenderPrimitives.d.ts +173 -0
- package/dist/primitives/dropdownMenuRenderPrimitives.d.ts.map +1 -0
- package/dist/primitives/dropdownMenuRenderPrimitives.js +10 -0
- package/dist/primitives/dropdownMenuRenderPrimitives.js.map +1 -0
- package/dist/primitives/error/ErrorMessage.d.ts +12 -0
- package/dist/primitives/error/ErrorMessage.d.ts.map +1 -0
- package/dist/primitives/error/ErrorMessage.js +27 -0
- package/dist/primitives/error/ErrorMessage.js.map +1 -0
- package/dist/primitives/error/ErrorRoot.d.ts +12 -0
- package/dist/primitives/error/ErrorRoot.d.ts.map +1 -0
- package/dist/primitives/error/ErrorRoot.js +27 -0
- package/dist/primitives/error/ErrorRoot.js.map +1 -0
- package/dist/primitives/error.d.ts +3 -0
- package/dist/primitives/error.d.ts.map +1 -0
- package/dist/primitives/error.js +11 -0
- package/dist/primitives/error.js.map +1 -0
- package/dist/primitives/message/MessageAttachments.d.ts +2 -0
- package/dist/primitives/message/MessageAttachments.d.ts.map +1 -0
- package/dist/primitives/message/MessageAttachments.js +2 -0
- package/dist/primitives/message/MessageError.d.ts +7 -0
- package/dist/primitives/message/MessageError.d.ts.map +1 -0
- package/dist/primitives/message/MessageError.js +14 -0
- package/dist/primitives/message/MessageError.js.map +1 -0
- package/dist/primitives/message/MessageIf.d.ts +27 -0
- package/dist/primitives/message/MessageIf.d.ts.map +1 -0
- package/dist/primitives/message/MessageIf.js +54 -0
- package/dist/primitives/message/MessageIf.js.map +1 -0
- package/dist/primitives/message/MessageParts.d.ts +7 -0
- package/dist/primitives/message/MessageParts.d.ts.map +1 -0
- package/dist/primitives/message/MessageParts.js +40 -0
- package/dist/primitives/message/MessageParts.js.map +1 -0
- package/dist/primitives/message/MessagePartsGrouped.d.ts +153 -0
- package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -0
- package/dist/primitives/message/MessagePartsGrouped.js +114 -0
- package/dist/primitives/message/MessagePartsGrouped.js.map +1 -0
- package/dist/primitives/message/MessageRoot.d.ts +35 -0
- package/dist/primitives/message/MessageRoot.d.ts.map +1 -0
- package/dist/primitives/message/MessageRoot.js +104 -0
- package/dist/primitives/message/MessageRoot.js.map +1 -0
- package/dist/primitives/message.d.ts +13 -0
- package/dist/primitives/message.d.ts.map +1 -0
- package/dist/primitives/message.js +27 -0
- package/dist/primitives/message.js.map +1 -0
- package/dist/primitives/messagePart/MessagePartImage.d.ts +12 -0
- package/dist/primitives/messagePart/MessagePartImage.d.ts.map +1 -0
- package/dist/primitives/messagePart/MessagePartImage.js +27 -0
- package/dist/primitives/messagePart/MessagePartImage.js.map +1 -0
- package/dist/primitives/messagePart/MessagePartInProgress.d.ts +2 -0
- package/dist/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -0
- package/dist/primitives/messagePart/MessagePartInProgress.js +2 -0
- package/dist/primitives/messagePart/MessagePartText.d.ts +19 -0
- package/dist/primitives/messagePart/MessagePartText.d.ts.map +1 -0
- package/dist/primitives/messagePart/MessagePartText.js +33 -0
- package/dist/primitives/messagePart/MessagePartText.js.map +1 -0
- package/dist/primitives/messagePart/useMessagePartData.d.ts +18 -0
- package/dist/primitives/messagePart/useMessagePartData.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartData.js +32 -0
- package/dist/primitives/messagePart/useMessagePartData.js.map +1 -0
- package/dist/primitives/messagePart/useMessagePartFile.d.ts +19 -0
- package/dist/primitives/messagePart/useMessagePartFile.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartFile.js +33 -0
- package/dist/primitives/messagePart/useMessagePartFile.js.map +1 -0
- package/dist/primitives/messagePart/useMessagePartImage.d.ts +19 -0
- package/dist/primitives/messagePart/useMessagePartImage.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartImage.js +32 -0
- package/dist/primitives/messagePart/useMessagePartImage.js.map +1 -0
- package/dist/primitives/messagePart/useMessagePartReasoning.d.ts +19 -0
- package/dist/primitives/messagePart/useMessagePartReasoning.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartReasoning.js +32 -0
- package/dist/primitives/messagePart/useMessagePartReasoning.js.map +1 -0
- package/dist/primitives/messagePart/useMessagePartSource.d.ts +39 -0
- package/dist/primitives/messagePart/useMessagePartSource.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartSource.js +34 -0
- package/dist/primitives/messagePart/useMessagePartSource.js.map +1 -0
- package/dist/primitives/messagePart/useMessagePartText.d.ts +21 -0
- package/dist/primitives/messagePart/useMessagePartText.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartText.js +32 -0
- package/dist/primitives/messagePart/useMessagePartText.js.map +1 -0
- package/dist/primitives/messagePart.d.ts +5 -0
- package/dist/primitives/messagePart.d.ts.map +1 -0
- package/dist/primitives/messagePart.js +15 -0
- package/dist/primitives/messagePart.js.map +1 -0
- package/dist/primitives/queueItem/QueueItemRemove.d.ts +25 -0
- package/dist/primitives/queueItem/QueueItemRemove.d.ts.map +1 -0
- package/dist/primitives/queueItem/QueueItemRemove.js +23 -0
- package/dist/primitives/queueItem/QueueItemRemove.js.map +1 -0
- package/dist/primitives/queueItem/QueueItemSteer.d.ts +25 -0
- package/dist/primitives/queueItem/QueueItemSteer.d.ts.map +1 -0
- package/dist/primitives/queueItem/QueueItemSteer.js +23 -0
- package/dist/primitives/queueItem/QueueItemSteer.js.map +1 -0
- package/dist/primitives/queueItem/QueueItemText.d.ts +20 -0
- package/dist/primitives/queueItem/QueueItemText.d.ts.map +1 -0
- package/dist/primitives/queueItem/QueueItemText.js +35 -0
- package/dist/primitives/queueItem/QueueItemText.js.map +1 -0
- package/dist/primitives/queueItem.d.ts +4 -0
- package/dist/primitives/queueItem.d.ts.map +1 -0
- package/dist/primitives/queueItem.js +13 -0
- package/dist/primitives/queueItem.js.map +1 -0
- package/dist/primitives/reasoning/useScrollLock.d.ts +29 -0
- package/dist/primitives/reasoning/useScrollLock.d.ts.map +1 -0
- package/dist/primitives/reasoning/useScrollLock.js +108 -0
- package/dist/primitives/reasoning/useScrollLock.js.map +1 -0
- package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts +13 -0
- package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts.map +1 -0
- package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js +43 -0
- package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js.map +1 -0
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts +20 -0
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts.map +1 -0
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +147 -0
- package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -0
- package/dist/primitives/selectionToolbar.d.ts +3 -0
- package/dist/primitives/selectionToolbar.d.ts.map +1 -0
- package/dist/primitives/selectionToolbar.js +11 -0
- package/dist/primitives/selectionToolbar.js.map +1 -0
- package/dist/primitives/suggestion/SuggestionDescription.d.ts +13 -0
- package/dist/primitives/suggestion/SuggestionDescription.d.ts.map +1 -0
- package/dist/primitives/suggestion/SuggestionDescription.js +28 -0
- package/dist/primitives/suggestion/SuggestionDescription.js.map +1 -0
- package/dist/primitives/suggestion/SuggestionTitle.d.ts +20 -0
- package/dist/primitives/suggestion/SuggestionTitle.d.ts.map +1 -0
- package/dist/primitives/suggestion/SuggestionTitle.js +35 -0
- package/dist/primitives/suggestion/SuggestionTitle.js.map +1 -0
- package/dist/primitives/suggestion/SuggestionTrigger.d.ts +72 -0
- package/dist/primitives/suggestion/SuggestionTrigger.d.ts.map +1 -0
- package/dist/primitives/suggestion/SuggestionTrigger.js +29 -0
- package/dist/primitives/suggestion/SuggestionTrigger.js.map +1 -0
- package/dist/primitives/suggestion.d.ts +4 -0
- package/dist/primitives/suggestion.d.ts.map +1 -0
- package/dist/primitives/suggestion.js +13 -0
- package/dist/primitives/suggestion.js.map +1 -0
- package/dist/primitives/thread/ThreadEmpty.d.ts +11 -0
- package/dist/primitives/thread/ThreadEmpty.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadEmpty.js +17 -0
- package/dist/primitives/thread/ThreadEmpty.js.map +1 -0
- package/dist/primitives/thread/ThreadIf.d.ts +19 -0
- package/dist/primitives/thread/ThreadIf.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadIf.js +33 -0
- package/dist/primitives/thread/ThreadIf.js.map +1 -0
- package/dist/primitives/thread/ThreadLoadEarlier.d.ts +23 -0
- package/dist/primitives/thread/ThreadLoadEarlier.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadLoadEarlier.js +23 -0
- package/dist/primitives/thread/ThreadLoadEarlier.js.map +1 -0
- package/dist/primitives/thread/ThreadMessages.d.ts +2 -0
- package/dist/primitives/thread/ThreadMessages.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadMessages.js +2 -0
- package/dist/primitives/thread/ThreadRoot.d.ts +37 -0
- package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadRoot.js +84 -0
- package/dist/primitives/thread/ThreadRoot.js.map +1 -0
- package/dist/primitives/thread/ThreadRootElementContext.d.ts +4 -0
- package/dist/primitives/thread/ThreadRootElementContext.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadRootElementContext.js +8 -0
- package/dist/primitives/thread/ThreadRootElementContext.js.map +1 -0
- package/dist/primitives/thread/ThreadScrollToBottom.d.ts +22 -0
- package/dist/primitives/thread/ThreadScrollToBottom.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadScrollToBottom.js +17 -0
- package/dist/primitives/thread/ThreadScrollToBottom.js.map +1 -0
- package/dist/primitives/thread/ThreadSuggestion.d.ts +80 -0
- package/dist/primitives/thread/ThreadSuggestion.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadSuggestion.js +23 -0
- package/dist/primitives/thread/ThreadSuggestion.js.map +1 -0
- package/dist/primitives/thread/ThreadSuggestions.d.ts +2 -0
- package/dist/primitives/thread/ThreadSuggestions.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadSuggestions.js +2 -0
- package/dist/primitives/thread/ThreadViewport.d.ts +115 -0
- package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadViewport.js +96 -0
- package/dist/primitives/thread/ThreadViewport.js.map +1 -0
- package/dist/primitives/thread/ThreadViewportFooter.d.ts +13 -0
- package/dist/primitives/thread/ThreadViewportFooter.d.ts.map +1 -0
- package/dist/primitives/thread/ThreadViewportFooter.js +39 -0
- package/dist/primitives/thread/ThreadViewportFooter.js.map +1 -0
- package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts +22 -0
- package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.js +51 -0
- package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.js.map +1 -0
- package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts +5 -0
- package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/createReserveObservers.js +37 -0
- package/dist/primitives/thread/topAnchor/createReserveObservers.js.map +1 -0
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts +26 -0
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js +139 -0
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js.map +1 -0
- package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts +27 -0
- package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/topAnchorTurn.js +30 -0
- package/dist/primitives/thread/topAnchor/topAnchorTurn.js.map +1 -0
- package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts +15 -0
- package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/topAnchorUtils.js +46 -0
- package/dist/primitives/thread/topAnchor/topAnchorUtils.js.map +1 -0
- package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts +8 -0
- package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js +21 -0
- package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js.map +1 -0
- package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts +32 -0
- package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -0
- package/dist/primitives/thread/useThreadViewportAutoScroll.js +74 -0
- package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -0
- package/dist/primitives/thread.d.ts +15 -0
- package/dist/primitives/thread.d.ts.map +1 -0
- package/dist/primitives/thread.js +33 -0
- package/dist/primitives/thread.js.map +1 -0
- package/dist/primitives/threadList/ThreadListItems.d.ts +2 -0
- package/dist/primitives/threadList/ThreadListItems.d.ts.map +1 -0
- package/dist/primitives/threadList/ThreadListItems.js +2 -0
- package/dist/primitives/threadList/ThreadListLoadMore.d.ts +17 -0
- package/dist/primitives/threadList/ThreadListLoadMore.d.ts.map +1 -0
- package/dist/primitives/threadList/ThreadListLoadMore.js +13 -0
- package/dist/primitives/threadList/ThreadListLoadMore.js.map +1 -0
- package/dist/primitives/threadList/ThreadListNew.d.ts +11 -0
- package/dist/primitives/threadList/ThreadListNew.d.ts.map +1 -0
- package/dist/primitives/threadList/ThreadListNew.js +29 -0
- package/dist/primitives/threadList/ThreadListNew.js.map +1 -0
- package/dist/primitives/threadList/ThreadListRoot.d.ts +12 -0
- package/dist/primitives/threadList/ThreadListRoot.d.ts.map +1 -0
- package/dist/primitives/threadList/ThreadListRoot.js +25 -0
- package/dist/primitives/threadList/ThreadListRoot.js.map +1 -0
- package/dist/primitives/threadList.d.ts +6 -0
- package/dist/primitives/threadList.d.ts.map +1 -0
- package/dist/primitives/threadList.js +16 -0
- package/dist/primitives/threadList.js.map +1 -0
- package/dist/primitives/threadListFocusGroup.d.ts +28 -0
- package/dist/primitives/threadListFocusGroup.d.ts.map +1 -0
- package/dist/primitives/threadListFocusGroup.js +64 -0
- package/dist/primitives/threadListFocusGroup.js.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts +17 -0
- package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemArchive.js +12 -0
- package/dist/primitives/threadListItem/ThreadListItemArchive.js.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts +17 -0
- package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemDelete.js +12 -0
- package/dist/primitives/threadListItem/ThreadListItemDelete.js.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts +12 -0
- package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemRoot.js +61 -0
- package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemTitle.d.ts +2 -0
- package/dist/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemTitle.js +2 -0
- package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts +13 -0
- package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemTrigger.js +35 -0
- package/dist/primitives/threadListItem/ThreadListItemTrigger.js.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts +17 -0
- package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts.map +1 -0
- package/dist/primitives/threadListItem/ThreadListItemUnarchive.js +13 -0
- package/dist/primitives/threadListItem/ThreadListItemUnarchive.js.map +1 -0
- package/dist/primitives/threadListItem.d.ts +7 -0
- package/dist/primitives/threadListItem.d.ts.map +1 -0
- package/dist/primitives/threadListItem.js +19 -0
- package/dist/primitives/threadListItem.js.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts +47 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js +48 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts +19 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js +24 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts +19 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js +45 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts +16 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js +24 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts +17 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts.map +1 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js +42 -0
- package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js.map +1 -0
- package/dist/primitives/threadListItemMore/scope.d.ts +5 -0
- package/dist/primitives/threadListItemMore/scope.d.ts.map +1 -0
- package/dist/primitives/threadListItemMore/scope.js +7 -0
- package/dist/primitives/threadListItemMore/scope.js.map +1 -0
- package/dist/primitives/threadListItemMore.d.ts +6 -0
- package/dist/primitives/threadListItemMore.d.ts.map +1 -0
- package/dist/primitives/threadListItemMore.js +17 -0
- package/dist/primitives/threadListItemMore.js.map +1 -0
- package/dist/sandbox-host/SandboxHost.d.ts +38 -0
- package/dist/sandbox-host/SandboxHost.d.ts.map +1 -0
- package/dist/sandbox-host/SandboxHost.js +146 -0
- package/dist/sandbox-host/SandboxHost.js.map +1 -0
- package/dist/unstable/useComposerInput.d.ts +87 -0
- package/dist/unstable/useComposerInput.d.ts.map +1 -0
- package/dist/unstable/useComposerInput.js +77 -0
- package/dist/unstable/useComposerInput.js.map +1 -0
- package/dist/unstable/useComposerInputHistory.d.ts +27 -0
- package/dist/unstable/useComposerInputHistory.d.ts.map +1 -0
- package/dist/unstable/useComposerInputHistory.js +125 -0
- package/dist/unstable/useComposerInputHistory.js.map +1 -0
- package/dist/unstable/useLiveCompletionAdapter.d.ts +52 -0
- package/dist/unstable/useLiveCompletionAdapter.d.ts.map +1 -0
- package/dist/unstable/useLiveCompletionAdapter.js +184 -0
- package/dist/unstable/useLiveCompletionAdapter.js.map +1 -0
- package/dist/unstable/useMentionAdapter.d.ts +95 -0
- package/dist/unstable/useMentionAdapter.d.ts.map +1 -0
- package/dist/unstable/useMentionAdapter.js +129 -0
- package/dist/unstable/useMentionAdapter.js.map +1 -0
- package/dist/unstable/useMessageStallDetection.d.ts +30 -0
- package/dist/unstable/useMessageStallDetection.d.ts.map +1 -0
- package/dist/unstable/useMessageStallDetection.js +92 -0
- package/dist/unstable/useMessageStallDetection.js.map +1 -0
- package/dist/unstable/useModelContextSnapshot.d.ts +32 -0
- package/dist/unstable/useModelContextSnapshot.d.ts.map +1 -0
- package/dist/unstable/useModelContextSnapshot.js +46 -0
- package/dist/unstable/useModelContextSnapshot.js.map +1 -0
- package/dist/unstable/useSlashCommandAdapter.d.ts +53 -0
- package/dist/unstable/useSlashCommandAdapter.d.ts.map +1 -0
- package/dist/unstable/useSlashCommandAdapter.js +84 -0
- package/dist/unstable/useSlashCommandAdapter.js.map +1 -0
- package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts +12 -0
- package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts.map +1 -0
- package/dist/unstable/webmcp/WebMcpRegistrationResource.js +47 -0
- package/dist/unstable/webmcp/WebMcpRegistrationResource.js.map +1 -0
- package/dist/unstable/webmcp/convertTools.d.ts +18 -0
- package/dist/unstable/webmcp/convertTools.d.ts.map +1 -0
- package/dist/unstable/webmcp/convertTools.js +160 -0
- package/dist/unstable/webmcp/convertTools.js.map +1 -0
- package/dist/unstable/webmcp/useWebMcpProvider.d.ts +23 -0
- package/dist/unstable/webmcp/useWebMcpProvider.d.ts.map +1 -0
- package/dist/unstable/webmcp/useWebMcpProvider.js +111 -0
- package/dist/unstable/webmcp/useWebMcpProvider.js.map +1 -0
- package/dist/unstable/webmcp/webmcp-host.d.ts +36 -0
- package/dist/unstable/webmcp/webmcp-host.d.ts.map +1 -0
- package/dist/unstable/webmcp/webmcp-host.js +28 -0
- package/dist/unstable/webmcp/webmcp-host.js.map +1 -0
- package/dist/utils/Primitive.d.ts +28 -0
- package/dist/utils/Primitive.d.ts.map +1 -0
- package/dist/utils/Primitive.js +229 -0
- package/dist/utils/Primitive.js.map +1 -0
- package/dist/utils/RequireAtLeastOne.d.ts +4 -0
- package/dist/utils/RequireAtLeastOne.d.ts.map +1 -0
- package/dist/utils/RequireAtLeastOne.js +0 -0
- package/dist/utils/createActionButton.d.ts +18 -0
- package/dist/utils/createActionButton.d.ts.map +1 -0
- package/dist/utils/createActionButton.js +39 -0
- package/dist/utils/createActionButton.js.map +1 -0
- package/dist/utils/getSelectionMessageId.d.ts +2 -0
- package/dist/utils/getSelectionMessageId.d.ts.map +1 -0
- package/dist/utils/getSelectionMessageId.js +84 -0
- package/dist/utils/getSelectionMessageId.js.map +1 -0
- package/dist/utils/hooks/useManagedRef.d.ts +2 -0
- package/dist/utils/hooks/useManagedRef.d.ts.map +1 -0
- package/dist/utils/hooks/useManagedRef.js +15 -0
- package/dist/utils/hooks/useManagedRef.js.map +1 -0
- package/dist/utils/hooks/useMediaQuery.d.ts +3 -0
- package/dist/utils/hooks/useMediaQuery.d.ts.map +1 -0
- package/dist/utils/hooks/useMediaQuery.js +33 -0
- package/dist/utils/hooks/useMediaQuery.js.map +1 -0
- package/dist/utils/hooks/useOnScrollToBottom.d.ts +7 -0
- package/dist/utils/hooks/useOnScrollToBottom.d.ts.map +1 -0
- package/dist/utils/hooks/useOnScrollToBottom.js +15 -0
- package/dist/utils/hooks/useOnScrollToBottom.js.map +1 -0
- package/dist/utils/hooks/useSizeHandle.d.ts +12 -0
- package/dist/utils/hooks/useSizeHandle.d.ts.map +1 -0
- package/dist/utils/hooks/useSizeHandle.js +33 -0
- package/dist/utils/hooks/useSizeHandle.js.map +1 -0
- package/dist/utils/isCompositionKey.d.ts +2 -0
- package/dist/utils/isCompositionKey.d.ts.map +1 -0
- package/dist/utils/isCompositionKey.js +5 -0
- package/dist/utils/isCompositionKey.js.map +1 -0
- package/dist/utils/smooth/SmoothContext.d.ts +117 -0
- package/dist/utils/smooth/SmoothContext.d.ts.map +1 -0
- package/dist/utils/smooth/SmoothContext.js +40 -0
- package/dist/utils/smooth/SmoothContext.js.map +1 -0
- package/dist/utils/smooth/useSmooth.d.ts +63 -0
- package/dist/utils/smooth/useSmooth.d.ts.map +1 -0
- package/dist/utils/smooth/useSmooth.js +144 -0
- package/dist/utils/smooth/useSmooth.js.map +1 -0
- package/dist/utils/useIsomorphicLayoutEffect.d.ts +2 -0
- package/dist/utils/useIsomorphicLayoutEffect.d.ts.map +1 -0
- package/dist/utils/useIsomorphicLayoutEffect.js +1 -0
- package/package.json +115 -3
- package/src/adapters/OpenAIRealtimeVoiceAdapter.test.ts +761 -0
- package/src/adapters/OpenAIRealtimeVoiceAdapter.ts +388 -0
- package/src/assistant-transport.ts +98 -0
- package/src/augmentations.ts +35 -0
- package/src/context/ReadonlyStore.ts +7 -0
- package/src/context/index.ts +23 -0
- package/src/context/providers/AttachmentByIndexProvider.tsx +6 -0
- package/src/context/providers/ChainOfThoughtByIndicesProvider.tsx +3 -0
- package/src/context/providers/MessageByIndexProvider.tsx +3 -0
- package/src/context/providers/MessageProvider.tsx +34 -0
- package/src/context/providers/PartByIndexProvider.tsx +3 -0
- package/src/context/providers/SuggestionByIndexProvider.tsx +6 -0
- package/src/context/providers/TextMessagePartProvider.tsx +3 -0
- package/src/context/providers/ThreadListItemProvider.tsx +6 -0
- package/src/context/providers/ThreadViewportProvider.tsx +49 -0
- package/src/context/providers/vue-providers.test.tsx +326 -0
- package/src/context/stores/ThreadViewport.test.ts +29 -0
- package/src/context/stores/ThreadViewport.ts +278 -0
- package/src/context/vue/ThreadViewportContext.ts +22 -0
- package/src/context/vue/utils/createContextHook.ts +26 -0
- package/src/context/vue/utils/createContextStoreHook.ts +93 -0
- package/src/devtools/DevToolsHooks.test.ts +40 -0
- package/src/devtools/DevToolsHooks.ts +142 -0
- package/src/hooks/message-readers.test.ts +128 -0
- package/src/hooks/useMessageQuote.ts +25 -0
- package/src/hooks/useMessageTiming.ts +26 -0
- package/src/hooks/useToolCallElapsed.test.tsx +172 -0
- package/src/hooks/useToolCallElapsed.ts +65 -0
- package/src/index.ts +623 -0
- package/src/internal.ts +33 -0
- package/src/legacy-runtime/AssistantRuntimeProvider.tsx +61 -0
- package/src/mcp-apps/McpAppRenderer.composer.test.tsx +129 -0
- package/src/mcp-apps/McpAppRenderer.test.tsx +906 -0
- package/src/mcp-apps/McpAppRenderer.tsx +411 -0
- package/src/mcp-apps/McpAppsRemoteHost.concurrent.test.tsx +226 -0
- package/src/mcp-apps/McpAppsRemoteHost.test.ts +152 -0
- package/src/mcp-apps/McpAppsRemoteHost.ts +160 -0
- package/src/mcp-apps/app-frame.test.tsx +648 -0
- package/src/mcp-apps/app-frame.tsx +351 -0
- package/src/mcp-apps/bridge.test.ts +836 -0
- package/src/mcp-apps/bridge.ts +538 -0
- package/src/mcp-apps/csp.test.ts +112 -0
- package/src/mcp-apps/csp.ts +124 -0
- package/src/mcp-apps/index.ts +23 -0
- package/src/mcp-apps/types.ts +176 -0
- package/src/mcp-apps/utils.ts +23 -0
- package/src/model-context/frame/SPEC_AssistantFrame.md +105 -0
- package/src/model-context/frame/useAssistantFrameHost.detach.test.tsx +155 -0
- package/src/model-context/frame/useAssistantFrameHost.reload.test.tsx +116 -0
- package/src/model-context/frame/useAssistantFrameHost.test.tsx +43 -0
- package/src/model-context/frame/useAssistantFrameHost.ts +137 -0
- package/src/model-context/makeAssistantVisible.test.tsx +460 -0
- package/src/model-context/makeAssistantVisible.tsx +184 -0
- package/src/model-context/registry/SPEC_ModelContextRegistry.md +40 -0
- package/src/primitives/actionBar/ActionBarCopy.test.tsx +28 -0
- package/src/primitives/actionBar/ActionBarCopy.tsx +100 -0
- package/src/primitives/actionBar/ActionBarEdit.ts +63 -0
- package/src/primitives/actionBar/ActionBarExportMarkdown.test.tsx +83 -0
- package/src/primitives/actionBar/ActionBarExportMarkdown.tsx +65 -0
- package/src/primitives/actionBar/ActionBarFeedback.test.tsx +59 -0
- package/src/primitives/actionBar/ActionBarFeedbackNegative.tsx +48 -0
- package/src/primitives/actionBar/ActionBarFeedbackPositive.tsx +48 -0
- package/src/primitives/actionBar/ActionBarInteractionContext.ts +13 -0
- package/src/primitives/actionBar/ActionBarReload.ts +64 -0
- package/src/primitives/actionBar/ActionBarRoot.tsx +119 -0
- package/src/primitives/actionBar/ActionBarSpeak.ts +25 -0
- package/src/primitives/actionBar/ActionBarStopSpeaking.tsx +24 -0
- package/src/primitives/actionBar/useActionBarFloatStatus.ts +48 -0
- package/src/primitives/actionBar.ts +9 -0
- package/src/primitives/actionBarMore/ActionBarMoreContent.tsx +45 -0
- package/src/primitives/actionBarMore/ActionBarMoreItem.tsx +22 -0
- package/src/primitives/actionBarMore/ActionBarMoreRoot.test.ts +70 -0
- package/src/primitives/actionBarMore/ActionBarMoreRoot.tsx +46 -0
- package/src/primitives/actionBarMore/ActionBarMoreSeparator.tsx +26 -0
- package/src/primitives/actionBarMore/ActionBarMoreTrigger.tsx +26 -0
- package/src/primitives/actionBarMore/scope.ts +6 -0
- package/src/primitives/actionBarMore.ts +5 -0
- package/src/primitives/assistantModal/AssistantModalAnchor.tsx +22 -0
- package/src/primitives/assistantModal/AssistantModalContent.tsx +85 -0
- package/src/primitives/assistantModal/AssistantModalRoot.test.tsx +153 -0
- package/src/primitives/assistantModal/AssistantModalRoot.tsx +48 -0
- package/src/primitives/assistantModal/AssistantModalTrigger.test.tsx +65 -0
- package/src/primitives/assistantModal/AssistantModalTrigger.tsx +22 -0
- package/src/primitives/assistantModal/popoverRenderPrimitives.ts +6 -0
- package/src/primitives/assistantModal/scope.ts +6 -0
- package/src/primitives/assistantModal.ts +4 -0
- package/src/primitives/attachment/AttachmentName.tsx +16 -0
- package/src/primitives/attachment/AttachmentRemove.ts +28 -0
- package/src/primitives/attachment/AttachmentRoot.tsx +52 -0
- package/src/primitives/attachment/AttachmentThumb.test.tsx +179 -0
- package/src/primitives/attachment/AttachmentThumb.tsx +41 -0
- package/src/primitives/attachment.ts +7 -0
- package/src/primitives/branchPicker/BranchPickerCount.tsx +33 -0
- package/src/primitives/branchPicker/BranchPickerNext.ts +42 -0
- package/src/primitives/branchPicker/BranchPickerNumber.tsx +16 -0
- package/src/primitives/branchPicker/BranchPickerPrevious.ts +42 -0
- package/src/primitives/branchPicker/BranchPickerRoot.tsx +64 -0
- package/src/primitives/branchPicker.ts +5 -0
- package/src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.test.tsx +116 -0
- package/src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.tsx +63 -0
- package/src/primitives/chainOfThought/ChainOfThoughtParts.tsx +3 -0
- package/src/primitives/chainOfThought/ChainOfThoughtRoot.tsx +33 -0
- package/src/primitives/chainOfThought.ts +14 -0
- package/src/primitives/composer/ComposerAddAttachment.test.tsx +101 -0
- package/src/primitives/composer/ComposerAddAttachment.thread-scope.test.tsx +225 -0
- package/src/primitives/composer/ComposerAddAttachment.ts +88 -0
- package/src/primitives/composer/ComposerAttachmentDropzone.test.tsx +351 -0
- package/src/primitives/composer/ComposerAttachmentDropzone.tsx +109 -0
- package/src/primitives/composer/ComposerAttachments.tsx +6 -0
- package/src/primitives/composer/ComposerCancel.focus.test.tsx +324 -0
- package/src/primitives/composer/ComposerCancel.ts +52 -0
- package/src/primitives/composer/ComposerCompactContext.tsx +10 -0
- package/src/primitives/composer/ComposerDictate.ts +37 -0
- package/src/primitives/composer/ComposerDictationTranscript.tsx +55 -0
- package/src/primitives/composer/ComposerDisabledThread.test.tsx +118 -0
- package/src/primitives/composer/ComposerIf.ts +4 -0
- package/src/primitives/composer/ComposerInput.focus-on-run-start.test.tsx +145 -0
- package/src/primitives/composer/ComposerInput.test.tsx +712 -0
- package/src/primitives/composer/ComposerInput.text-change.test.tsx +77 -0
- package/src/primitives/composer/ComposerInput.thread-scope.test.tsx +83 -0
- package/src/primitives/composer/ComposerInput.tsx +462 -0
- package/src/primitives/composer/ComposerInputPluginContext.tsx +80 -0
- package/src/primitives/composer/ComposerPreview.native.test.ts +157 -0
- package/src/primitives/composer/ComposerQueue.tsx +3 -0
- package/src/primitives/composer/ComposerQuote.tsx +143 -0
- package/src/primitives/composer/ComposerResume.ts +35 -0
- package/src/primitives/composer/ComposerRoot.test.tsx +429 -0
- package/src/primitives/composer/ComposerRoot.tsx +155 -0
- package/src/primitives/composer/ComposerSend.ts +43 -0
- package/src/primitives/composer/ComposerStopDictation.ts +43 -0
- package/src/primitives/composer/composerInputSelector.ts +4 -0
- package/src/primitives/composer/trigger/TriggerPopover.native.test.ts +309 -0
- package/src/primitives/composer/trigger/TriggerPopover.tsx +248 -0
- package/src/primitives/composer/trigger/TriggerPopoverAction.tsx +61 -0
- package/src/primitives/composer/trigger/TriggerPopoverBack.tsx +51 -0
- package/src/primitives/composer/trigger/TriggerPopoverBehavior.test.tsx +113 -0
- package/src/primitives/composer/trigger/TriggerPopoverCategories.tsx +123 -0
- package/src/primitives/composer/trigger/TriggerPopoverDirective.tsx +55 -0
- package/src/primitives/composer/trigger/TriggerPopoverExports.test.ts +61 -0
- package/src/primitives/composer/trigger/TriggerPopoverItems.tsx +121 -0
- package/src/primitives/composer/trigger/TriggerPopoverResource.ts +146 -0
- package/src/primitives/composer/trigger/TriggerPopoverRootContext.test.tsx +159 -0
- package/src/primitives/composer/trigger/TriggerPopoverRootContext.tsx +236 -0
- package/src/primitives/composer/trigger/detectTrigger.test.ts +197 -0
- package/src/primitives/composer/trigger/detectTrigger.ts +78 -0
- package/src/primitives/composer/trigger/index.ts +33 -0
- package/src/primitives/composer/trigger/matchesTriggerItemQuery.test.ts +52 -0
- package/src/primitives/composer/trigger/matchesTriggerItemQuery.ts +13 -0
- package/src/primitives/composer/trigger/triggerDetectionResource.ts +47 -0
- package/src/primitives/composer/trigger/triggerKeyboardResource.test.ts +233 -0
- package/src/primitives/composer/trigger/triggerKeyboardResource.ts +150 -0
- package/src/primitives/composer/trigger/triggerNavigationResource.ts +129 -0
- package/src/primitives/composer/trigger/triggerSelectionResource.test.ts +173 -0
- package/src/primitives/composer/trigger/triggerSelectionResource.ts +133 -0
- package/src/primitives/composer/useAuiState.composer.test.tsx +93 -0
- package/src/primitives/composer/useComposerCancelWithFocus.ts +51 -0
- package/src/primitives/composer/useComposerInputState.ts +58 -0
- package/src/primitives/composer/useTextareaAutosize.ts +140 -0
- package/src/primitives/composer.ts +88 -0
- package/src/primitives/dropdownMenuRenderPrimitives.test.tsx +64 -0
- package/src/primitives/dropdownMenuRenderPrimitives.ts +14 -0
- package/src/primitives/error/ErrorMessage.tsx +39 -0
- package/src/primitives/error/ErrorRoot.tsx +34 -0
- package/src/primitives/error.ts +2 -0
- package/src/primitives/message/MessageAttachments.tsx +6 -0
- package/src/primitives/message/MessageError.ts +13 -0
- package/src/primitives/message/MessageIf.test.tsx +83 -0
- package/src/primitives/message/MessageIf.ts +110 -0
- package/src/primitives/message/MessageParts.test.tsx +119 -0
- package/src/primitives/message/MessageParts.tsx +64 -0
- package/src/primitives/message/MessagePartsGrouped.test.tsx +682 -0
- package/src/primitives/message/MessagePartsGrouped.tool-interaction.test.tsx +97 -0
- package/src/primitives/message/MessagePartsGrouped.tsx +374 -0
- package/src/primitives/message/MessageRoot.anchors.test.ts +167 -0
- package/src/primitives/message/MessageRoot.test.tsx +272 -0
- package/src/primitives/message/MessageRoot.tsx +145 -0
- package/src/primitives/message.ts +15 -0
- package/src/primitives/messagePart/MessagePartImage.tsx +29 -0
- package/src/primitives/messagePart/MessagePartInProgress.ts +3 -0
- package/src/primitives/messagePart/MessagePartText.test.tsx +114 -0
- package/src/primitives/messagePart/MessagePartText.tsx +54 -0
- package/src/primitives/messagePart/useMessagePartData.test.ts +118 -0
- package/src/primitives/messagePart/useMessagePartData.ts +34 -0
- package/src/primitives/messagePart/useMessagePartFile.ts +42 -0
- package/src/primitives/messagePart/useMessagePartImage.ts +41 -0
- package/src/primitives/messagePart/useMessagePartReasoning.ts +42 -0
- package/src/primitives/messagePart/useMessagePartSource.ts +43 -0
- package/src/primitives/messagePart/useMessagePartText.ts +45 -0
- package/src/primitives/messagePart.ts +4 -0
- package/src/primitives/native-action-bindings.test.ts +181 -0
- package/src/primitives/native-display-bindings.test.ts +159 -0
- package/src/primitives/queueItem/QueueItemRemove.ts +36 -0
- package/src/primitives/queueItem/QueueItemSteer.ts +36 -0
- package/src/primitives/queueItem/QueueItemText.tsx +48 -0
- package/src/primitives/queueItem.ts +3 -0
- package/src/primitives/reasoning/useScrollLock.test.tsx +296 -0
- package/src/primitives/reasoning/useScrollLock.ts +160 -0
- package/src/primitives/selectionToolbar/SelectionToolbarQuote.tsx +56 -0
- package/src/primitives/selectionToolbar/SelectionToolbarRoot.test.tsx +439 -0
- package/src/primitives/selectionToolbar/SelectionToolbarRoot.tsx +206 -0
- package/src/primitives/selectionToolbar.ts +8 -0
- package/src/primitives/suggestion/SuggestionDescription.tsx +35 -0
- package/src/primitives/suggestion/SuggestionTitle.tsx +43 -0
- package/src/primitives/suggestion/SuggestionTrigger.ts +59 -0
- package/src/primitives/suggestion.ts +3 -0
- package/src/primitives/thread/ThreadEmpty.ts +19 -0
- package/src/primitives/thread/ThreadIf.ts +42 -0
- package/src/primitives/thread/ThreadLoadEarlier.tsx +34 -0
- package/src/primitives/thread/ThreadMessages.tsx +9 -0
- package/src/primitives/thread/ThreadRoot.test.tsx +419 -0
- package/src/primitives/thread/ThreadRoot.tsx +119 -0
- package/src/primitives/thread/ThreadRootElementContext.ts +9 -0
- package/src/primitives/thread/ThreadScrollToBottom.ts +45 -0
- package/src/primitives/thread/ThreadSuggestion.ts +55 -0
- package/src/primitives/thread/ThreadSuggestions.tsx +7 -0
- package/src/primitives/thread/ThreadViewport.thread-scope.test.tsx +58 -0
- package/src/primitives/thread/ThreadViewport.tsx +219 -0
- package/src/primitives/thread/ThreadViewportFooter.tsx +46 -0
- package/src/primitives/thread/topAnchor/computeTopAnchorSlack.test.ts +131 -0
- package/src/primitives/thread/topAnchor/computeTopAnchorSlack.ts +94 -0
- package/src/primitives/thread/topAnchor/createReserveObservers.ts +50 -0
- package/src/primitives/thread/topAnchor/mountTopAnchorReserve.test.ts +570 -0
- package/src/primitives/thread/topAnchor/mountTopAnchorReserve.ts +221 -0
- package/src/primitives/thread/topAnchor/topAnchorTurn.test.ts +115 -0
- package/src/primitives/thread/topAnchor/topAnchorTurn.ts +59 -0
- package/src/primitives/thread/topAnchor/topAnchorUtils.ts +58 -0
- package/src/primitives/thread/topAnchor/useTopAnchorReserve.ts +23 -0
- package/src/primitives/thread/useThreadViewportAutoScroll.test.tsx +1887 -0
- package/src/primitives/thread/useThreadViewportAutoScroll.ts +140 -0
- package/src/primitives/thread.ts +17 -0
- package/src/primitives/threadList/ThreadListItems.tsx +6 -0
- package/src/primitives/threadList/ThreadListLoadMore.tsx +25 -0
- package/src/primitives/threadList/ThreadListNew.tsx +47 -0
- package/src/primitives/threadList/ThreadListRoot.tsx +29 -0
- package/src/primitives/threadList.ts +5 -0
- package/src/primitives/threadListFocusGroup.ts +91 -0
- package/src/primitives/threadListItem/ThreadListItemArchive.ts +23 -0
- package/src/primitives/threadListItem/ThreadListItemDelete.ts +23 -0
- package/src/primitives/threadListItem/ThreadListItemRoot.tsx +100 -0
- package/src/primitives/threadListItem/ThreadListItemTitle.test.tsx +63 -0
- package/src/primitives/threadListItem/ThreadListItemTitle.tsx +3 -0
- package/src/primitives/threadListItem/ThreadListItemTrigger.tsx +51 -0
- package/src/primitives/threadListItem/ThreadListItemUnarchive.test.tsx +55 -0
- package/src/primitives/threadListItem/ThreadListItemUnarchive.ts +25 -0
- package/src/primitives/threadListItem/ThreadListKeyboardNav.test.tsx +348 -0
- package/src/primitives/threadListItem.ts +6 -0
- package/src/primitives/threadListItemMore/ThreadListItemMoreContent.tsx +81 -0
- package/src/primitives/threadListItemMore/ThreadListItemMoreItem.tsx +22 -0
- package/src/primitives/threadListItemMore/ThreadListItemMoreRoot.tsx +79 -0
- package/src/primitives/threadListItemMore/ThreadListItemMoreSeparator.tsx +26 -0
- package/src/primitives/threadListItemMore/ThreadListItemMoreTrigger.tsx +62 -0
- package/src/primitives/threadListItemMore/scope.ts +6 -0
- package/src/primitives/threadListItemMore.ts +5 -0
- package/src/sandbox-host/SandboxHost.test.tsx +579 -0
- package/src/sandbox-host/SandboxHost.tsx +271 -0
- package/src/tests/DataRenderers.test.tsx +218 -0
- package/src/tests/MessageParts.loading.test.tsx +105 -0
- package/src/tests/MessageParts.rendererOptions.test.tsx +125 -0
- package/src/tests/RemoteThreadListRuntime.adapterProvider.test.tsx +187 -0
- package/src/tests/RemoteThreadListRuntime.deferredProvider.test.tsx +99 -0
- package/src/tests/RemoteThreadListRuntime.reloadMainThread.test.tsx +113 -0
- package/src/tests/augmentations.test.ts +95 -0
- package/src/tests/generative-ui.primitive.test.tsx +176 -0
- package/src/tests/generative-ui.test.tsx +130 -0
- package/src/tests/in-memory-thread-list.test.tsx +142 -0
- package/src/tests/local-runtime-queue.test.tsx +506 -0
- package/src/tests/messageAction.ts +67 -0
- package/src/tests/messagePartSwitchRace.test.tsx +222 -0
- package/src/tests/messagePartTypeMismatch.test.tsx +153 -0
- package/src/tests/remote-thread-list-test-helpers.ts +40 -0
- package/src/tests/setup.ts +5 -0
- package/src/tests/threadListItemIsRunning.test.tsx +215 -0
- package/src/tests/threadMessageById.test.tsx +293 -0
- package/src/tests/toolCallTiming.test.tsx +324 -0
- package/src/tests/vue.ts +124 -0
- package/src/unstable/useComposerInput.test.tsx +201 -0
- package/src/unstable/useComposerInput.ts +125 -0
- package/src/unstable/useComposerInputHistory.test.tsx +207 -0
- package/src/unstable/useComposerInputHistory.thread-scope.test.tsx +128 -0
- package/src/unstable/useComposerInputHistory.ts +163 -0
- package/src/unstable/useLiveCompletionAdapter.test.tsx +760 -0
- package/src/unstable/useLiveCompletionAdapter.ts +217 -0
- package/src/unstable/useMentionAdapter.test.tsx +380 -0
- package/src/unstable/useMentionAdapter.ts +276 -0
- package/src/unstable/useMessageStallDetection.lifecycle.test.ts +120 -0
- package/src/unstable/useMessageStallDetection.test.tsx +59 -0
- package/src/unstable/useMessageStallDetection.ts +147 -0
- package/src/unstable/useModelContextSnapshot.test.tsx +181 -0
- package/src/unstable/useModelContextSnapshot.ts +85 -0
- package/src/unstable/useSlashCommandAdapter.test.tsx +172 -0
- package/src/unstable/useSlashCommandAdapter.ts +145 -0
- package/src/unstable/webmcp/WebMcpRegistrationResource.test.ts +150 -0
- package/src/unstable/webmcp/WebMcpRegistrationResource.ts +92 -0
- package/src/unstable/webmcp/__tests__/webmcp.fake.tsx +177 -0
- package/src/unstable/webmcp/convertTools.test.ts +605 -0
- package/src/unstable/webmcp/convertTools.ts +256 -0
- package/src/unstable/webmcp/useWebMcpProvider.test.tsx +543 -0
- package/src/unstable/webmcp/useWebMcpProvider.ts +185 -0
- package/src/unstable/webmcp/webmcp-host.test.ts +142 -0
- package/src/unstable/webmcp/webmcp-host.ts +83 -0
- package/src/utils/Primitive.test.tsx +551 -0
- package/src/utils/Primitive.tsx +363 -0
- package/src/utils/RequireAtLeastOne.ts +7 -0
- package/src/utils/createActionButton.child-cancel.test.tsx +82 -0
- package/src/utils/createActionButton.test.tsx +114 -0
- package/src/utils/createActionButton.tsx +75 -0
- package/src/utils/getSelectionMessageId.test.ts +609 -0
- package/src/utils/getSelectionMessageId.ts +133 -0
- package/src/utils/hooks/useManagedRef.ts +19 -0
- package/src/utils/hooks/useMediaQuery.test.tsx +60 -0
- package/src/utils/hooks/useMediaQuery.ts +44 -0
- package/src/utils/hooks/useOnScrollToBottom.ts +23 -0
- package/src/utils/hooks/useSizeHandle.ts +39 -0
- package/src/utils/isCompositionKey.ts +5 -0
- package/src/utils/smooth/SmoothContext.test.tsx +224 -0
- package/src/utils/smooth/SmoothContext.tsx +82 -0
- package/src/utils/smooth/useSmooth.test.tsx +499 -0
- package/src/utils/smooth/useSmooth.ts +266 -0
- package/src/utils/useIsomorphicLayoutEffect.test.tsx +25 -0
- package/src/utils/useIsomorphicLayoutEffect.ts +1 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useIsomorphicLayoutEffect } from "../utils/useIsomorphicLayoutEffect.js";
|
|
3
|
+
import { createMcpAppBridge } from "./bridge.js";
|
|
4
|
+
import { SandboxHost } from "../sandbox-host/SandboxHost.js";
|
|
5
|
+
import { applyMcpAppCsp } from "./csp.js";
|
|
6
|
+
import { defineComponent, h, shallowRef } from "vue";
|
|
7
|
+
import { isRecord } from "@ulearning/ai-core/internal";
|
|
8
|
+
// src/mcp-apps/app-frame.tsx
|
|
9
|
+
const DEFAULT_PRODUCT = "assistant-ui-mcp-app";
|
|
10
|
+
const INIT_TIMEOUT_MS = 5e3;
|
|
11
|
+
const DEFAULT_MAX_HEIGHT = 800;
|
|
12
|
+
const isPlainObject = (value) => {
|
|
13
|
+
if (!isRecord(value)) return false;
|
|
14
|
+
const prototype = Object.getPrototypeOf(value);
|
|
15
|
+
return prototype === null || prototype === Object.prototype;
|
|
16
|
+
};
|
|
17
|
+
const isSameHostContext = (a, b, depth = 0) => {
|
|
18
|
+
if (Object.is(a, b)) return true;
|
|
19
|
+
if (depth > 100) return false;
|
|
20
|
+
if (Array.isArray(a) || Array.isArray(b)) {
|
|
21
|
+
if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;
|
|
22
|
+
for (let i = 0; i < a.length; i++) if (!isSameHostContext(a[i], b[i], depth + 1)) return false;
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
if (!isPlainObject(a) || !isPlainObject(b)) return false;
|
|
26
|
+
const aKeys = Object.keys(a);
|
|
27
|
+
return aKeys.length === Object.keys(b).length && aKeys.every((key) => Object.hasOwn(b, key) && isSameHostContext(a[key], b[key], depth + 1));
|
|
28
|
+
};
|
|
29
|
+
function useBridgeNotify(readValue, bridgeRef, widgetReadyRef, pendingRef, lastSentRef, notify, isEqual = Object.is) {
|
|
30
|
+
useIsomorphicLayoutEffect(() => {
|
|
31
|
+
const value = readValue();
|
|
32
|
+
if (!bridgeRef.value) return;
|
|
33
|
+
if (value === void 0 || isEqual(lastSentRef.value, value)) {
|
|
34
|
+
pendingRef.value = void 0;
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (!widgetReadyRef.value) {
|
|
38
|
+
pendingRef.value = value;
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
notify(bridgeRef.value, value);
|
|
42
|
+
lastSentRef.value = value;
|
|
43
|
+
}, () => [readValue()]);
|
|
44
|
+
}
|
|
45
|
+
function buildLiveHandlers(initial, liveRef, lifecycle) {
|
|
46
|
+
const live = () => liveRef.value.handlers;
|
|
47
|
+
const has = (key) => initial?.[key] !== void 0;
|
|
48
|
+
const out = {};
|
|
49
|
+
Object.defineProperty(out, "allowedTools", {
|
|
50
|
+
get: () => live()?.allowedTools,
|
|
51
|
+
enumerable: true,
|
|
52
|
+
configurable: true
|
|
53
|
+
});
|
|
54
|
+
const liveCall = (key) => ((p) => {
|
|
55
|
+
const fn = live()?.[key];
|
|
56
|
+
if (!fn) throw new Error(`${key} handler is no longer available`);
|
|
57
|
+
return fn(p);
|
|
58
|
+
});
|
|
59
|
+
if (has("callTool")) out.callTool = liveCall("callTool");
|
|
60
|
+
if (has("readResource")) out.readResource = liveCall("readResource");
|
|
61
|
+
if (has("listResources")) out.listResources = liveCall("listResources");
|
|
62
|
+
if (has("openLink")) out.openLink = liveCall("openLink");
|
|
63
|
+
if (has("sendMessage")) out.sendMessage = liveCall("sendMessage");
|
|
64
|
+
if (has("updateModelContext")) out.updateModelContext = liveCall("updateModelContext");
|
|
65
|
+
if (has("requestDisplayMode")) out.requestDisplayMode = liveCall("requestDisplayMode");
|
|
66
|
+
out.onSizeChange = (p) => {
|
|
67
|
+
lifecycle.onSizeChange(p);
|
|
68
|
+
live()?.onSizeChange?.(p);
|
|
69
|
+
};
|
|
70
|
+
out.onInitialized = (params) => {
|
|
71
|
+
lifecycle.onInitialized();
|
|
72
|
+
live()?.onInitialized?.(params);
|
|
73
|
+
};
|
|
74
|
+
out.onRequestTeardown = (p) => live()?.onRequestTeardown?.(p);
|
|
75
|
+
out.onLog = (p) => live()?.onLog?.(p);
|
|
76
|
+
out.onError = (e) => live()?.onError?.(e);
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
const McpAppFrame = defineComponent(function McpAppFrame(props) {
|
|
80
|
+
const bridgeRef = shallowRef(null);
|
|
81
|
+
const lastSentInputRef = shallowRef(void 0);
|
|
82
|
+
const lastSentOutputRef = shallowRef(void 0);
|
|
83
|
+
const lastSentHostContextRef = shallowRef(void 0);
|
|
84
|
+
const widgetReadyRef = shallowRef(false);
|
|
85
|
+
const pendingInputRef = shallowRef(void 0);
|
|
86
|
+
const pendingOutputRef = shallowRef(void 0);
|
|
87
|
+
const pendingHostContextRef = shallowRef(void 0);
|
|
88
|
+
const liveRef = shallowRef({
|
|
89
|
+
handlers: props.handlers,
|
|
90
|
+
hostInfo: props.hostInfo,
|
|
91
|
+
hostContext: props.hostContext,
|
|
92
|
+
input: props.input,
|
|
93
|
+
output: props.output
|
|
94
|
+
});
|
|
95
|
+
useIsomorphicLayoutEffect(() => {
|
|
96
|
+
liveRef.value = {
|
|
97
|
+
handlers: props.handlers,
|
|
98
|
+
hostInfo: props.hostInfo,
|
|
99
|
+
hostContext: props.hostContext,
|
|
100
|
+
input: props.input,
|
|
101
|
+
output: props.output
|
|
102
|
+
};
|
|
103
|
+
}, () => [
|
|
104
|
+
props.handlers,
|
|
105
|
+
props.hostInfo,
|
|
106
|
+
props.hostContext,
|
|
107
|
+
props.input,
|
|
108
|
+
props.output
|
|
109
|
+
]);
|
|
110
|
+
const createBridge = (frame, host) => {
|
|
111
|
+
const current = liveRef.value;
|
|
112
|
+
let initTimeoutId = null;
|
|
113
|
+
const flushPending = () => {
|
|
114
|
+
if (widgetReadyRef.value) return;
|
|
115
|
+
widgetReadyRef.value = true;
|
|
116
|
+
const b = bridgeRef.value;
|
|
117
|
+
if (!b) return;
|
|
118
|
+
if (pendingInputRef.value !== void 0) {
|
|
119
|
+
b.notifyToolInput(pendingInputRef.value);
|
|
120
|
+
lastSentInputRef.value = pendingInputRef.value;
|
|
121
|
+
pendingInputRef.value = void 0;
|
|
122
|
+
}
|
|
123
|
+
if (pendingOutputRef.value !== void 0) {
|
|
124
|
+
b.notifyToolResult(pendingOutputRef.value);
|
|
125
|
+
lastSentOutputRef.value = pendingOutputRef.value;
|
|
126
|
+
pendingOutputRef.value = void 0;
|
|
127
|
+
}
|
|
128
|
+
if (pendingHostContextRef.value !== void 0) {
|
|
129
|
+
b.notifyHostContextChanged(pendingHostContextRef.value);
|
|
130
|
+
lastSentHostContextRef.value = pendingHostContextRef.value;
|
|
131
|
+
pendingHostContextRef.value = void 0;
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
const wrappedHandlers = buildLiveHandlers(current.handlers, liveRef, {
|
|
135
|
+
onInitialized: () => {
|
|
136
|
+
if (initTimeoutId !== null) {
|
|
137
|
+
clearTimeout(initTimeoutId);
|
|
138
|
+
initTimeoutId = null;
|
|
139
|
+
}
|
|
140
|
+
flushPending();
|
|
141
|
+
},
|
|
142
|
+
onSizeChange: (p) => {
|
|
143
|
+
if (p.height != null) host.setHeight(p.height);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
initTimeoutId = setTimeout(() => {
|
|
147
|
+
initTimeoutId = null;
|
|
148
|
+
flushPending();
|
|
149
|
+
}, INIT_TIMEOUT_MS);
|
|
150
|
+
const bridge = createMcpAppBridge({
|
|
151
|
+
frame,
|
|
152
|
+
handlers: wrappedHandlers,
|
|
153
|
+
hostInfo: current.hostInfo,
|
|
154
|
+
hostContext: current.hostContext
|
|
155
|
+
});
|
|
156
|
+
bridgeRef.value = bridge;
|
|
157
|
+
if (current.input !== void 0) pendingInputRef.value = current.input;
|
|
158
|
+
if (current.output !== void 0) pendingOutputRef.value = current.output;
|
|
159
|
+
lastSentHostContextRef.value = current.hostContext ?? {};
|
|
160
|
+
return {
|
|
161
|
+
onMessage: bridge.onMessage,
|
|
162
|
+
dispose: () => {
|
|
163
|
+
if (initTimeoutId !== null) {
|
|
164
|
+
clearTimeout(initTimeoutId);
|
|
165
|
+
initTimeoutId = null;
|
|
166
|
+
}
|
|
167
|
+
bridge.dispose();
|
|
168
|
+
bridgeRef.value = null;
|
|
169
|
+
lastSentInputRef.value = void 0;
|
|
170
|
+
lastSentOutputRef.value = void 0;
|
|
171
|
+
lastSentHostContextRef.value = void 0;
|
|
172
|
+
widgetReadyRef.value = false;
|
|
173
|
+
pendingInputRef.value = void 0;
|
|
174
|
+
pendingOutputRef.value = void 0;
|
|
175
|
+
pendingHostContextRef.value = void 0;
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
};
|
|
179
|
+
useBridgeNotify(() => props.input, bridgeRef, widgetReadyRef, pendingInputRef, lastSentInputRef, (b, v) => b.notifyToolInput(v));
|
|
180
|
+
useBridgeNotify(() => props.output, bridgeRef, widgetReadyRef, pendingOutputRef, lastSentOutputRef, (b, v) => b.notifyToolResult(v));
|
|
181
|
+
useBridgeNotify(() => props.hostContext, bridgeRef, widgetReadyRef, pendingHostContextRef, lastSentHostContextRef, (b, v) => b.notifyHostContextChanged(v), isSameHostContext);
|
|
182
|
+
return () => h(SandboxHost, {
|
|
183
|
+
content: { html: applyMcpAppCsp(props.resource.html, props.resource.meta?.csp) },
|
|
184
|
+
contentKey: props.app.serverId ? `${props.app.serverId} ${props.resource.uri}` : props.resource.uri,
|
|
185
|
+
sandbox: {
|
|
186
|
+
...props.sandbox,
|
|
187
|
+
product: props.sandbox?.product ?? DEFAULT_PRODUCT
|
|
188
|
+
},
|
|
189
|
+
maxHeight: props.maxHeight ?? DEFAULT_MAX_HEIGHT,
|
|
190
|
+
createBridge,
|
|
191
|
+
onError: (error) => liveRef.value.handlers?.onError?.(error),
|
|
192
|
+
containerProps: {
|
|
193
|
+
"data-mcp-app-resource": props.app.resourceUri,
|
|
194
|
+
"data-mcp-app-prefers-border": props.resource.meta?.prefersBorder ? "" : void 0
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}, {
|
|
198
|
+
name: "McpAppFrame",
|
|
199
|
+
props: [
|
|
200
|
+
"app",
|
|
201
|
+
"resource",
|
|
202
|
+
"input",
|
|
203
|
+
"output",
|
|
204
|
+
"sandbox",
|
|
205
|
+
"handlers",
|
|
206
|
+
"hostInfo",
|
|
207
|
+
"hostContext",
|
|
208
|
+
"maxHeight"
|
|
209
|
+
]
|
|
210
|
+
});
|
|
211
|
+
export { McpAppFrame };
|
|
212
|
+
|
|
213
|
+
//# sourceMappingURL=app-frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-frame.js","names":["defineComponent","h","shallowRef","ShallowRef","useIsomorphicLayoutEffect","McpAppBridge","createMcpAppBridge","SandboxHost","SandboxBridge","SandboxHostApi","SandboxHostFrame","McpAppBridgeHandlers","McpAppFrameProps","McpAppHostContext","isRecord","applyMcpAppCsp","DEFAULT_PRODUCT","INIT_TIMEOUT_MS","DEFAULT_MAX_HEIGHT","isPlainObject","value","Record","prototype","Object","getPrototypeOf","isSameHostContext","a","b","depth","is","Array","isArray","length","i","aKeys","keys","every","key","hasOwn","useBridgeNotify","readValue","T","bridgeRef","widgetReadyRef","pendingRef","lastSentRef","notify","bridge","v","isEqual","sent","next","undefined","LiveSnapshot","handlers","hostInfo","hostContext","input","output","FrameLifecycle","onInitialized","onSizeChange","params","width","height","buildLiveHandlers","initial","liveRef","lifecycle","live","has","K","out","defineProperty","get","allowedTools","enumerable","configurable","liveCall","NonNullable","p","fn","Error","callTool","readResource","listResources","openLink","sendMessage","updateModelContext","requestDisplayMode","onRequestTeardown","onLog","onError","e","McpAppFrame","props","lastSentInputRef","lastSentOutputRef","lastSentHostContextRef","pendingInputRef","pendingOutputRef","pendingHostContextRef","createBridge","frame","host","current","initTimeoutId","ReturnType","setTimeout","flushPending","notifyToolInput","notifyToolResult","notifyHostContextChanged","wrappedHandlers","clearTimeout","setHeight","onMessage","dispose","content","html","resource","meta","csp","contentKey","app","serverId","uri","sandbox","product","maxHeight","error","containerProps","resourceUri","prefersBorder","name"],"sources":["../../src/mcp-apps/app-frame.tsx"],"sourcesContent":["\"use client\";\n\nimport { defineComponent, h, shallowRef, type ShallowRef } from \"vue\";\nimport { useIsomorphicLayoutEffect } from \"../utils/useIsomorphicLayoutEffect\";\nimport { type McpAppBridge, createMcpAppBridge } from \"./bridge\";\nimport {\n SandboxHost,\n type SandboxBridge,\n type SandboxHostApi,\n type SandboxHostFrame,\n} from \"../sandbox-host/SandboxHost\";\nimport type {\n McpAppBridgeHandlers,\n McpAppFrameProps,\n McpAppHostContext,\n} from \"./types\";\nimport { isRecord } from \"@ulearning/ai-core/internal\";\nimport { applyMcpAppCsp } from \"./csp\";\n\nconst DEFAULT_PRODUCT = \"assistant-ui-mcp-app\";\nconst INIT_TIMEOUT_MS = 5000;\nconst DEFAULT_MAX_HEIGHT = 800;\n\n// Only a plain object can be compared by its own keys. Structured clone carries\n// a Date, Map, or class instance to the widget intact, and those expose no\n// enumerable keys, so walking them would report two different values as equal.\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (!isRecord(value)) return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === null || prototype === Object.prototype;\n};\n\n// Hosts commonly rebuild an equal context object on every render, and the\n// widget cannot tell a repeated notification apart from a real change. The\n// open index signature on McpAppHostContext admits values JSON rejects (an\n// undefined property value is enough), so leaves the walk cannot compare fall\n// back to identity rather than failing the whole comparison.\nconst isSameHostContext = (a: unknown, b: unknown, depth = 0): boolean => {\n if (Object.is(a, b)) return true;\n if (depth > 100) return false;\n if (Array.isArray(a) || Array.isArray(b)) {\n if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length)\n return false;\n for (let i = 0; i < a.length; i++) {\n if (!isSameHostContext(a[i], b[i], depth + 1)) return false;\n }\n return true;\n }\n if (!isPlainObject(a) || !isPlainObject(b)) return false;\n const aKeys = Object.keys(a);\n return (\n aKeys.length === Object.keys(b).length &&\n aKeys.every(\n (key) =>\n Object.hasOwn(b, key) && isSameHostContext(a[key], b[key], depth + 1),\n )\n );\n};\n\nfunction useBridgeNotify<T>(\n readValue: () => T | undefined,\n bridgeRef: ShallowRef<McpAppBridge | null>,\n widgetReadyRef: ShallowRef<boolean>,\n pendingRef: ShallowRef<T | undefined>,\n lastSentRef: ShallowRef<T | undefined>,\n notify: (bridge: McpAppBridge, v: T) => void,\n isEqual: (sent: T | undefined, next: T) => boolean = Object.is,\n) {\n useIsomorphicLayoutEffect(\n () => {\n const value = readValue();\n if (!bridgeRef.value) return;\n // Nothing to deliver, either because there is no value or because the\n // widget already holds it; a queued value here is superseded and would\n // otherwise flush after initialization as a stale update.\n if (value === undefined || isEqual(lastSentRef.value, value)) {\n pendingRef.value = undefined;\n return;\n }\n if (!widgetReadyRef.value) {\n pendingRef.value = value;\n return;\n }\n notify(bridgeRef.value, value);\n lastSentRef.value = value;\n },\n () => [readValue()],\n );\n}\n\ntype LiveSnapshot = {\n handlers: McpAppBridgeHandlers | undefined;\n hostInfo: McpAppFrameProps[\"hostInfo\"];\n hostContext: McpAppFrameProps[\"hostContext\"];\n input: unknown;\n output: unknown;\n};\n\ntype FrameLifecycle = {\n onInitialized: () => void;\n onSizeChange: (params: { width?: number; height?: number }) => void;\n};\n\n// Proxy each per-call handler through liveRef so the bridge always dispatches\n// to the latest handler reference (e.g. inline callbacks closing over state).\n// Capability presence is snapshot at mount: a handler added later requires a\n// remount (keyed on resource URI) to expose the capability to the widget.\n// allowedTools is the exception: it is never advertised in the ui/initialize\n// response, so it stays a live getter, which means this object must reach the\n// bridge uncopied and the frame passes its lifecycle work in rather than\n// wrapping the result.\nfunction buildLiveHandlers(\n initial: McpAppBridgeHandlers | undefined,\n liveRef: { readonly value: LiveSnapshot },\n lifecycle: FrameLifecycle,\n): McpAppBridgeHandlers {\n const live = () => liveRef.value.handlers;\n const has = <K extends keyof McpAppBridgeHandlers>(key: K) =>\n initial?.[key] !== undefined;\n const out: McpAppBridgeHandlers = {};\n Object.defineProperty(out, \"allowedTools\", {\n get: () => live()?.allowedTools,\n enumerable: true,\n configurable: true,\n });\n const liveCall = <K extends keyof McpAppBridgeHandlers>(\n key: K,\n ): NonNullable<McpAppBridgeHandlers[K]> =>\n ((p: unknown) => {\n const fn = live()?.[key] as ((p: unknown) => unknown) | undefined;\n if (!fn) {\n throw new Error(`${key} handler is no longer available`);\n }\n return fn(p);\n }) as NonNullable<McpAppBridgeHandlers[K]>;\n if (has(\"callTool\")) out.callTool = liveCall(\"callTool\");\n if (has(\"readResource\")) out.readResource = liveCall(\"readResource\");\n if (has(\"listResources\")) out.listResources = liveCall(\"listResources\");\n if (has(\"openLink\")) out.openLink = liveCall(\"openLink\");\n if (has(\"sendMessage\")) out.sendMessage = liveCall(\"sendMessage\");\n if (has(\"updateModelContext\"))\n out.updateModelContext = liveCall(\"updateModelContext\");\n if (has(\"requestDisplayMode\"))\n out.requestDisplayMode = liveCall(\"requestDisplayMode\");\n out.onSizeChange = (p) => {\n lifecycle.onSizeChange(p);\n live()?.onSizeChange?.(p);\n };\n out.onInitialized = (params) => {\n lifecycle.onInitialized();\n live()?.onInitialized?.(params);\n };\n out.onRequestTeardown = (p) => live()?.onRequestTeardown?.(p);\n out.onLog = (p) => live()?.onLog?.(p);\n out.onError = (e) => live()?.onError?.(e);\n return out;\n}\n\nexport const McpAppFrame = defineComponent(\n function McpAppFrame(props: McpAppFrameProps) {\n const bridgeRef = shallowRef<McpAppBridge | null>(null);\n const lastSentInputRef = shallowRef<unknown>(undefined);\n const lastSentOutputRef = shallowRef<unknown>(undefined);\n const lastSentHostContextRef = shallowRef<McpAppHostContext | undefined>(\n undefined,\n );\n // Per MCP Apps spec, the host should defer notifications until the widget\n // signals readiness via `notifications/initialized`. Until then, we record\n // pending values and flush them on init.\n const widgetReadyRef = shallowRef(false);\n const pendingInputRef = shallowRef<unknown>(undefined);\n const pendingOutputRef = shallowRef<unknown>(undefined);\n const pendingHostContextRef = shallowRef<McpAppHostContext | undefined>(\n undefined,\n );\n\n const liveRef = shallowRef<LiveSnapshot>({\n handlers: props.handlers,\n hostInfo: props.hostInfo,\n hostContext: props.hostContext,\n input: props.input,\n output: props.output,\n });\n useIsomorphicLayoutEffect(\n () => {\n liveRef.value = {\n handlers: props.handlers,\n hostInfo: props.hostInfo,\n hostContext: props.hostContext,\n input: props.input,\n output: props.output,\n };\n },\n () => [\n props.handlers,\n props.hostInfo,\n props.hostContext,\n props.input,\n props.output,\n ],\n );\n\n const createBridge = (\n frame: SandboxHostFrame,\n host: SandboxHostApi,\n ): SandboxBridge => {\n const current = liveRef.value;\n let initTimeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const flushPending = () => {\n if (widgetReadyRef.value) return;\n widgetReadyRef.value = true;\n const b = bridgeRef.value;\n if (!b) return;\n if (pendingInputRef.value !== undefined) {\n b.notifyToolInput(pendingInputRef.value);\n lastSentInputRef.value = pendingInputRef.value;\n pendingInputRef.value = undefined;\n }\n if (pendingOutputRef.value !== undefined) {\n b.notifyToolResult(pendingOutputRef.value);\n lastSentOutputRef.value = pendingOutputRef.value;\n pendingOutputRef.value = undefined;\n }\n if (pendingHostContextRef.value !== undefined) {\n b.notifyHostContextChanged(pendingHostContextRef.value);\n lastSentHostContextRef.value = pendingHostContextRef.value;\n pendingHostContextRef.value = undefined;\n }\n };\n\n const wrappedHandlers = buildLiveHandlers(current.handlers, liveRef, {\n onInitialized: () => {\n if (initTimeoutId !== null) {\n clearTimeout(initTimeoutId);\n initTimeoutId = null;\n }\n flushPending();\n },\n onSizeChange: (p) => {\n if (p.height != null) host.setHeight(p.height);\n },\n });\n\n // Safety net: if the widget never sends notifications/initialized (broken\n // or non-spec-compliant), flush the queue anyway so the host doesn't\n // appear hung.\n initTimeoutId = setTimeout(() => {\n initTimeoutId = null;\n flushPending();\n }, INIT_TIMEOUT_MS);\n\n const bridge = createMcpAppBridge({\n frame,\n handlers: wrappedHandlers,\n hostInfo: current.hostInfo,\n hostContext: current.hostContext,\n });\n bridgeRef.value = bridge;\n\n if (current.input !== undefined) pendingInputRef.value = current.input;\n if (current.output !== undefined) pendingOutputRef.value = current.output;\n // hostContext is delivered inside the ui/initialize response, where the\n // bridge defaults it to {}; recording that same normalized value keeps the\n // first later change from repeating what the widget already holds.\n lastSentHostContextRef.value = current.hostContext ?? {};\n\n return {\n onMessage: bridge.onMessage,\n dispose: () => {\n if (initTimeoutId !== null) {\n clearTimeout(initTimeoutId);\n initTimeoutId = null;\n }\n bridge.dispose();\n bridgeRef.value = null;\n lastSentInputRef.value = undefined;\n lastSentOutputRef.value = undefined;\n lastSentHostContextRef.value = undefined;\n widgetReadyRef.value = false;\n pendingInputRef.value = undefined;\n pendingOutputRef.value = undefined;\n pendingHostContextRef.value = undefined;\n },\n };\n };\n\n useBridgeNotify(\n () => props.input,\n bridgeRef,\n widgetReadyRef,\n pendingInputRef,\n lastSentInputRef,\n (b, v) => b.notifyToolInput(v),\n );\n useBridgeNotify(\n () => props.output,\n bridgeRef,\n widgetReadyRef,\n pendingOutputRef,\n lastSentOutputRef,\n (b, v) => b.notifyToolResult(v),\n );\n useBridgeNotify(\n () => props.hostContext,\n bridgeRef,\n widgetReadyRef,\n pendingHostContextRef,\n lastSentHostContextRef,\n (b, v) => b.notifyHostContextChanged(v),\n isSameHostContext,\n );\n\n return () =>\n h(SandboxHost, {\n content: {\n html: applyMcpAppCsp(props.resource.html, props.resource.meta?.csp),\n },\n contentKey: props.app.serverId\n ? `${props.app.serverId} ${props.resource.uri}`\n : props.resource.uri,\n sandbox: {\n ...props.sandbox,\n product: props.sandbox?.product ?? DEFAULT_PRODUCT,\n },\n maxHeight: props.maxHeight ?? DEFAULT_MAX_HEIGHT,\n createBridge,\n onError: (error: Error) => liveRef.value.handlers?.onError?.(error),\n containerProps: {\n \"data-mcp-app-resource\": props.app.resourceUri,\n \"data-mcp-app-prefers-border\": props.resource.meta?.prefersBorder\n ? \"\"\n : undefined,\n },\n });\n },\n {\n name: \"McpAppFrame\",\n props: [\n \"app\",\n \"resource\",\n \"input\",\n \"output\",\n \"sandbox\",\n \"handlers\",\n \"hostInfo\",\n \"hostContext\",\n \"maxHeight\",\n ],\n },\n);\n"],"mappings":";;;;;;;;AAmBA,MAAMgB,kBAAkB;AACxB,MAAMC,kBAAkB;AACxB,MAAMC,qBAAqB;AAK3B,MAAMC,iBAAiBC,UAAqD;CAC1E,IAAI,CAACN,SAASM,KAAK,GAAG,OAAO;CAC7B,MAAME,YAAYC,OAAOC,eAAeJ,KAAK;CAC7C,OAAOE,cAAc,QAAQA,cAAcC,OAAOD;AACpD;AAOA,MAAMG,qBAAqBC,GAAYC,GAAYC,QAAQ,MAAe;CACxE,IAAIL,OAAOM,GAAGH,GAAGC,CAAC,GAAG,OAAO;CAC5B,IAAIC,QAAQ,KAAK,OAAO;CACxB,IAAIE,MAAMC,QAAQL,CAAC,KAAKI,MAAMC,QAAQJ,CAAC,GAAG;EACxC,IAAI,CAACG,MAAMC,QAAQL,CAAC,KAAK,CAACI,MAAMC,QAAQJ,CAAC,KAAKD,EAAEM,WAAWL,EAAEK,QAC3D,OAAO;EACT,KAAK,IAAIC,IAAI,GAAGA,IAAIP,EAAEM,QAAQC,KAC5B,IAAI,CAACR,kBAAkBC,EAAEO,IAAIN,EAAEM,IAAIL,QAAQ,CAAC,GAAG,OAAO;EAExD,OAAO;CACT;CACA,IAAI,CAACT,cAAcO,CAAC,KAAK,CAACP,cAAcQ,CAAC,GAAG,OAAO;CACnD,MAAMO,QAAQX,OAAOY,KAAKT,CAAC;CAC3B,OACEQ,MAAMF,WAAWT,OAAOY,KAAKR,CAAC,CAAC,CAACK,UAChCE,MAAME,OACHC,QACCd,OAAOe,OAAOX,GAAGU,GAAG,KAAKZ,kBAAkBC,EAAEW,MAAMV,EAAEU,MAAMT,QAAQ,CAAC,CACxE;AAEJ;AAEA,SAASW,gBACPC,WACAE,WACAC,gBACAC,YACAC,aACAC,QACAG,UAAqD1B,OAAOM,IAC5D;CACAzB,gCACQ;EACJ,MAAMgB,QAAQoB,UAAU;EACxB,IAAI,CAACE,UAAUtB,OAAO;EAItB,IAAIA,UAAUgC,KAAAA,KAAaH,QAAQJ,YAAYzB,OAAOA,KAAK,GAAG;GAC5DwB,WAAWxB,QAAQgC,KAAAA;GACnB;EACF;EACA,IAAI,CAACT,eAAevB,OAAO;GACzBwB,WAAWxB,QAAQA;GACnB;EACF;EACA0B,OAAOJ,UAAUtB,OAAOA,KAAK;EAC7ByB,YAAYzB,QAAQA;CACtB,SACM,CAACoB,UAAU,CAAC,CACpB;AACF;AAuBA,SAASyB,kBACPC,SACAC,SACAC,WACsB;CACtB,MAAMC,aAAaF,QAAQ/C,MAAMkC;CACjC,MAAMgB,OAA6CjC,QACjD6B,UAAU7B,SAASe,KAAAA;CACrB,MAAMoB,MAA4B,CAAC;CACnCjD,OAAOkD,eAAeD,KAAK,gBAAgB;EACzCE,WAAWL,KAAK,CAAC,EAAEM;EACnBC,YAAY;EACZC,cAAc;CAChB,CAAC;CACD,MAAMC,YACJzC,UAEE2C,MAAe;EACf,MAAMC,KAAKZ,KAAK,CAAC,GAAGhC;EACpB,IAAI,CAAC4C,IACH,MAAM,IAAIC,MAAM,GAAG7C,IAAG,gCAAiC;EAEzD,OAAO4C,GAAGD,CAAC;CACb;CACF,IAAIV,IAAI,UAAU,GAAGE,IAAIW,WAAWL,SAAS,UAAU;CACvD,IAAIR,IAAI,cAAc,GAAGE,IAAIY,eAAeN,SAAS,cAAc;CACnE,IAAIR,IAAI,eAAe,GAAGE,IAAIa,gBAAgBP,SAAS,eAAe;CACtE,IAAIR,IAAI,UAAU,GAAGE,IAAIc,WAAWR,SAAS,UAAU;CACvD,IAAIR,IAAI,aAAa,GAAGE,IAAIe,cAAcT,SAAS,aAAa;CAChE,IAAIR,IAAI,oBAAoB,GAC1BE,IAAIgB,qBAAqBV,SAAS,oBAAoB;CACxD,IAAIR,IAAI,oBAAoB,GAC1BE,IAAIiB,qBAAqBX,SAAS,oBAAoB;CACxDN,IAAIX,gBAAgBmB,MAAM;EACxBZ,UAAUP,aAAamB,CAAC;EACxBX,KAAK,CAAC,EAAER,eAAemB,CAAC;CAC1B;CACAR,IAAIZ,iBAAiBE,WAAW;EAC9BM,UAAUR,cAAc;EACxBS,KAAK,CAAC,EAAET,gBAAgBE,MAAM;CAChC;CACAU,IAAIkB,qBAAqBV,MAAMX,KAAK,CAAC,EAAEqB,oBAAoBV,CAAC;CAC5DR,IAAImB,SAASX,MAAMX,KAAK,CAAC,EAAEsB,QAAQX,CAAC;CACpCR,IAAIoB,WAAWC,MAAMxB,KAAK,CAAC,EAAEuB,UAAUC,CAAC;CACxC,OAAOrB;AACT;AAEA,MAAasB,cAAc9F,gBACzB,SAAS8F,YAAYC,OAAyB;CAC5C,MAAMrD,YAAYxC,WAAgC,IAAI;CACtD,MAAM8F,mBAAmB9F,WAAoBkD,KAAAA,CAAS;CACtD,MAAM6C,oBAAoB/F,WAAoBkD,KAAAA,CAAS;CACvD,MAAM8C,yBAAyBhG,WAC7BkD,KAAAA,CACF;CAIA,MAAMT,iBAAiBzC,WAAW,KAAK;CACvC,MAAMiG,kBAAkBjG,WAAoBkD,KAAAA,CAAS;CACrD,MAAMgD,mBAAmBlG,WAAoBkD,KAAAA,CAAS;CACtD,MAAMiD,wBAAwBnG,WAC5BkD,KAAAA,CACF;CAEA,MAAMe,UAAUjE,WAAyB;EACvCoD,UAAUyC,MAAMzC;EAChBC,UAAUwC,MAAMxC;EAChBC,aAAauC,MAAMvC;EACnBC,OAAOsC,MAAMtC;EACbC,QAAQqC,MAAMrC;CAChB,CAAC;CACDtD,gCACQ;EACJ+D,QAAQ/C,QAAQ;GACdkC,UAAUyC,MAAMzC;GAChBC,UAAUwC,MAAMxC;GAChBC,aAAauC,MAAMvC;GACnBC,OAAOsC,MAAMtC;GACbC,QAAQqC,MAAMrC;EAChB;CACF,SACM;EACJqC,MAAMzC;EACNyC,MAAMxC;EACNwC,MAAMvC;EACNuC,MAAMtC;EACNsC,MAAMrC;CAAM,CAEhB;CAEA,MAAM4C,gBACJC,OACAC,SACkB;EAClB,MAAMC,UAAUtC,QAAQ/C;EACxB,IAAIsF,gBAAsD;EAE1D,MAAMG,qBAAqB;GACzB,IAAIlE,eAAevB,OAAO;GAC1BuB,eAAevB,QAAQ;GACvB,MAAMO,IAAIe,UAAUtB;GACpB,IAAI,CAACO,GAAG;GACR,IAAIwE,gBAAgB/E,UAAUgC,KAAAA,GAAW;IACvCzB,EAAEmF,gBAAgBX,gBAAgB/E,KAAK;IACvC4E,iBAAiB5E,QAAQ+E,gBAAgB/E;IACzC+E,gBAAgB/E,QAAQgC,KAAAA;GAC1B;GACA,IAAIgD,iBAAiBhF,UAAUgC,KAAAA,GAAW;IACxCzB,EAAEoF,iBAAiBX,iBAAiBhF,KAAK;IACzC6E,kBAAkB7E,QAAQgF,iBAAiBhF;IAC3CgF,iBAAiBhF,QAAQgC,KAAAA;GAC3B;GACA,IAAIiD,sBAAsBjF,UAAUgC,KAAAA,GAAW;IAC7CzB,EAAEqF,yBAAyBX,sBAAsBjF,KAAK;IACtD8E,uBAAuB9E,QAAQiF,sBAAsBjF;IACrDiF,sBAAsBjF,QAAQgC,KAAAA;GAChC;EACF;EAEA,MAAM6D,kBAAkBhD,kBAAkBwC,QAAQnD,UAAUa,SAAS;GACnEP,qBAAqB;IACnB,IAAI8C,kBAAkB,MAAM;KAC1BQ,aAAaR,aAAa;KAC1BA,gBAAgB;IAClB;IACAG,aAAa;GACf;GACAhD,eAAemB,MAAM;IACnB,IAAIA,EAAEhB,UAAU,MAAMwC,KAAKW,UAAUnC,EAAEhB,MAAM;GAC/C;EACF,CAAC;EAKD0C,gBAAgBE,iBAAiB;GAC/BF,gBAAgB;GAChBG,aAAa;EACf,GAAG5F,eAAe;EAElB,MAAM8B,SAASzC,mBAAmB;GAChCiG;GACAjD,UAAU2D;GACV1D,UAAUkD,QAAQlD;GAClBC,aAAaiD,QAAQjD;EACvB,CAAC;EACDd,UAAUtB,QAAQ2B;EAElB,IAAI0D,QAAQhD,UAAUL,KAAAA,GAAW+C,gBAAgB/E,QAAQqF,QAAQhD;EACjE,IAAIgD,QAAQ/C,WAAWN,KAAAA,GAAWgD,iBAAiBhF,QAAQqF,QAAQ/C;EAInEwC,uBAAuB9E,QAAQqF,QAAQjD,eAAe,CAAC;EAEvD,OAAO;GACL4D,WAAWrE,OAAOqE;GAClBC,eAAe;IACb,IAAIX,kBAAkB,MAAM;KAC1BQ,aAAaR,aAAa;KAC1BA,gBAAgB;IAClB;IACA3D,OAAOsE,QAAQ;IACf3E,UAAUtB,QAAQ;IAClB4E,iBAAiB5E,QAAQgC,KAAAA;IACzB6C,kBAAkB7E,QAAQgC,KAAAA;IAC1B8C,uBAAuB9E,QAAQgC,KAAAA;IAC/BT,eAAevB,QAAQ;IACvB+E,gBAAgB/E,QAAQgC,KAAAA;IACxBgD,iBAAiBhF,QAAQgC,KAAAA;IACzBiD,sBAAsBjF,QAAQgC,KAAAA;GAChC;EACF;CACF;CAEAb,sBACQwD,MAAMtC,OACZf,WACAC,gBACAwD,iBACAH,mBACCrE,GAAGqB,MAAMrB,EAAEmF,gBAAgB9D,CAAC,CAC/B;CACAT,sBACQwD,MAAMrC,QACZhB,WACAC,gBACAyD,kBACAH,oBACCtE,GAAGqB,MAAMrB,EAAEoF,iBAAiB/D,CAAC,CAChC;CACAT,sBACQwD,MAAMvC,aACZd,WACAC,gBACA0D,uBACAH,yBACCvE,GAAGqB,MAAMrB,EAAEqF,yBAAyBhE,CAAC,GACtCvB,iBACF;CAEA,aACExB,EAAEM,aAAa;EACb+G,SAAS,EACPC,MAAMxG,eAAegF,MAAMyB,SAASD,MAAMxB,MAAMyB,SAASC,MAAMC,GAAG,EACpE;EACAC,YAAY5B,MAAM6B,IAAIC,WAClB,GAAG9B,MAAM6B,IAAIC,SAAQ,GAAI9B,MAAMyB,SAASM,QACxC/B,MAAMyB,SAASM;EACnBC,SAAS;GACP,GAAGhC,MAAMgC;GACTC,SAASjC,MAAMgC,SAASC,WAAWhH;EACrC;EACAiH,WAAWlC,MAAMkC,aAAa/G;EAC9BoF;EACAV,UAAUsC,UAAiB/D,QAAQ/C,MAAMkC,UAAUsC,UAAUsC,KAAK;EAClEC,gBAAgB;GACd,yBAAyBpC,MAAM6B,IAAIQ;GACnC,+BAA+BrC,MAAMyB,SAASC,MAAMY,gBAChD,KACAjF,KAAAA;EACN;CACF,CAAC;AACL,GACA;CACEkF,MAAM;CACNvC,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAAW;AAEf,CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SandboxHostFrame } from "../sandbox-host/SandboxHost.js";
|
|
2
|
+
import { type McpAppBridgeHandlers, type McpAppHostContext, type McpAppHostInfo } from "./types.js";
|
|
3
|
+
export type McpAppBridgeFrame = SandboxHostFrame;
|
|
4
|
+
export type CreateMcpAppBridgeOptions = {
|
|
5
|
+
frame: McpAppBridgeFrame;
|
|
6
|
+
handlers?: McpAppBridgeHandlers | undefined;
|
|
7
|
+
hostInfo?: McpAppHostInfo | undefined;
|
|
8
|
+
hostContext?: McpAppHostContext | undefined;
|
|
9
|
+
};
|
|
10
|
+
export type McpAppBridge = {
|
|
11
|
+
onMessage: (event: MessageEvent) => void;
|
|
12
|
+
dispose: () => void;
|
|
13
|
+
notifyToolInput: (input: unknown) => void;
|
|
14
|
+
notifyToolResult: (result: unknown) => void;
|
|
15
|
+
notifyHostContextChanged: (hostContext: McpAppHostContext) => void;
|
|
16
|
+
};
|
|
17
|
+
export declare function createMcpAppBridge(opts: CreateMcpAppBridgeOptions): McpAppBridge;
|
|
18
|
+
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAA6B;AAEnE,OAAO,EAEL,KAAK,oBAAoB,EAEzB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAMpB,MAAM,YAAS;AAqDhB,MAAM,MAAM,iBAAiB,GAAG,gBAAgB;AAEhD,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,EAAE,iBAAiB;IACxB,QAAQ,CAAC,EAAE,oBAAoB,GAAG,SAAS;IAC3C,QAAQ,CAAC,EAAE,cAAc,GAAG,SAAS;IACrC,WAAW,CAAC,EAAE,iBAAiB,GAAG,SAAS;CAC5C;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI;IACxC,OAAO,EAAE,MAAM,IAAI;IACnB,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI;IACzC,gBAAgB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI;IAC3C,wBAAwB,EAAE,CAAC,WAAW,EAAE,iBAAiB,KAAK,IAAI;CACnE;AA+CD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,yBAAyB,GAC9B,YAAY","names":[],"ignoreList":[],"sources":["../../src/mcp-apps/bridge.ts"],"sourcesContent":[null]}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import "./types.js";
|
|
2
|
+
import { invokeUserCallback, isRecord } from "@ulearning/ai-core/internal";
|
|
3
|
+
// src/mcp-apps/bridge.ts
|
|
4
|
+
const VALID_DISPLAY_MODES = [
|
|
5
|
+
"inline",
|
|
6
|
+
"fullscreen",
|
|
7
|
+
"pip"
|
|
8
|
+
];
|
|
9
|
+
function isMcpAppDisplayMode(value) {
|
|
10
|
+
return VALID_DISPLAY_MODES.some((mode) => mode === value);
|
|
11
|
+
}
|
|
12
|
+
function isAppInfo(value) {
|
|
13
|
+
return isRecord(value) && typeof value.name === "string" && typeof value.version === "string";
|
|
14
|
+
}
|
|
15
|
+
function getAppCapabilities(value) {
|
|
16
|
+
if (!isRecord(value)) return void 0;
|
|
17
|
+
const { availableDisplayModes, ...rest } = value;
|
|
18
|
+
return {
|
|
19
|
+
...rest,
|
|
20
|
+
...Array.isArray(availableDisplayModes) ? { availableDisplayModes: Object.values(availableDisplayModes).filter(isMcpAppDisplayMode) } : {}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function getInitializeParams(params) {
|
|
24
|
+
if (!isRecord(params)) return {};
|
|
25
|
+
const appCapabilities = getAppCapabilities(params.appCapabilities);
|
|
26
|
+
return {
|
|
27
|
+
...isAppInfo(params.appInfo) ? { appInfo: params.appInfo } : {},
|
|
28
|
+
...appCapabilities ? { appCapabilities } : {},
|
|
29
|
+
...typeof params.protocolVersion === "string" ? { protocolVersion: params.protocolVersion } : {}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const DEFAULT_HOST_INFO = {
|
|
33
|
+
name: "assistant-ui",
|
|
34
|
+
version: "0.1"
|
|
35
|
+
};
|
|
36
|
+
const METHOD_ALIASES = {
|
|
37
|
+
"ui/notifications/initialized": "notifications/initialized",
|
|
38
|
+
"ui/notifications/size-changed": "notifications/size_changed",
|
|
39
|
+
"ui/request-display-mode": "requestDisplayMode",
|
|
40
|
+
"ui/open-link": "openLink",
|
|
41
|
+
"ui/update-model-context": "updateModelContext",
|
|
42
|
+
"ui/message": "sendMessage",
|
|
43
|
+
"notifications/message": "notifications/log"
|
|
44
|
+
};
|
|
45
|
+
const normalizeMethod = (method) => METHOD_ALIASES[method] ?? method;
|
|
46
|
+
const JSONRPC_ERROR = {
|
|
47
|
+
parseError: -32700,
|
|
48
|
+
invalidRequest: -32600,
|
|
49
|
+
methodNotFound: -32601,
|
|
50
|
+
invalidParams: -32602,
|
|
51
|
+
internalError: -32603
|
|
52
|
+
};
|
|
53
|
+
function isJsonRpcMessage(value) {
|
|
54
|
+
if (!value || typeof value !== "object") return false;
|
|
55
|
+
const v = value;
|
|
56
|
+
return v.jsonrpc === "2.0" && typeof v.method === "string";
|
|
57
|
+
}
|
|
58
|
+
function isRequest(msg) {
|
|
59
|
+
return "id" in msg;
|
|
60
|
+
}
|
|
61
|
+
function isNotification(msg) {
|
|
62
|
+
return !("id" in msg);
|
|
63
|
+
}
|
|
64
|
+
function createMcpAppBridge(opts) {
|
|
65
|
+
const { frame, handlers = {}, hostInfo = DEFAULT_HOST_INFO, hostContext = {} } = opts;
|
|
66
|
+
let disposed = false;
|
|
67
|
+
let initializeParams = {};
|
|
68
|
+
const post = (msg) => {
|
|
69
|
+
if (disposed) return;
|
|
70
|
+
frame.sendMessage(msg);
|
|
71
|
+
};
|
|
72
|
+
const respond = (id, payload) => {
|
|
73
|
+
const res = {
|
|
74
|
+
jsonrpc: "2.0",
|
|
75
|
+
id,
|
|
76
|
+
...payload
|
|
77
|
+
};
|
|
78
|
+
post(res);
|
|
79
|
+
};
|
|
80
|
+
const errorResponse = (id, code, message, data) => {
|
|
81
|
+
respond(id, { error: {
|
|
82
|
+
code,
|
|
83
|
+
message,
|
|
84
|
+
...data !== void 0 ? { data } : {}
|
|
85
|
+
} });
|
|
86
|
+
};
|
|
87
|
+
const reportError = (error) => {
|
|
88
|
+
if (disposed) return;
|
|
89
|
+
invokeUserCallback("assistant-ui", "MCP App onError", handlers.onError?.bind(handlers), error);
|
|
90
|
+
};
|
|
91
|
+
const handleRequest = async (req) => {
|
|
92
|
+
try {
|
|
93
|
+
const params = req.params;
|
|
94
|
+
switch (normalizeMethod(req.method)) {
|
|
95
|
+
case "ui/initialize": {
|
|
96
|
+
initializeParams = getInitializeParams(params);
|
|
97
|
+
const requestedProtocolVersion = initializeParams.protocolVersion ?? "0.1";
|
|
98
|
+
respond(req.id, { result: {
|
|
99
|
+
protocolVersion: requestedProtocolVersion,
|
|
100
|
+
host: hostInfo,
|
|
101
|
+
hostInfo,
|
|
102
|
+
hostContext,
|
|
103
|
+
capabilities: {
|
|
104
|
+
tools: handlers.callTool ? {} : void 0,
|
|
105
|
+
resources: handlers.readResource || handlers.listResources ? {} : void 0,
|
|
106
|
+
ui: {
|
|
107
|
+
sendMessage: !!handlers.sendMessage,
|
|
108
|
+
openLink: !!handlers.openLink,
|
|
109
|
+
requestDisplayMode: !!handlers.requestDisplayMode,
|
|
110
|
+
updateModelContext: !!handlers.updateModelContext
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
hostCapabilities: {
|
|
114
|
+
...handlers.openLink ? { openLinks: {} } : {},
|
|
115
|
+
...handlers.callTool ? { serverTools: {} } : {},
|
|
116
|
+
...handlers.readResource || handlers.listResources ? { serverResources: {} } : {},
|
|
117
|
+
...handlers.updateModelContext ? { updateModelContext: { text: {} } } : {},
|
|
118
|
+
...handlers.sendMessage ? { message: { text: {} } } : {},
|
|
119
|
+
...handlers.onLog ? { logging: {} } : {}
|
|
120
|
+
}
|
|
121
|
+
} });
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
case "tools/call": {
|
|
125
|
+
if (!handlers.callTool) {
|
|
126
|
+
errorResponse(req.id, JSONRPC_ERROR.methodNotFound, "tools/call is not supported by this host");
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const callParams = params ?? {};
|
|
130
|
+
if (typeof callParams.name !== "string") {
|
|
131
|
+
errorResponse(req.id, JSONRPC_ERROR.invalidParams, "tools/call requires a string 'name'");
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (handlers.allowedTools && !handlers.allowedTools.includes(callParams.name)) {
|
|
135
|
+
errorResponse(req.id, JSONRPC_ERROR.invalidParams, `tool '${callParams.name}' is not allowed for this app`);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
let callArgs;
|
|
139
|
+
if (callParams.arguments !== void 0) {
|
|
140
|
+
if (callParams.arguments === null || typeof callParams.arguments !== "object" || Array.isArray(callParams.arguments)) {
|
|
141
|
+
errorResponse(req.id, JSONRPC_ERROR.invalidParams, "tools/call 'arguments' must be an object");
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
callArgs = callParams.arguments;
|
|
145
|
+
}
|
|
146
|
+
const result = await handlers.callTool({
|
|
147
|
+
name: callParams.name,
|
|
148
|
+
...callArgs !== void 0 ? { arguments: callArgs } : {}
|
|
149
|
+
});
|
|
150
|
+
respond(req.id, { result });
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
case "resources/read": {
|
|
154
|
+
if (!handlers.readResource) {
|
|
155
|
+
errorResponse(req.id, JSONRPC_ERROR.methodNotFound, "resources/read is not supported by this host");
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const readParams = params ?? {};
|
|
159
|
+
if (typeof readParams.uri !== "string") {
|
|
160
|
+
errorResponse(req.id, JSONRPC_ERROR.invalidParams, "resources/read requires a string 'uri'");
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
respond(req.id, { result: await handlers.readResource({ uri: readParams.uri }) });
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
case "resources/list":
|
|
167
|
+
if (!handlers.listResources) {
|
|
168
|
+
errorResponse(req.id, JSONRPC_ERROR.methodNotFound, "resources/list is not supported by this host");
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
respond(req.id, { result: await handlers.listResources(params) ?? null });
|
|
172
|
+
return;
|
|
173
|
+
case "openLink": {
|
|
174
|
+
if (!handlers.openLink) {
|
|
175
|
+
errorResponse(req.id, JSONRPC_ERROR.methodNotFound, "openLink is not supported by this host");
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const linkParams = params ?? {};
|
|
179
|
+
if (typeof linkParams.url !== "string") {
|
|
180
|
+
errorResponse(req.id, JSONRPC_ERROR.invalidParams, "openLink requires a string 'url'");
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
let linkProtocol;
|
|
184
|
+
try {
|
|
185
|
+
linkProtocol = new URL(linkParams.url).protocol;
|
|
186
|
+
} catch {
|
|
187
|
+
errorResponse(req.id, JSONRPC_ERROR.invalidParams, "openLink requires a valid URL");
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
if (linkProtocol !== "https:" && linkProtocol !== "http:") {
|
|
191
|
+
errorResponse(req.id, JSONRPC_ERROR.invalidParams, "openLink only accepts http(s) URLs");
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
respond(req.id, { result: await handlers.openLink({ url: linkParams.url }) });
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
case "sendMessage":
|
|
198
|
+
if (!handlers.sendMessage) {
|
|
199
|
+
errorResponse(req.id, JSONRPC_ERROR.methodNotFound, "sendMessage is not supported by this host");
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
respond(req.id, { result: await handlers.sendMessage(params) ?? null });
|
|
203
|
+
return;
|
|
204
|
+
case "updateModelContext":
|
|
205
|
+
if (!handlers.updateModelContext) {
|
|
206
|
+
errorResponse(req.id, JSONRPC_ERROR.methodNotFound, "updateModelContext is not supported by this host");
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
respond(req.id, { result: await handlers.updateModelContext(params) ?? null });
|
|
210
|
+
return;
|
|
211
|
+
case "requestDisplayMode": {
|
|
212
|
+
if (!handlers.requestDisplayMode) {
|
|
213
|
+
errorResponse(req.id, JSONRPC_ERROR.methodNotFound, "requestDisplayMode is not supported by this host");
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const modeParams = params ?? {};
|
|
217
|
+
if (!isMcpAppDisplayMode(modeParams.mode)) {
|
|
218
|
+
errorResponse(req.id, JSONRPC_ERROR.invalidParams, "requestDisplayMode requires a valid 'mode'");
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
respond(req.id, { result: await handlers.requestDisplayMode({ mode: modeParams.mode }) });
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
default: errorResponse(req.id, JSONRPC_ERROR.methodNotFound, `Unknown method: ${req.method}`);
|
|
225
|
+
}
|
|
226
|
+
} catch (err) {
|
|
227
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
228
|
+
reportError(error);
|
|
229
|
+
errorResponse(req.id, JSONRPC_ERROR.internalError, error.message);
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
const handleNotification = (note) => {
|
|
233
|
+
try {
|
|
234
|
+
switch (normalizeMethod(note.method)) {
|
|
235
|
+
case "notifications/initialized":
|
|
236
|
+
handlers.onInitialized?.(initializeParams);
|
|
237
|
+
return;
|
|
238
|
+
case "notifications/size_changed": {
|
|
239
|
+
const p = note.params ?? {};
|
|
240
|
+
handlers.onSizeChange?.({
|
|
241
|
+
...typeof p.width === "number" ? { width: p.width } : {},
|
|
242
|
+
...typeof p.height === "number" ? { height: p.height } : {}
|
|
243
|
+
});
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
case "notifications/log":
|
|
247
|
+
handlers.onLog?.(note.params);
|
|
248
|
+
return;
|
|
249
|
+
case "notifications/request_teardown":
|
|
250
|
+
handlers.onRequestTeardown?.(note.params);
|
|
251
|
+
return;
|
|
252
|
+
case "notifications/error": {
|
|
253
|
+
const p = note.params ?? {};
|
|
254
|
+
reportError(new Error(typeof p.message === "string" ? p.message : "Widget error"));
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
default: return;
|
|
258
|
+
}
|
|
259
|
+
} catch (err) {
|
|
260
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
261
|
+
reportError(error);
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
const onMessage = (event) => {
|
|
265
|
+
if (disposed) return;
|
|
266
|
+
if (!isJsonRpcMessage(event.data)) return;
|
|
267
|
+
const msg = event.data;
|
|
268
|
+
if (isRequest(msg)) handleRequest(msg);
|
|
269
|
+
else if (isNotification(msg)) handleNotification(msg);
|
|
270
|
+
};
|
|
271
|
+
return {
|
|
272
|
+
onMessage,
|
|
273
|
+
dispose: () => {
|
|
274
|
+
disposed = true;
|
|
275
|
+
},
|
|
276
|
+
notifyToolInput: (input) => {
|
|
277
|
+
post({
|
|
278
|
+
jsonrpc: "2.0",
|
|
279
|
+
method: "notifications/tools/call/input",
|
|
280
|
+
params: { input }
|
|
281
|
+
});
|
|
282
|
+
post({
|
|
283
|
+
jsonrpc: "2.0",
|
|
284
|
+
method: "ui/notifications/tool-input",
|
|
285
|
+
params: isRecord(input) ? { arguments: input } : {}
|
|
286
|
+
});
|
|
287
|
+
},
|
|
288
|
+
notifyToolResult: (result) => {
|
|
289
|
+
post({
|
|
290
|
+
jsonrpc: "2.0",
|
|
291
|
+
method: "notifications/tools/call/result",
|
|
292
|
+
params: { result }
|
|
293
|
+
});
|
|
294
|
+
post({
|
|
295
|
+
jsonrpc: "2.0",
|
|
296
|
+
method: "ui/notifications/tool-result",
|
|
297
|
+
params: isRecord(result) ? result : { content: [{
|
|
298
|
+
type: "text",
|
|
299
|
+
text: String(result)
|
|
300
|
+
}] }
|
|
301
|
+
});
|
|
302
|
+
},
|
|
303
|
+
notifyHostContextChanged: (ctx) => {
|
|
304
|
+
post({
|
|
305
|
+
jsonrpc: "2.0",
|
|
306
|
+
method: "notifications/host_context/changed",
|
|
307
|
+
params: ctx
|
|
308
|
+
});
|
|
309
|
+
post({
|
|
310
|
+
jsonrpc: "2.0",
|
|
311
|
+
method: "ui/notifications/host-context-changed",
|
|
312
|
+
params: ctx
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
export { createMcpAppBridge };
|
|
318
|
+
|
|
319
|
+
//# sourceMappingURL=bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.js","names":[],"sources":["../../src/mcp-apps/bridge.ts"],"sourcesContent":["import type { SandboxHostFrame } from \"../sandbox-host/SandboxHost\";\nimport { invokeUserCallback } from \"@ulearning/ai-core/internal\";\nimport {\n MCP_APP_PROTOCOL_VERSION,\n type McpAppBridgeHandlers,\n type McpAppDisplayMode,\n type McpAppHostContext,\n type McpAppHostInfo,\n type McpAppInitializeParams,\n type McpAppJsonRpcMessage,\n type McpAppJsonRpcNotification,\n type McpAppJsonRpcRequest,\n type McpAppJsonRpcResponse,\n} from \"./types\";\nimport { isRecord } from \"@ulearning/ai-core/internal\";\n\nconst VALID_DISPLAY_MODES = [\n \"inline\",\n \"fullscreen\",\n \"pip\",\n] as const satisfies readonly McpAppDisplayMode[];\n\nfunction isMcpAppDisplayMode(value: unknown): value is McpAppDisplayMode {\n return VALID_DISPLAY_MODES.some((mode) => mode === value);\n}\n\nfunction isAppInfo(\n value: unknown,\n): value is NonNullable<McpAppInitializeParams[\"appInfo\"]> {\n return (\n isRecord(value) &&\n typeof value.name === \"string\" &&\n typeof value.version === \"string\"\n );\n}\n\nfunction getAppCapabilities(\n value: unknown,\n): McpAppInitializeParams[\"appCapabilities\"] {\n if (!isRecord(value)) return undefined;\n const { availableDisplayModes, ...rest } = value;\n return {\n ...rest,\n // Object.values reads only the entries present, so a sparse list claiming a huge length stays cheap, and the list's own methods are never called.\n ...(Array.isArray(availableDisplayModes)\n ? {\n availableDisplayModes: Object.values(availableDisplayModes).filter(\n isMcpAppDisplayMode,\n ),\n }\n : {}),\n };\n}\n\nfunction getInitializeParams(params: unknown): McpAppInitializeParams {\n if (!isRecord(params)) return {};\n const appCapabilities = getAppCapabilities(params.appCapabilities);\n return {\n ...(isAppInfo(params.appInfo) ? { appInfo: params.appInfo } : {}),\n ...(appCapabilities ? { appCapabilities } : {}),\n ...(typeof params.protocolVersion === \"string\"\n ? { protocolVersion: params.protocolVersion }\n : {}),\n };\n}\n\nexport type McpAppBridgeFrame = SandboxHostFrame;\n\nexport type CreateMcpAppBridgeOptions = {\n frame: McpAppBridgeFrame;\n handlers?: McpAppBridgeHandlers | undefined;\n hostInfo?: McpAppHostInfo | undefined;\n hostContext?: McpAppHostContext | undefined;\n};\n\nexport type McpAppBridge = {\n onMessage: (event: MessageEvent) => void;\n dispose: () => void;\n notifyToolInput: (input: unknown) => void;\n notifyToolResult: (result: unknown) => void;\n notifyHostContextChanged: (hostContext: McpAppHostContext) => void;\n};\n\nconst DEFAULT_HOST_INFO: McpAppHostInfo = {\n name: \"assistant-ui\",\n version: \"0.1\",\n};\n\n// Accept both the legacy method names and the MCP-UI 2026-01-26 names that\n// `ui/*` capable widgets (e.g. xmcp's host-bridge) emit. Normalize on input\n// so downstream switch statements only need to know the legacy names.\nconst METHOD_ALIASES: Record<string, string> = {\n \"ui/notifications/initialized\": \"notifications/initialized\",\n \"ui/notifications/size-changed\": \"notifications/size_changed\",\n \"ui/request-display-mode\": \"requestDisplayMode\",\n \"ui/open-link\": \"openLink\",\n \"ui/update-model-context\": \"updateModelContext\",\n \"ui/message\": \"sendMessage\",\n \"notifications/message\": \"notifications/log\",\n};\n\nconst normalizeMethod = (method: string): string =>\n METHOD_ALIASES[method] ?? method;\n\nconst JSONRPC_ERROR = {\n parseError: -32700,\n invalidRequest: -32600,\n methodNotFound: -32601,\n invalidParams: -32602,\n internalError: -32603,\n} as const;\n\nfunction isJsonRpcMessage(value: unknown): value is McpAppJsonRpcMessage {\n if (!value || typeof value !== \"object\") return false;\n const v = value as Record<string, unknown>;\n return v.jsonrpc === \"2.0\" && typeof v.method === \"string\";\n}\n\nfunction isRequest(msg: McpAppJsonRpcMessage): msg is McpAppJsonRpcRequest {\n return \"id\" in msg;\n}\n\nfunction isNotification(\n msg: McpAppJsonRpcMessage,\n): msg is McpAppJsonRpcNotification {\n return !(\"id\" in msg);\n}\n\nexport function createMcpAppBridge(\n opts: CreateMcpAppBridgeOptions,\n): McpAppBridge {\n const {\n frame,\n handlers = {},\n hostInfo = DEFAULT_HOST_INFO,\n hostContext = {},\n } = opts;\n let disposed = false;\n let initializeParams: McpAppInitializeParams = {};\n\n const post = (msg: McpAppJsonRpcMessage) => {\n if (disposed) return;\n frame.sendMessage(msg);\n };\n\n const respond = (\n id: McpAppJsonRpcRequest[\"id\"],\n payload:\n | { result: unknown }\n | { error: { code: number; message: string; data?: unknown } },\n ) => {\n const res: McpAppJsonRpcResponse = {\n jsonrpc: \"2.0\",\n id,\n ...payload,\n };\n post(res);\n };\n\n const errorResponse = (\n id: McpAppJsonRpcRequest[\"id\"],\n code: number,\n message: string,\n data?: unknown,\n ) => {\n respond(id, {\n error: {\n code,\n message,\n ...(data !== undefined ? { data } : {}),\n },\n });\n };\n\n const reportError = (error: Error) => {\n if (disposed) return;\n invokeUserCallback(\n \"assistant-ui\",\n \"MCP App onError\",\n handlers.onError?.bind(handlers),\n error,\n );\n };\n\n const handleRequest = async (req: McpAppJsonRpcRequest) => {\n try {\n const params = req.params;\n\n switch (normalizeMethod(req.method)) {\n case \"ui/initialize\": {\n initializeParams = getInitializeParams(params);\n const requestedProtocolVersion =\n initializeParams.protocolVersion ?? MCP_APP_PROTOCOL_VERSION;\n respond(req.id, {\n result: {\n protocolVersion: requestedProtocolVersion,\n host: hostInfo,\n hostInfo,\n hostContext,\n capabilities: {\n tools: handlers.callTool ? {} : undefined,\n resources:\n handlers.readResource || handlers.listResources\n ? {}\n : undefined,\n ui: {\n sendMessage: !!handlers.sendMessage,\n openLink: !!handlers.openLink,\n requestDisplayMode: !!handlers.requestDisplayMode,\n updateModelContext: !!handlers.updateModelContext,\n },\n },\n hostCapabilities: {\n ...(handlers.openLink ? { openLinks: {} } : {}),\n ...(handlers.callTool ? { serverTools: {} } : {}),\n ...(handlers.readResource || handlers.listResources\n ? { serverResources: {} }\n : {}),\n ...(handlers.updateModelContext\n ? { updateModelContext: { text: {} } }\n : {}),\n ...(handlers.sendMessage ? { message: { text: {} } } : {}),\n ...(handlers.onLog ? { logging: {} } : {}),\n },\n },\n });\n return;\n }\n\n case \"tools/call\": {\n if (!handlers.callTool) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"tools/call is not supported by this host\",\n );\n return;\n }\n const callParams = (params ?? {}) as {\n name?: unknown;\n arguments?: unknown;\n };\n if (typeof callParams.name !== \"string\") {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"tools/call requires a string 'name'\",\n );\n return;\n }\n if (\n handlers.allowedTools &&\n !handlers.allowedTools.includes(callParams.name)\n ) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n `tool '${callParams.name}' is not allowed for this app`,\n );\n return;\n }\n let callArgs: Record<string, unknown> | undefined;\n if (callParams.arguments !== undefined) {\n if (\n callParams.arguments === null ||\n typeof callParams.arguments !== \"object\" ||\n Array.isArray(callParams.arguments)\n ) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"tools/call 'arguments' must be an object\",\n );\n return;\n }\n callArgs = callParams.arguments as Record<string, unknown>;\n }\n const result = await handlers.callTool({\n name: callParams.name,\n ...(callArgs !== undefined ? { arguments: callArgs } : {}),\n });\n respond(req.id, { result });\n return;\n }\n\n case \"resources/read\": {\n if (!handlers.readResource) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"resources/read is not supported by this host\",\n );\n return;\n }\n const readParams = (params ?? {}) as { uri?: unknown };\n if (typeof readParams.uri !== \"string\") {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"resources/read requires a string 'uri'\",\n );\n return;\n }\n respond(req.id, {\n result: await handlers.readResource({ uri: readParams.uri }),\n });\n return;\n }\n\n case \"resources/list\": {\n if (!handlers.listResources) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"resources/list is not supported by this host\",\n );\n return;\n }\n respond(req.id, {\n result: (await handlers.listResources(params)) ?? null,\n });\n return;\n }\n\n case \"openLink\": {\n if (!handlers.openLink) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"openLink is not supported by this host\",\n );\n return;\n }\n const linkParams = (params ?? {}) as { url?: unknown };\n if (typeof linkParams.url !== \"string\") {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"openLink requires a string 'url'\",\n );\n return;\n }\n let linkProtocol: string;\n try {\n linkProtocol = new URL(linkParams.url).protocol;\n } catch {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"openLink requires a valid URL\",\n );\n return;\n }\n if (linkProtocol !== \"https:\" && linkProtocol !== \"http:\") {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"openLink only accepts http(s) URLs\",\n );\n return;\n }\n respond(req.id, {\n result: await handlers.openLink({ url: linkParams.url }),\n });\n return;\n }\n\n case \"sendMessage\": {\n if (!handlers.sendMessage) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"sendMessage is not supported by this host\",\n );\n return;\n }\n respond(req.id, {\n result: (await handlers.sendMessage(params)) ?? null,\n });\n return;\n }\n\n case \"updateModelContext\": {\n if (!handlers.updateModelContext) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"updateModelContext is not supported by this host\",\n );\n return;\n }\n respond(req.id, {\n result: (await handlers.updateModelContext(params)) ?? null,\n });\n return;\n }\n\n case \"requestDisplayMode\": {\n if (!handlers.requestDisplayMode) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"requestDisplayMode is not supported by this host\",\n );\n return;\n }\n const modeParams = (params ?? {}) as { mode?: unknown };\n if (!isMcpAppDisplayMode(modeParams.mode)) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"requestDisplayMode requires a valid 'mode'\",\n );\n return;\n }\n respond(req.id, {\n result: await handlers.requestDisplayMode({\n mode: modeParams.mode,\n }),\n });\n return;\n }\n\n default: {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n `Unknown method: ${req.method}`,\n );\n }\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n reportError(error);\n errorResponse(req.id, JSONRPC_ERROR.internalError, error.message);\n }\n };\n\n const handleNotification = (note: McpAppJsonRpcNotification) => {\n try {\n switch (normalizeMethod(note.method)) {\n case \"notifications/initialized\": {\n handlers.onInitialized?.(initializeParams);\n return;\n }\n case \"notifications/size_changed\": {\n const p = (note.params ?? {}) as { width?: number; height?: number };\n handlers.onSizeChange?.({\n ...(typeof p.width === \"number\" ? { width: p.width } : {}),\n ...(typeof p.height === \"number\" ? { height: p.height } : {}),\n });\n return;\n }\n case \"notifications/log\": {\n handlers.onLog?.(note.params);\n return;\n }\n case \"notifications/request_teardown\": {\n handlers.onRequestTeardown?.(note.params);\n return;\n }\n case \"notifications/error\": {\n const p = (note.params ?? {}) as { message?: string };\n reportError(\n new Error(\n typeof p.message === \"string\" ? p.message : \"Widget error\",\n ),\n );\n return;\n }\n default:\n return;\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n reportError(error);\n }\n };\n\n // The host applies the cross-origin guard before delegating; this only\n // validates the JSON-RPC envelope.\n const onMessage = (event: MessageEvent) => {\n if (disposed) return;\n if (!isJsonRpcMessage(event.data)) return;\n\n const msg = event.data;\n if (isRequest(msg)) {\n void handleRequest(msg);\n } else if (isNotification(msg)) {\n handleNotification(msg);\n }\n };\n\n return {\n onMessage,\n dispose: () => {\n disposed = true;\n },\n notifyToolInput: (input: unknown) => {\n post({\n jsonrpc: \"2.0\",\n method: \"notifications/tools/call/input\",\n params: { input },\n });\n post({\n jsonrpc: \"2.0\",\n method: \"ui/notifications/tool-input\",\n params: isRecord(input) ? { arguments: input } : {},\n });\n },\n notifyToolResult: (result: unknown) => {\n post({\n jsonrpc: \"2.0\",\n method: \"notifications/tools/call/result\",\n params: { result },\n });\n post({\n jsonrpc: \"2.0\",\n method: \"ui/notifications/tool-result\",\n params: isRecord(result)\n ? result\n : { content: [{ type: \"text\", text: String(result) }] },\n });\n },\n notifyHostContextChanged: (ctx: McpAppHostContext) => {\n post({\n jsonrpc: \"2.0\",\n method: \"notifications/host_context/changed\",\n params: ctx,\n });\n post({\n jsonrpc: \"2.0\",\n method: \"ui/notifications/host-context-changed\",\n params: ctx,\n });\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csp.d.ts","mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAS;AAyChD,eAAO,MAAM,cAAc,GAAI,MAAM,iBAAiB,KAAG,MAyBxD;AAiDD,eAAO,MAAM,cAAc,GACzB,MAAM,MAAM,EACZ,MAAM,iBAAiB,KACtB,MAKF","names":[],"ignoreList":[],"sources":["../../src/mcp-apps/csp.ts"],"sourcesContent":[null]}
|