@assistant-ui/core 0.3.18 → 0.3.20
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/dist/adapters/attachment.d.ts +9 -10
- package/dist/adapters/attachment.d.ts.map +1 -1
- package/dist/adapters/attachment.js +2 -1
- package/dist/adapters/attachment.js.map +1 -1
- package/dist/adapters/directive-formatter.d.ts +1 -2
- package/dist/adapters/directive-formatter.d.ts.map +1 -1
- package/dist/adapters/feedback.d.ts +2 -2
- package/dist/adapters/feedback.d.ts.map +1 -1
- package/dist/adapters/speech.d.ts +6 -7
- package/dist/adapters/speech.d.ts.map +1 -1
- package/dist/adapters/speech.js +13 -3
- package/dist/adapters/speech.js.map +1 -1
- package/dist/adapters/suggestion.d.ts +5 -6
- package/dist/adapters/suggestion.d.ts.map +1 -1
- package/dist/adapters/thread-history.d.ts +10 -7
- package/dist/adapters/thread-history.d.ts.map +1 -1
- package/dist/adapters/trigger.d.ts +1 -2
- package/dist/adapters/trigger.d.ts.map +1 -1
- package/dist/adapters/voice.d.ts +5 -6
- package/dist/adapters/voice.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internal/duplicate-detection.d.ts +1 -2
- package/dist/internal/duplicate-detection.d.ts.map +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/model-context/frame/host.d.ts +1 -2
- package/dist/model-context/frame/host.d.ts.map +1 -1
- package/dist/model-context/frame/host.js +26 -11
- package/dist/model-context/frame/host.js.map +1 -1
- package/dist/model-context/frame/provider.d.ts +1 -2
- package/dist/model-context/frame/provider.d.ts.map +1 -1
- package/dist/model-context/frame/types.d.ts +5 -6
- package/dist/model-context/frame/types.d.ts.map +1 -1
- package/dist/model-context/interactable-composer-metadata.d.ts +9 -10
- package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
- package/dist/model-context/interactable-composer-metadata.js +11 -9
- package/dist/model-context/interactable-composer-metadata.js.map +1 -1
- package/dist/model-context/registry-handles.d.ts +3 -4
- package/dist/model-context/registry-handles.d.ts.map +1 -1
- package/dist/model-context/registry.d.ts +1 -2
- package/dist/model-context/registry.d.ts.map +1 -1
- package/dist/model-context/tool-call-text.d.ts +2 -3
- package/dist/model-context/tool-call-text.d.ts.map +1 -1
- package/dist/model-context/tool.d.ts +2 -3
- package/dist/model-context/tool.d.ts.map +1 -1
- package/dist/model-context/types.d.ts +8 -9
- package/dist/model-context/types.d.ts.map +1 -1
- package/dist/react/AssistantProvider.d.ts +3 -4
- package/dist/react/AssistantProvider.d.ts.map +1 -1
- package/dist/react/AssistantRuntimeProvider.d.ts +1 -2
- package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
- package/dist/react/RuntimeAdapter.d.ts +2 -3
- package/dist/react/RuntimeAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts +4 -5
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js +43 -19
- package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
- package/dist/react/adapters/TitleGenerationAdapter.d.ts +2 -3
- package/dist/react/adapters/TitleGenerationAdapter.d.ts.map +1 -1
- package/dist/react/client/AdaptedRemoteThread.d.ts +1 -2
- package/dist/react/client/AdaptedRemoteThread.d.ts.map +1 -1
- package/dist/react/client/DataRenderers.d.ts +1 -2
- package/dist/react/client/DataRenderers.d.ts.map +1 -1
- package/dist/react/client/DataRenderers.js +20 -15
- package/dist/react/client/DataRenderers.js.map +1 -1
- package/dist/react/client/InMemoryThreadList.d.ts +3 -4
- package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
- package/dist/react/client/Interactables.d.ts +1 -2
- package/dist/react/client/Interactables.d.ts.map +1 -1
- package/dist/react/client/Interactables.js +11 -5
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/RemoteThreadList.d.ts +2 -3
- package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
- package/dist/react/client/RemoteThreadList.js +3 -2
- package/dist/react/client/RemoteThreadList.js.map +1 -1
- package/dist/react/client/Tools.d.ts +2 -2
- package/dist/react/client/Tools.d.ts.map +1 -1
- package/dist/react/client/interactable-model-context.d.ts +2 -3
- package/dist/react/client/interactable-model-context.d.ts.map +1 -1
- package/dist/react/client/interactable-model-context.js +3 -2
- package/dist/react/client/interactable-model-context.js.map +1 -1
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.js +2 -2
- package/dist/react/interactables-legacy/Interactables.d.ts +1 -2
- package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
- package/dist/react/interactables-legacy/interactable-model-context.d.ts +2 -3
- package/dist/react/interactables-legacy/interactable-model-context.d.ts.map +1 -1
- package/dist/react/interactables-legacy/scopes.d.ts +9 -10
- package/dist/react/interactables-legacy/scopes.d.ts.map +1 -1
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts +2 -3
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -1
- package/dist/react/interactables-legacy/useAssistantInteractable.js +3 -0
- package/dist/react/interactables-legacy/useAssistantInteractable.js.map +1 -1
- package/dist/react/interactables-legacy/useInteractableState.d.ts +1 -2
- package/dist/react/interactables-legacy/useInteractableState.d.ts.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts +1 -2
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
- package/dist/react/model-context/define-mcp-toolkit.d.ts +4 -5
- package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -1
- package/dist/react/model-context/define-toolkit.d.ts +2 -3
- package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
- package/dist/react/model-context/external-tool.d.ts +1 -2
- package/dist/react/model-context/external-tool.d.ts.map +1 -1
- package/dist/react/model-context/human-tool.d.ts +3 -4
- package/dist/react/model-context/human-tool.d.ts.map +1 -1
- package/dist/react/model-context/interactableTool.d.ts +3 -4
- package/dist/react/model-context/interactableTool.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantDataUI.d.ts +2 -3
- package/dist/react/model-context/makeAssistantDataUI.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantTool.d.ts +2 -3
- package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantToolUI.d.ts +2 -3
- package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
- package/dist/react/model-context/provider-tool.d.ts +2 -3
- package/dist/react/model-context/provider-tool.d.ts.map +1 -1
- package/dist/react/model-context/stub-tool.d.ts +1 -2
- package/dist/react/model-context/stub-tool.d.ts.map +1 -1
- package/dist/react/model-context/toolbox.d.ts +9 -10
- package/dist/react/model-context/toolbox.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantContext.d.ts +2 -2
- package/dist/react/model-context/useAssistantContext.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantDataUI.d.ts +2 -3
- package/dist/react/model-context/useAssistantDataUI.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantInstructions.d.ts +2 -2
- package/dist/react/model-context/useAssistantInstructions.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantTool.d.ts +2 -3
- package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantToolUI.d.ts +2 -3
- package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
- package/dist/react/model-context/useAuiToolOverrides.d.ts +1 -2
- package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -1
- package/dist/react/model-context/useInlineRender.d.ts +1 -2
- package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
- package/dist/react/model-context/useInteractable.d.ts +4 -5
- package/dist/react/model-context/useInteractable.d.ts.map +1 -1
- package/dist/react/model-context/useInteractable.js +4 -1
- package/dist/react/model-context/useInteractable.js.map +1 -1
- package/dist/react/model-context/useInteractableState.d.ts +1 -2
- package/dist/react/model-context/useInteractableState.d.ts.map +1 -1
- package/dist/react/model-context/useInteractableVersions.d.ts +1 -2
- package/dist/react/model-context/useInteractableVersions.d.ts.map +1 -1
- package/dist/react/model-context/useInteractableVersions.js +1 -1
- package/dist/react/model-context/useToolArgsStatus.d.ts +2 -3
- package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts +2 -3
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarFeedback.d.ts +2 -3
- package/dist/react/primitive-hooks/useActionBarFeedback.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarReload.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarSpeak.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarSpeak.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts +1 -2
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts +1 -2
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerCancel.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerDictate.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerDictate.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerSend.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerCancel.d.ts +1 -2
- package/dist/react/primitive-hooks/useEditComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerSend.d.ts +1 -2
- package/dist/react/primitive-hooks/useEditComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageBranching.d.ts +1 -2
- package/dist/react/primitive-hooks/useMessageBranching.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageError.d.ts +1 -2
- package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageReload.d.ts +1 -2
- package/dist/react/primitive-hooks/useMessageReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts +2 -3
- package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListNew.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListNew.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessages.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadMessages.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useVoice.d.ts +3 -4
- package/dist/react/primitive-hooks/useVoice.d.ts.map +1 -1
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +2 -3
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.d.ts +4 -5
- package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerIf.d.ts +4 -5
- package/dist/react/primitives/composer/ComposerIf.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerQueue.d.ts +2 -3
- package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.d.ts +4 -5
- package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.js +27 -28
- package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.d.ts +4 -5
- package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.d.ts +13 -5
- package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.js +3 -2
- package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
- package/dist/react/primitives/message/MessageParts.d.ts +10 -10
- package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageQuote.d.ts +2 -3
- package/dist/react/primitives/message/MessageQuote.d.ts.map +1 -1
- package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts +2 -3
- package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
- package/dist/react/primitives/part/PartMessages.d.ts +4 -4
- package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
- package/dist/react/primitives/part/PartMessages.js +1 -0
- package/dist/react/primitives/part/PartMessages.js.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.d.ts +7 -8
- package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.js +6 -5
- package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
- package/dist/react/primitives/thread/ThreadSuggestions.d.ts +5 -6
- package/dist/react/primitives/thread/ThreadSuggestions.d.ts.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.d.ts +4 -5
- package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts +2 -3
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -1
- package/dist/react/providers/AttachmentByIndexProvider.d.ts +2 -3
- package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +1 -2
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +1 -2
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/MessageByIdProvider.d.ts +1 -2
- package/dist/react/providers/MessageByIdProvider.d.ts.map +1 -1
- package/dist/react/providers/MessageByIndexProvider.d.ts +1 -2
- package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/PartByIndexProvider.d.ts +1 -2
- package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/QueueItemByIndexProvider.d.ts +2 -3
- package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ReadonlyThreadProvider.d.ts +2 -3
- package/dist/react/providers/ReadonlyThreadProvider.d.ts.map +1 -1
- package/dist/react/providers/SuggestionByIndexProvider.d.ts +2 -3
- package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.d.ts +1 -2
- package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts +1 -2
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +1 -2
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +3 -2
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +17 -7
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +1 -2
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +2 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.d.ts +4 -5
- package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +3 -3
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts +2 -3
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts +3 -4
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/runManager.d.ts +2 -3
- package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/types.d.ts +17 -18
- package/dist/react/runtimes/assistant-transport/types.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts +4 -5
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts +1 -2
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts +1 -2
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +3 -26
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +152 -378
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +2 -2
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js +22 -2
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.d.ts +51 -18
- package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.js +125 -17
- package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +6 -6
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js +4 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts +1 -2
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/sdkIdentity.d.ts +5 -0
- package/dist/react/runtimes/cloud/sdkIdentity.d.ts.map +1 -0
- package/dist/react/runtimes/cloud/sdkIdentity.js +9 -0
- package/dist/react/runtimes/cloud/sdkIdentity.js.map +1 -0
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +1 -2
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts +1 -2
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/createMessageConverter.d.ts +1 -2
- package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
- package/dist/react/runtimes/createRuntimeExtras.d.ts +3 -4
- package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.d.ts +14 -4
- package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.js +26 -61
- package/dist/react/runtimes/external-message-converter.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.d.ts +1 -2
- package/dist/react/runtimes/useExternalStoreRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts +1 -2
- package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts.map +1 -1
- package/dist/react/runtimes/useLocalRuntime.d.ts +3 -4
- package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts +1 -2
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +3 -3
- package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
- package/dist/react/runtimes/useRuntimeAdapters.d.ts +4 -4
- package/dist/react/runtimes/useRuntimeAdapters.d.ts.map +1 -1
- package/dist/react/runtimes/useStreamingTiming.d.ts +2 -2
- package/dist/react/runtimes/useStreamingTiming.d.ts.map +1 -1
- package/dist/react/types/MessagePartComponentTypes.d.ts +26 -27
- package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
- package/dist/react/types/scopes/dataRenderers.d.ts +3 -4
- package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -1
- package/dist/react/types/scopes/interactables.d.ts +10 -11
- package/dist/react/types/scopes/interactables.d.ts.map +1 -1
- package/dist/react/types/scopes/tools.d.ts +4 -5
- package/dist/react/types/scopes/tools.d.ts.map +1 -1
- package/dist/react/utils/getMessageQuote.d.ts +1 -2
- package/dist/react/utils/getMessageQuote.d.ts.map +1 -1
- package/dist/react/utils/groupParts.d.ts +13 -9
- package/dist/react/utils/groupParts.d.ts.map +1 -1
- package/dist/react/utils/groupParts.js +6 -0
- package/dist/react/utils/groupParts.js.map +1 -1
- package/dist/react/utils/useJSONEqual.d.ts +3 -2
- package/dist/react/utils/useJSONEqual.d.ts.map +1 -1
- package/dist/react/utils/useJSONEqual.js +6 -1
- package/dist/react/utils/useJSONEqual.js.map +1 -1
- package/dist/react/utils/useJSONSchemaDependency.d.ts +6 -0
- package/dist/react/utils/useJSONSchemaDependency.d.ts.map +1 -0
- package/dist/react/utils/useJSONSchemaDependency.js +20 -0
- package/dist/react/utils/useJSONSchemaDependency.js.map +1 -0
- package/dist/runtime/api/assistant-runtime.d.ts +2 -3
- package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
- package/dist/runtime/api/attachment-runtime.d.ts +6 -7
- package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
- package/dist/runtime/api/bindings.d.ts +5 -6
- package/dist/runtime/api/bindings.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.d.ts +10 -10
- package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.d.ts +3 -4
- package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.js +3 -2
- package/dist/runtime/api/message-part-runtime.js.map +1 -1
- package/dist/runtime/api/message-runtime.d.ts +8 -6
- package/dist/runtime/api/message-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-runtime.js +3 -2
- package/dist/runtime/api/message-runtime.js.map +1 -1
- package/dist/runtime/api/paths.d.ts +6 -7
- package/dist/runtime/api/paths.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.d.ts +8 -8
- package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts +4 -5
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +10 -11
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.js +2 -5
- package/dist/runtime/api/thread-runtime.js.map +1 -1
- package/dist/runtime/base/base-assistant-runtime-core.d.ts +1 -2
- package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts +2 -2
- package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.js +46 -10
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts +10 -3
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js +212 -77
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +1 -2
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.js +12 -2
- package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +1 -2
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js +7 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts +1 -2
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -1
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts +1 -2
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/composer-runtime-core.d.ts +10 -11
- package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +4 -5
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +23 -16
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts +2 -3
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.d.ts +10 -4
- package/dist/runtime/queue/message-queue.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.js +70 -7
- package/dist/runtime/queue/message-queue.js.map +1 -1
- package/dist/runtime/queue/queue-item.d.ts +2 -3
- package/dist/runtime/queue/queue-item.d.ts.map +1 -1
- package/dist/runtime/utils/abortable-thread-load.d.ts +2 -3
- package/dist/runtime/utils/abortable-thread-load.d.ts.map +1 -1
- package/dist/runtime/utils/attachment-add-operations.d.ts +3 -4
- package/dist/runtime/utils/attachment-add-operations.d.ts.map +1 -1
- package/dist/runtime/utils/auto-status.d.ts +9 -6
- package/dist/runtime/utils/auto-status.d.ts.map +1 -1
- package/dist/runtime/utils/auto-status.js +12 -4
- package/dist/runtime/utils/auto-status.js.map +1 -1
- package/dist/runtime/utils/chat-model-adapter.d.ts +5 -6
- package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.d.ts +26 -15
- package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.js +51 -14
- package/dist/runtime/utils/external-message-conversion.js.map +1 -1
- package/dist/runtime/utils/external-store-message.d.ts +4 -5
- package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository-session.d.ts +3 -4
- package/dist/runtime/utils/message-repository-session.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.d.ts +4 -5
- package/dist/runtime/utils/message-repository.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.js +3 -3
- package/dist/runtime/utils/message-repository.js.map +1 -1
- package/dist/runtime/utils/pending-tool-calls.d.ts +2 -3
- package/dist/runtime/utils/pending-tool-calls.d.ts.map +1 -1
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +1 -2
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
- package/dist/runtime/utils/runtime-extras-brand.d.ts +2 -3
- package/dist/runtime/utils/runtime-extras-brand.d.ts.map +1 -1
- package/dist/runtime/utils/stored-message-parts.d.ts +21 -0
- package/dist/runtime/utils/stored-message-parts.d.ts.map +1 -0
- package/dist/runtime/utils/stored-message-parts.js +83 -0
- package/dist/runtime/utils/stored-message-parts.js.map +1 -0
- package/dist/runtime/utils/streaming-timing.d.ts +4 -5
- package/dist/runtime/utils/streaming-timing.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.d.ts +7 -6
- package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.js +4 -2
- package/dist/runtime/utils/thread-message-like.js.map +1 -1
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts +3 -4
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts.map +1 -1
- package/dist/runtime/utils/tool-call-tree.d.ts +4 -5
- package/dist/runtime/utils/tool-call-tree.d.ts.map +1 -1
- package/dist/runtimes/assistant-transport/utils.d.ts +1 -2
- package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-adapter.d.ts +9 -6
- package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-runtime-core.d.ts +1 -2
- package/dist/runtimes/external-store/external-store-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-shared-options.d.ts +2 -3
- package/dist/runtimes/external-store/external-store-shared-options.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +2 -3
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +4 -3
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js +36 -6
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/thread-message-converter.d.ts +2 -3
- package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +2 -3
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/internal.d.ts +1 -1
- package/dist/runtimes/local/local-runtime-core.d.ts +1 -2
- package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-runtime-options.d.ts +1 -2
- package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +2 -3
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +10 -5
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +57 -10
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/local/should-continue.d.ts +1 -2
- package/dist/runtimes/local/should-continue.d.ts.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +1 -2
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +16 -17
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/title-generation.d.ts +7 -8
- package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/title.d.ts +2 -3
- package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/types.d.ts +8 -9
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +4 -5
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +2 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
- package/dist/store/clients/chain-of-thought-client.d.ts +1 -2
- package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
- package/dist/store/clients/external-thread.d.ts +3 -4
- package/dist/store/clients/external-thread.d.ts.map +1 -1
- package/dist/store/clients/external-thread.js +256 -211
- package/dist/store/clients/external-thread.js.map +1 -1
- package/dist/store/clients/model-context-client.d.ts +1 -2
- package/dist/store/clients/model-context-client.d.ts.map +1 -1
- package/dist/store/clients/no-op-composer-client.d.ts +1 -2
- package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
- package/dist/store/clients/runtime-adapter.d.ts +1 -2
- package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
- package/dist/store/clients/single-thread-list.d.ts +1 -2
- package/dist/store/clients/single-thread-list.d.ts.map +1 -1
- package/dist/store/clients/suggestions.d.ts +3 -4
- package/dist/store/clients/suggestions.d.ts.map +1 -1
- package/dist/store/clients/thread-message-client.d.ts +2 -3
- package/dist/store/clients/thread-message-client.d.ts.map +1 -1
- package/dist/store/clients/thread-selection-events.d.ts +1 -2
- package/dist/store/clients/thread-selection-events.d.ts.map +1 -1
- package/dist/store/clients/thread-tasks.d.ts +12 -0
- package/dist/store/clients/thread-tasks.d.ts.map +1 -0
- package/dist/store/clients/thread-tasks.js +69 -0
- package/dist/store/clients/thread-tasks.js.map +1 -0
- package/dist/store/env.d.ts +1 -2
- package/dist/store/env.d.ts.map +1 -1
- package/dist/store/index.d.ts +3 -2
- package/dist/store/index.js +3 -3
- package/dist/store/primitive-predicates.d.ts +11 -12
- package/dist/store/primitive-predicates.d.ts.map +1 -1
- package/dist/store/primitive-predicates.js +4 -4
- package/dist/store/primitive-predicates.js.map +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/handle-runtime-action.d.ts +1 -2
- package/dist/store/runtime-clients/handle-runtime-action.d.ts.map +1 -1
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts +1 -2
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts.map +1 -1
- package/dist/store/runtime-clients/liveRef.d.ts +1 -2
- package/dist/store/runtime-clients/liveRef.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +176 -128
- package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/useSubscribable.d.ts +1 -2
- package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
- package/dist/store/scope-registration.d.ts +2 -0
- package/dist/store/scope-registration.d.ts.map +1 -1
- package/dist/store/scopes/attachment.d.ts +4 -5
- package/dist/store/scopes/attachment.d.ts.map +1 -1
- package/dist/store/scopes/chain-of-thought.d.ts +5 -6
- package/dist/store/scopes/chain-of-thought.d.ts.map +1 -1
- package/dist/store/scopes/composer.d.ts +6 -7
- package/dist/store/scopes/composer.d.ts.map +1 -1
- package/dist/store/scopes/message.d.ts +6 -6
- package/dist/store/scopes/message.d.ts.map +1 -1
- package/dist/store/scopes/model-context.d.ts +3 -4
- package/dist/store/scopes/model-context.d.ts.map +1 -1
- package/dist/store/scopes/part.d.ts +4 -5
- package/dist/store/scopes/part.d.ts.map +1 -1
- package/dist/store/scopes/queue-item.d.ts +4 -4
- package/dist/store/scopes/queue-item.d.ts.map +1 -1
- package/dist/store/scopes/suggestion.d.ts +4 -5
- package/dist/store/scopes/suggestion.d.ts.map +1 -1
- package/dist/store/scopes/suggestions.d.ts +5 -6
- package/dist/store/scopes/suggestions.d.ts.map +1 -1
- package/dist/store/scopes/task.d.ts +35 -0
- package/dist/store/scopes/task.d.ts.map +1 -0
- package/dist/store/scopes/task.js +0 -0
- package/dist/store/scopes/thread-list-item.d.ts +5 -6
- package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
- package/dist/store/scopes/thread.d.ts +25 -6
- package/dist/store/scopes/thread.d.ts.map +1 -1
- package/dist/store/scopes/threads.d.ts +4 -5
- package/dist/store/scopes/threads.d.ts.map +1 -1
- package/dist/subscribable/subscribable.d.ts +15 -15
- package/dist/subscribable/subscribable.d.ts.map +1 -1
- package/dist/subscribable/subscribable.js +23 -15
- package/dist/subscribable/subscribable.js.map +1 -1
- package/dist/tests/remote-thread-list-test-helpers.d.ts +5 -6
- package/dist/tests/remote-thread-list-test-helpers.d.ts.map +1 -1
- package/dist/types/attachment.d.ts +9 -10
- package/dist/types/attachment.d.ts.map +1 -1
- package/dist/types/augmentations.d.ts +3 -4
- package/dist/types/augmentations.d.ts.map +1 -1
- package/dist/types/directive.d.ts +2 -3
- package/dist/types/directive.d.ts.map +1 -1
- package/dist/types/error.d.ts +8 -9
- package/dist/types/error.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/message.d.ts +53 -44
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js.map +1 -1
- package/dist/types/quote.d.ts +1 -2
- package/dist/types/quote.d.ts.map +1 -1
- package/dist/types/trigger.d.ts +2 -3
- package/dist/types/trigger.d.ts.map +1 -1
- package/dist/types/unsubscribe.d.ts +1 -2
- package/dist/types/unsubscribe.d.ts.map +1 -1
- package/dist/utils/abortable-iterable.d.ts +2 -3
- package/dist/utils/abortable-iterable.d.ts.map +1 -1
- package/dist/utils/abortable-iterable.js +30 -14
- package/dist/utils/abortable-iterable.js.map +1 -1
- package/dist/utils/composite-context-provider.d.ts +1 -2
- package/dist/utils/composite-context-provider.d.ts.map +1 -1
- package/dist/utils/data-url.d.ts +6 -7
- package/dist/utils/data-url.d.ts.map +1 -1
- package/dist/utils/getGroupStatus.d.ts +17 -2
- package/dist/utils/getGroupStatus.d.ts.map +1 -1
- package/dist/utils/getGroupStatus.js +32 -7
- package/dist/utils/getGroupStatus.js.map +1 -1
- package/dist/utils/id.d.ts +3 -4
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/image-media-type.d.ts +1 -2
- package/dist/utils/image-media-type.d.ts.map +1 -1
- package/dist/utils/invoke-user-callback.d.ts +1 -2
- package/dist/utils/invoke-user-callback.d.ts.map +1 -1
- package/dist/utils/json/is-json-equal.d.ts +1 -2
- package/dist/utils/json/is-json-equal.d.ts.map +1 -1
- package/dist/utils/json/is-json.d.ts +4 -5
- package/dist/utils/json/is-json.d.ts.map +1 -1
- package/dist/utils/json/stable-stringify-tool-args.d.ts +2 -3
- package/dist/utils/json/stable-stringify-tool-args.d.ts.map +1 -1
- package/dist/utils/normalizePartStatus.d.ts +4 -5
- package/dist/utils/normalizePartStatus.d.ts.map +1 -1
- package/dist/utils/notify-event-listeners.d.ts +1 -2
- package/dist/utils/notify-event-listeners.d.ts.map +1 -1
- package/dist/utils/record.d.ts +1 -2
- package/dist/utils/record.d.ts.map +1 -1
- package/dist/utils/silent-runtime-action.d.ts +2 -3
- package/dist/utils/silent-runtime-action.d.ts.map +1 -1
- package/dist/utils/text.d.ts +1 -2
- package/dist/utils/text.d.ts.map +1 -1
- package/dist/utils/wire-media.d.ts +3 -4
- package/dist/utils/wire-media.d.ts.map +1 -1
- package/dist/utils/wire-media.js +2 -2
- package/dist/utils/wire-media.js.map +1 -1
- package/package.json +15 -14
- package/src/adapters/attachment.ts +8 -1
- package/src/adapters/feedback.ts +1 -0
- package/src/adapters/speech.test.ts +236 -0
- package/src/adapters/speech.ts +17 -10
- package/src/adapters/thread-history.ts +3 -0
- package/src/index.ts +1 -0
- package/src/model-context/frame/host.test.ts +113 -1
- package/src/model-context/frame/host.ts +39 -12
- package/src/model-context/frame/provider.test.ts +45 -20
- package/src/model-context/interactable-composer-metadata.test.ts +30 -0
- package/src/model-context/interactable-composer-metadata.ts +10 -10
- package/src/react/RuntimeAdapter.test.ts +4 -1
- package/src/react/adapters/LocalStorageThreadListAdapter.test.ts +361 -0
- package/src/react/adapters/LocalStorageThreadListAdapter.tsx +69 -19
- package/src/react/client/DataRenderers.test.tsx +45 -0
- package/src/react/client/DataRenderers.ts +13 -9
- package/src/react/client/Interactables.test.ts +52 -4
- package/src/react/client/Interactables.ts +7 -1
- package/src/react/client/RemoteThreadList.concurrent.test.tsx +9 -3
- package/src/react/client/RemoteThreadList.test.ts +46 -7
- package/src/react/client/RemoteThreadList.ts +15 -2
- package/src/react/client/interactable-model-context.test.ts +44 -0
- package/src/react/client/interactable-model-context.ts +3 -2
- package/src/react/index.ts +5 -1
- package/src/react/interactables-legacy/Interactables.test.ts +9 -3
- package/src/react/interactables-legacy/useAssistantInteractable.test.tsx +150 -0
- package/src/react/interactables-legacy/useAssistantInteractable.ts +10 -1
- package/src/react/model-context/useInteractable.test.tsx +204 -0
- package/src/react/model-context/useInteractable.ts +3 -0
- package/src/react/primitive-hooks/useActionBarCopy.test.ts +5 -6
- package/src/react/primitive-hooks/useSuggestionTrigger.test.ts +0 -1
- package/src/react/primitives/generativeUI/GenerativeUI.test.tsx +54 -0
- package/src/react/primitives/generativeUI/GenerativeUI.tsx +13 -18
- package/src/react/primitives/message/MessageGroupedParts.test.tsx +99 -0
- package/src/react/primitives/message/MessageGroupedParts.tsx +15 -4
- package/src/react/primitives/part/PartMessages.test.tsx +104 -1
- package/src/react/primitives/part/PartMessages.tsx +1 -0
- package/src/react/primitives/thread/ThreadMessages.test.tsx +160 -0
- package/src/react/primitives/thread/ThreadMessages.tsx +8 -5
- package/src/react/providers/ReadonlyThreadProvider.test.tsx +56 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.layout.test.tsx +62 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.retry.test.tsx +2 -2
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +23 -20
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.title.test.tsx +24 -17
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +39 -24
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +7 -1
- package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +73 -46
- package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.test.tsx +66 -1
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.ts +20 -14
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +323 -1
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +190 -523
- package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +81 -0
- package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +27 -1
- package/src/react/runtimes/cloud/auiV0.ts +281 -26
- package/src/react/runtimes/cloud/auiV0DecodeSafely.test.ts +522 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.test.ts +21 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.ts +7 -1
- package/src/react/runtimes/cloud/sdkIdentity.ts +9 -0
- package/src/react/runtimes/cloud/useCloudThreadListAdapter.test.tsx +18 -4
- package/src/react/runtimes/external-message-converter.test.ts +143 -4
- package/src/react/runtimes/external-message-converter.ts +39 -93
- package/src/react/runtimes/remote-thread-hook-on-tap.test.ts +2 -1
- package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +8 -2
- package/src/react/runtimes/useExternalStoreRuntime.suggestions.test.tsx +6 -2
- package/src/react/runtimes/useRemoteThreadListRuntime.concurrent.test.tsx +84 -4
- package/src/react/runtimes/useRemoteThreadListRuntime.ts +6 -2
- package/src/react/utils/groupParts.ts +12 -1
- package/src/react/utils/useJSONEqual.ts +9 -0
- package/src/react/utils/useJSONSchemaDependency.ts +22 -0
- package/src/runtime/api/message-part-runtime.ts +4 -1
- package/src/runtime/api/message-runtime.ts +15 -2
- package/src/runtime/api/thread-runtime.test.ts +58 -0
- package/src/runtime/api/thread-runtime.ts +2 -4
- package/src/runtime/base/base-composer-runtime-core.ts +69 -16
- package/src/runtime/base/base-thread-runtime-core.test.ts +1799 -49
- package/src/runtime/base/base-thread-runtime-core.ts +296 -94
- package/src/runtime/base/default-edit-composer-runtime-core.ts +12 -2
- package/src/runtime/base/default-thread-composer-runtime-core.ts +12 -1
- package/src/runtime/interfaces/thread-runtime-core.ts +8 -0
- package/src/runtime/queue/message-queue.ts +79 -7
- package/src/runtime/utils/auto-status.test.ts +112 -1
- package/src/runtime/utils/auto-status.ts +31 -5
- package/src/runtime/utils/external-message-conversion.test.ts +177 -0
- package/src/runtime/utils/external-message-conversion.ts +128 -33
- package/src/runtime/utils/message-repository.test.ts +49 -0
- package/src/runtime/utils/message-repository.ts +3 -3
- package/src/runtime/utils/stored-message-parts.ts +174 -0
- package/src/runtime/utils/thread-message-like.test.ts +52 -0
- package/src/runtime/utils/thread-message-like.ts +11 -2
- package/src/runtimes/external-store/external-store-adapter.ts +4 -0
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +74 -9
- package/src/runtimes/local/local-thread-runtime-core.test.ts +189 -12
- package/src/runtimes/local/local-thread-runtime-core.ts +91 -10
- package/src/runtimes/tool-invocations/EDGE_CASES.md +2 -6
- package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +133 -0
- package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +10 -6
- package/src/store/clients/external-thread.ts +53 -14
- package/src/store/clients/thread-tasks.test.ts +274 -0
- package/src/store/clients/thread-tasks.ts +138 -0
- package/src/store/index.ts +8 -0
- package/src/store/primitive-predicates.test.ts +64 -5
- package/src/store/primitive-predicates.ts +10 -2
- package/src/store/runtime-clients/thread-runtime-client.test.tsx +110 -0
- package/src/store/runtime-clients/thread-runtime-client.ts +31 -1
- package/src/store/scope-registration.ts +2 -0
- package/src/store/scopes/message.ts +4 -1
- package/src/store/scopes/task.ts +34 -0
- package/src/store/scopes/thread.ts +16 -0
- package/src/store/thread-tasks.test.tsx +209 -0
- package/src/subscribable/subscribable.test.ts +161 -1
- package/src/subscribable/subscribable.ts +25 -15
- package/src/tests/MessageRepository.test.ts +1 -5
- package/src/tests/attachment-adapters.test.ts +16 -1
- package/src/tests/auiV0Encode.test.ts +304 -0
- package/src/tests/base-composer-runtime-core-addAttachment.test.ts +6 -6
- package/src/tests/base-composer-runtime-core-send.test.ts +51 -0
- package/src/tests/base-composer-runtime-core.test.ts +329 -6
- package/src/tests/composer-can-cancel.test.ts +35 -6
- package/src/tests/composer-can-send.test.ts +22 -0
- package/src/tests/default-edit-composer-runtime-core.test.ts +47 -0
- package/src/tests/external-store-thread-runtime-core-adapter.test.ts +369 -16
- package/src/tests/external-store-thread-runtime-core.test.ts +31 -0
- package/src/tests/external-thread-attachments.test.tsx +91 -23
- package/src/tests/external-thread-feedback.test.tsx +20 -7
- package/src/tests/external-thread-parity.test.tsx +35 -1
- package/src/tests/groupParts.test.ts +71 -0
- package/src/tests/message-queue.test.ts +290 -2
- package/src/tests/remote-thread-list-reactive-threadId.test.ts +51 -0
- package/src/tests/thread-switch-events.test.tsx +11 -7
- package/src/tests/useRemoteThreadListRuntime-controlled.test.tsx +45 -1
- package/src/types/index.ts +1 -0
- package/src/types/message.test.ts +19 -0
- package/src/types/message.ts +23 -7
- package/src/utils/abortable-iterable.test.ts +115 -0
- package/src/utils/abortable-iterable.ts +34 -23
- package/src/utils/getGroupStatus.test.ts +70 -4
- package/src/utils/getGroupStatus.ts +35 -12
- package/src/utils/wire-media.test.ts +10 -0
- package/src/utils/wire-media.ts +6 -2
|
@@ -103,7 +103,7 @@ var BaseComposerRuntimeCore = class extends BaseSubscribable {
|
|
|
103
103
|
const adapter = this.getAttachmentAdapter();
|
|
104
104
|
if (adapter) {
|
|
105
105
|
const pending = this._attachments.filter((a) => !isAttachmentComplete(a));
|
|
106
|
-
await Promise.all(pending.map((a) => adapter.remove(a)));
|
|
106
|
+
await Promise.all(pending.map(async (a) => adapter.remove(a)));
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
async reset() {
|
|
@@ -121,14 +121,18 @@ var BaseComposerRuntimeCore = class extends BaseSubscribable {
|
|
|
121
121
|
}
|
|
122
122
|
async clearAttachments() {
|
|
123
123
|
this._cancelAllAttachmentAdds();
|
|
124
|
+
if (this._isSending) for (const attachment of this._attachments) this._removedDuringSend.add(attachment.id);
|
|
124
125
|
const task = this._onClearAttachments();
|
|
125
126
|
this.setAttachments([]);
|
|
126
127
|
await task;
|
|
127
128
|
}
|
|
128
129
|
async send(options) {
|
|
129
130
|
if (!this.canSend || this._isSending) return;
|
|
130
|
-
if (this._dictationSession) {
|
|
131
|
+
if (this._dictationSession) try {
|
|
131
132
|
this._dictationSession.cancel();
|
|
133
|
+
} catch (error) {
|
|
134
|
+
console.error("[assistant-ui] Dictation session cancel threw", error);
|
|
135
|
+
} finally {
|
|
132
136
|
this._cleanupDictation();
|
|
133
137
|
}
|
|
134
138
|
const adapter = this.getAttachmentAdapter();
|
|
@@ -386,16 +390,26 @@ var BaseComposerRuntimeCore = class extends BaseSubscribable {
|
|
|
386
390
|
startDictation() {
|
|
387
391
|
const adapter = this.getDictationAdapter();
|
|
388
392
|
if (!adapter) throw new Error("Dictation adapter not configured");
|
|
393
|
+
const isReplacing = this._dictationSession !== void 0;
|
|
389
394
|
if (this._dictationSession) {
|
|
390
|
-
|
|
391
|
-
this.
|
|
392
|
-
this.
|
|
393
|
-
this._dictationSession = void 0;
|
|
395
|
+
const oldSession = this._dictationSession;
|
|
396
|
+
this._cleanupDictation({ notify: false });
|
|
397
|
+
this._stopDictationSession(oldSession);
|
|
394
398
|
}
|
|
395
399
|
const inputDisabled = adapter.disableInputDuringDictation ?? false;
|
|
396
400
|
this._dictationBaseText = this._text;
|
|
397
401
|
this._currentInterimText = "";
|
|
398
|
-
|
|
402
|
+
let session;
|
|
403
|
+
try {
|
|
404
|
+
session = adapter.listen();
|
|
405
|
+
} catch (error) {
|
|
406
|
+
if (isReplacing) try {
|
|
407
|
+
this._notifySubscribers();
|
|
408
|
+
} catch (notifyError) {
|
|
409
|
+
console.error("[assistant-ui] Dictation replacement rollback notification threw", notifyError);
|
|
410
|
+
}
|
|
411
|
+
throw error;
|
|
412
|
+
}
|
|
399
413
|
this._dictationSession = session;
|
|
400
414
|
const sessionId = ++this._dictationSessionIdCounter;
|
|
401
415
|
this._activeDictationSessionId = sessionId;
|
|
@@ -453,20 +467,42 @@ var BaseComposerRuntimeCore = class extends BaseSubscribable {
|
|
|
453
467
|
const session = this._dictationSession;
|
|
454
468
|
const sessionId = this._activeDictationSessionId;
|
|
455
469
|
const cleanup = () => this._cleanupDictation({ sessionId });
|
|
456
|
-
|
|
470
|
+
this._stopDictationSession(session, cleanup);
|
|
471
|
+
}
|
|
472
|
+
_stopDictationSession(session, onSettled = () => {}) {
|
|
473
|
+
let task;
|
|
474
|
+
try {
|
|
475
|
+
task = session.stop();
|
|
476
|
+
} catch (error) {
|
|
477
|
+
console.error("[assistant-ui] Dictation session stop threw", error);
|
|
478
|
+
onSettled();
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
task.then(onSettled, (error) => {
|
|
482
|
+
console.error("[assistant-ui] Dictation session stop rejected", error);
|
|
483
|
+
onSettled();
|
|
484
|
+
});
|
|
457
485
|
}
|
|
458
486
|
_cleanupDictation(options) {
|
|
459
487
|
if (options?.sessionId !== void 0 && options.sessionId !== this._activeDictationSessionId || this._isCleaningDictation) return;
|
|
460
488
|
this._isCleaningDictation = true;
|
|
489
|
+
const runCleanup = (cleanup) => {
|
|
490
|
+
try {
|
|
491
|
+
cleanup();
|
|
492
|
+
} catch (error) {
|
|
493
|
+
console.error("[assistant-ui] Dictation cleanup threw", error);
|
|
494
|
+
}
|
|
495
|
+
};
|
|
461
496
|
try {
|
|
462
|
-
|
|
497
|
+
const unsubscribes = this._dictationUnsubscribes;
|
|
463
498
|
this._dictationUnsubscribes = [];
|
|
464
499
|
this._dictationSession = void 0;
|
|
465
500
|
this._activeDictationSessionId = void 0;
|
|
466
501
|
this._dictation = void 0;
|
|
467
502
|
this._dictationBaseText = "";
|
|
468
503
|
this._currentInterimText = "";
|
|
469
|
-
|
|
504
|
+
for (const unsubscribe of unsubscribes) runCleanup(unsubscribe);
|
|
505
|
+
if (options?.notify !== false) runCleanup(() => this._notifySubscribers());
|
|
470
506
|
} finally {
|
|
471
507
|
this._isCleaningDictation = false;
|
|
472
508
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-composer-runtime-core.js","names":["isAttachmentComplete","isCreateAttachment","Attachment","CompleteAttachment","CreateAttachment","PendingAttachment","MessageRole","AppendMessage","isMessageNotSentError","QuoteInfo","Unsubscribe","RunConfig","BaseSubscribable","AttachmentAdapter","fileMatchesAccept","AttachmentAddErrorReason","ComposerRuntimeCore","ComposerRuntimeEventCallback","ComposerRuntimeEventPayload","ComposerRuntimeEventType","DictationState","SendOptions","DictationAdapter","QueuePlacement","EMPTY_QUEUE_ITEMS","QueueItemState","generateId","notifyEventListeners","AttachmentAddOperations","drainAttachmentAdd","BaseComposerRuntimeCore","isEditing","getAttachmentAdapter","getDictationAdapter","enrichWithComposerMetadata","metadata","custom","Record","message","T","composerMetadata","attachmentAccept","accept","_attachments","attachments","setAttachments","value","_notifySubscribers","canCancel","canSend","isEmpty","text","trim","length","_text","_role","role","_runConfig","runConfig","_quote","undefined","quote","setQuote","setText","_rebaseDictation","_dictation","_dictationBaseText","_currentInterimText","status","inputDisabled","setRole","setRunConfig","_isSending","_removedDuringSend","Set","_sendGeneration","_attachmentAddOperations","_cancelAttachmentAdd","attachmentId","cancel","_cancelAllAttachmentAdds","cancelAll","_emptyTextAndAttachments","_onClearAttachments","adapter","pending","filter","a","Promise","all","map","remove","reset","clear","Object","keys","task","clearAttachments","send","options","_dictationSession","_cleanupDictation","attachmentTasks","Error","result","originalAttachments","generation","resolvedAttachments","e","allSettled","then","sentIds","id","has","finalAttachments","Omit","createdAt","Date","content","type","draft","sendTask","handleSend","error","_restoreUnsentDraft","catch","_notifyEventSubscribers","chars","restoreDraft","retractDraft","attachmentsUntouched","handleCancel","queue","moveQueueItem","_queueItemId","_placement","removeQueueItem","addAttachment","fileOrAttachment","File","name","contentType","err","_safeEmitAttachmentAddError","operation","start","upsertAttachment","idx","findIndex","attachment","slice","lastAttachment","add","file","isCancelled","reason","String","finish","subscriberError","console","removeAttachment","index","candidate","Session","_dictationUnsubscribes","_dictationSessionIdCounter","_activeDictationSessionId","_isCleaningDictation","dictation","_isActiveSession","sessionId","session","startDictation","unsub","oldSession","stop","disableInputDuringDictation","listen","unsubSpeech","onSpeech","isFinal","needsSeparator","endsWith","transcript","separator","_","rest","push","unsubStart","onSpeechStart","unsubEnd","onSpeechEnd","statusInterval","setInterval","clearInterval","stopDictation","cleanup","isStaleSession","_eventSubscribers","Map","payload","event","E","subscribers","get","unstable_on","callback","wrapped","set","delete"],"sources":["../../../src/runtime/base/base-composer-runtime-core.ts"],"sourcesContent":["import {\n isAttachmentComplete,\n isCreateAttachment,\n type Attachment,\n type CompleteAttachment,\n type CreateAttachment,\n type PendingAttachment,\n} from \"../../types/attachment\";\nimport type { MessageRole, AppendMessage } from \"../../types/message\";\nimport { isMessageNotSentError } from \"../../types/error\";\nimport type { QuoteInfo } from \"../../types/quote\";\nimport type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { RunConfig } from \"../../types/message\";\nimport { BaseSubscribable } from \"../../subscribable/subscribable\";\nimport {\n type AttachmentAdapter,\n fileMatchesAccept,\n} from \"../../adapters/attachment\";\nimport type {\n AttachmentAddErrorReason,\n ComposerRuntimeCore,\n ComposerRuntimeEventCallback,\n ComposerRuntimeEventPayload,\n ComposerRuntimeEventType,\n DictationState,\n SendOptions,\n} from \"../interfaces/composer-runtime-core\";\nimport type { DictationAdapter } from \"../../adapters/speech\";\nimport type { QueuePlacement } from \"../queue/external-thread-queue-adapter\";\nimport { EMPTY_QUEUE_ITEMS, type QueueItemState } from \"../queue/queue-item\";\nimport { generateId } from \"../../utils/id\";\nimport { notifyEventListeners } from \"../../utils/notify-event-listeners\";\nimport {\n AttachmentAddOperations,\n drainAttachmentAdd,\n} from \"../utils/attachment-add-operations\";\n\nexport abstract class BaseComposerRuntimeCore\n extends BaseSubscribable\n implements ComposerRuntimeCore\n{\n public readonly isEditing = true;\n\n protected abstract getAttachmentAdapter(): AttachmentAdapter | undefined;\n protected abstract getDictationAdapter(): DictationAdapter | undefined;\n\n protected enrichWithComposerMetadata<\n T extends { metadata?: { custom?: Record<string, unknown> } },\n >(message: T, composerMetadata: Record<string, unknown> | undefined): T {\n if (!composerMetadata) return message;\n return {\n ...message,\n metadata: {\n ...message.metadata,\n custom: { ...message.metadata?.custom, ...composerMetadata },\n },\n } as T;\n }\n\n public get attachmentAccept(): string {\n return this.getAttachmentAdapter()?.accept ?? \"*\";\n }\n\n private _attachments: readonly Attachment[] = [];\n public get attachments() {\n return this._attachments;\n }\n\n protected setAttachments(value: readonly Attachment[]) {\n this._attachments = value;\n this._notifySubscribers();\n }\n\n public abstract get canCancel(): boolean;\n public abstract get canSend(): boolean;\n\n public get isEmpty() {\n return !this.text.trim() && !this.attachments.length;\n }\n\n private _text = \"\";\n\n get text() {\n return this._text;\n }\n\n private _role: MessageRole = \"user\";\n\n get role() {\n return this._role;\n }\n\n private _runConfig: RunConfig = {};\n\n get runConfig() {\n return this._runConfig;\n }\n\n private _quote: QuoteInfo | undefined = undefined;\n\n get quote() {\n return this._quote;\n }\n\n public setQuote(quote: QuoteInfo | undefined) {\n if (this._quote === quote) return;\n\n this._quote = quote;\n this._notifySubscribers();\n }\n\n public setText(value: string) {\n if (this._text === value) return;\n\n this._text = value;\n this._rebaseDictation(value);\n this._notifySubscribers();\n }\n\n // A live dictation session appends to the text it last saw, so any write\n // that bypasses `setText` has to move that baseline or the next transcript\n // overwrites what was just written.\n private _rebaseDictation(value: string) {\n if (!this._dictation) return;\n\n this._dictationBaseText = value;\n this._currentInterimText = \"\";\n const { status, inputDisabled } = this._dictation;\n this._dictation = inputDisabled ? { status, inputDisabled } : { status };\n }\n\n public setRole(role: MessageRole) {\n if (this._role === role) return;\n\n this._role = role;\n this._notifySubscribers();\n }\n\n public setRunConfig(runConfig: RunConfig) {\n if (this._runConfig === runConfig) return;\n\n this._runConfig = runConfig;\n this._notifySubscribers();\n }\n\n protected _isSending = false;\n private _removedDuringSend = new Set<string>();\n private _sendGeneration = 0;\n private _attachmentAddOperations = new AttachmentAddOperations();\n\n private _cancelAttachmentAdd(attachmentId: string) {\n this._attachmentAddOperations.cancel(attachmentId);\n }\n\n private _cancelAllAttachmentAdds() {\n this._attachmentAddOperations.cancelAll();\n }\n\n private _emptyTextAndAttachments() {\n this._attachments = [];\n this._text = \"\";\n this._rebaseDictation(\"\");\n this._notifySubscribers();\n }\n\n private async _onClearAttachments() {\n const adapter = this.getAttachmentAdapter();\n if (adapter) {\n const pending = this._attachments.filter((a) => !isAttachmentComplete(a));\n await Promise.all(pending.map((a) => adapter.remove(a)));\n }\n }\n\n public async reset() {\n this._cancelAllAttachmentAdds();\n\n // A send whose adapter never settles must not brick the composer; reset is\n // the escape hatch that releases the in-flight lock. Bumping the generation\n // invalidates that send entirely so a late-settling upload can neither\n // append the discarded draft nor touch a newer send's lock.\n this._sendGeneration++;\n this._isSending = false;\n this._removedDuringSend.clear();\n\n if (\n this._attachments.length === 0 &&\n this._text === \"\" &&\n this._role === \"user\" &&\n Object.keys(this._runConfig).length === 0 &&\n this._quote === undefined\n ) {\n return;\n }\n\n this._role = \"user\";\n this._runConfig = {};\n this._quote = undefined;\n\n const task = this._onClearAttachments();\n this._emptyTextAndAttachments();\n await task;\n }\n\n public async clearAttachments() {\n this._cancelAllAttachmentAdds();\n const task = this._onClearAttachments();\n this.setAttachments([]);\n\n await task;\n }\n\n public async send(options?: SendOptions) {\n if (!this.canSend || this._isSending) return;\n\n if (this._dictationSession) {\n this._dictationSession.cancel();\n this._cleanupDictation();\n }\n\n const adapter = this.getAttachmentAdapter();\n const attachmentTasks = this.attachments.map(async (a) => {\n if (isAttachmentComplete(a)) return a;\n if (!adapter) throw new Error(\"Attachments are not supported\");\n const result = await adapter.send(a);\n return result as CompleteAttachment;\n });\n\n const originalAttachments = this.attachments;\n const text = this.text;\n const quote = this._quote;\n const role = this.role;\n const runConfig = this.runConfig;\n this._quote = undefined;\n this._text = \"\";\n this._isSending = true;\n const generation = ++this._sendGeneration;\n this._notifySubscribers();\n\n let resolvedAttachments: CompleteAttachment[];\n try {\n resolvedAttachments = await Promise.all(attachmentTasks);\n } catch (e) {\n if (generation === this._sendGeneration) {\n if (!this.text.trim() && this._quote === undefined) {\n this._text = text;\n this._rebaseDictation(text);\n this._quote = quote;\n this._notifySubscribers();\n }\n // Promise.all rejects on the first failure, but sibling uploads from\n // this batch keep running; the send rejects immediately while the\n // retry lock is held until they settle, or a retry could re-send\n // attachments that are still in flight.\n void Promise.allSettled(attachmentTasks).then(() => {\n if (generation !== this._sendGeneration) return;\n this._removedDuringSend.clear();\n this._isSending = false;\n this._notifySubscribers();\n });\n }\n throw e;\n }\n\n // A reset during the upload discarded this send's draft; the settled\n // uploads must not append it or touch the lock a newer send may own.\n if (generation !== this._sendGeneration) return;\n\n // Drop by id, not wholesale: the user may have added or removed chips while\n // the upload was in flight.\n const sentIds = new Set(originalAttachments.map((a) => a.id));\n this._attachments = this._attachments.filter((a) => !sentIds.has(a.id));\n this._isSending = false;\n this._notifySubscribers();\n\n // An attachment removed mid-upload can't be cancelled, but it can still be\n // dropped from the outgoing message instead of silently being sent anyway.\n const finalAttachments = resolvedAttachments.filter(\n (a) => !this._removedDuringSend.has(a.id),\n );\n this._removedDuringSend.clear();\n\n const message: Omit<AppendMessage, \"parentId\" | \"sourceId\"> = {\n createdAt: new Date(),\n role,\n content: text ? [{ type: \"text\", text }] : [],\n attachments: finalAttachments,\n runConfig,\n metadata: { custom: { ...(quote ? { quote } : {}) } },\n };\n\n const draft = { text, quote, attachments: finalAttachments };\n let sendTask: void | Promise<void>;\n try {\n sendTask = this.handleSend(message, options);\n } catch (error) {\n this._restoreUnsentDraft(error, generation, draft);\n throw error;\n }\n if (sendTask)\n void sendTask.catch((error) => {\n this._restoreUnsentDraft(error, generation, draft);\n });\n this._notifyEventSubscribers(\"send\", {\n chars: text.length,\n attachments: finalAttachments.length,\n });\n }\n\n /**\n * Take a message back into the composer when it has nowhere else to live:\n * a send the runtime never dispatched, or a message a cancelled run is\n * removing from the thread. Reports whether the composer accepted it, so a\n * caller that is also removing the message can keep it instead of dropping\n * it. Refused, and left untouched, while the composer holds anything of its\n * own.\n */\n public restoreDraft(draft: {\n text: string;\n quote?: QuoteInfo | undefined;\n attachments?: readonly Attachment[] | undefined;\n }): boolean {\n if (\n this._text.trim() ||\n this._quote !== undefined ||\n this._attachments.length > 0\n )\n return false;\n\n this._text = draft.text;\n this._rebaseDictation(draft.text);\n this._quote = draft.quote;\n this._attachments = draft.attachments ?? [];\n this._notifySubscribers();\n return true;\n }\n\n /**\n * Inverse of `restoreDraft`: clears the composer while it still holds\n * exactly the given draft. A draft the user has edited since is left\n * untouched.\n */\n public retractDraft(draft: {\n text: string;\n quote?: QuoteInfo | undefined;\n attachments?: readonly Attachment[] | undefined;\n }): void {\n const attachmentsUntouched =\n draft.attachments !== undefined\n ? this._attachments === draft.attachments\n : this._attachments.length === 0;\n if (\n this._text !== draft.text ||\n this._quote !== draft.quote ||\n !attachmentsUntouched\n )\n return;\n\n this._text = \"\";\n this._rebaseDictation(\"\");\n this._quote = undefined;\n this._attachments = [];\n this._notifySubscribers();\n }\n\n // The generation check is what a reset and a later send use to invalidate a\n // draft, so of several queued drafts only the most recent one is still\n // restorable.\n private _restoreUnsentDraft(\n error: unknown,\n generation: number,\n draft: {\n text: string;\n quote: QuoteInfo | undefined;\n attachments: readonly CompleteAttachment[];\n },\n ) {\n if (!isMessageNotSentError(error)) return;\n if (generation !== this._sendGeneration) return;\n this.restoreDraft(draft);\n }\n\n public cancel() {\n this.handleCancel();\n }\n\n public get queue(): readonly QueueItemState[] {\n return EMPTY_QUEUE_ITEMS;\n }\n\n public moveQueueItem(\n _queueItemId: string,\n _placement: QueuePlacement,\n ): void {}\n public removeQueueItem(_queueItemId: string): void {}\n\n protected abstract handleSend(\n message: Omit<AppendMessage, \"parentId\" | \"sourceId\">,\n options?: SendOptions,\n ): void | Promise<void>;\n protected abstract handleCancel(): void;\n\n async addAttachment(fileOrAttachment: File | CreateAttachment) {\n if (isCreateAttachment(fileOrAttachment)) {\n const adapter = this.getAttachmentAdapter();\n if (\n adapter &&\n !fileMatchesAccept(\n {\n name: fileOrAttachment.name,\n type: fileOrAttachment.contentType ?? \"\",\n },\n adapter.accept,\n )\n ) {\n const message = `File type ${fileOrAttachment.contentType || \"unknown\"} is not accepted. Accepted types: ${adapter.accept}`;\n const err = new Error(message);\n this._safeEmitAttachmentAddError(\n \"not-accepted\",\n message,\n undefined,\n err,\n fileOrAttachment.contentType,\n );\n throw err;\n }\n\n const a: CompleteAttachment = {\n id: fileOrAttachment.id ?? generateId(),\n type: fileOrAttachment.type ?? \"document\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.contentType,\n content: fileOrAttachment.content,\n status: { type: \"complete\" },\n };\n this._attachments = [...this._attachments, a];\n this._notifySubscribers();\n this._notifyEventSubscribers(\"attachmentAdd\", {\n ...(a.contentType ? { contentType: a.contentType } : undefined),\n });\n return;\n }\n\n const adapter = this.getAttachmentAdapter();\n if (!adapter) {\n const message = \"Attachments are not supported\";\n const err = new Error(message);\n this._safeEmitAttachmentAddError(\n \"no-adapter\",\n message,\n undefined,\n err,\n fileOrAttachment.type,\n );\n throw err;\n }\n\n if (\n !fileMatchesAccept(\n { name: fileOrAttachment.name, type: fileOrAttachment.type },\n adapter.accept,\n )\n ) {\n const message = `File type ${fileOrAttachment.type || \"unknown\"} is not accepted. Accepted types: ${adapter.accept}`;\n const err = new Error(message);\n this._safeEmitAttachmentAddError(\n \"not-accepted\",\n message,\n undefined,\n err,\n fileOrAttachment.type,\n );\n throw err;\n }\n\n const operation = this._attachmentAddOperations.start();\n const upsertAttachment = (a: PendingAttachment) => {\n if (!this._attachmentAddOperations.accept(operation, a.id)) return false;\n\n const idx = this._attachments.findIndex(\n (attachment) => attachment.id === a.id,\n );\n if (idx !== -1)\n this._attachments = [\n ...this._attachments.slice(0, idx),\n a,\n ...this._attachments.slice(idx + 1),\n ];\n else {\n this._attachments = [...this._attachments, a];\n }\n\n this._notifySubscribers();\n return true;\n };\n let lastAttachment: PendingAttachment | undefined;\n try {\n await drainAttachmentAdd(\n adapter.add({ file: fileOrAttachment }),\n (attachment) => {\n lastAttachment = attachment;\n return upsertAttachment(attachment);\n },\n );\n } catch (e) {\n if (this._attachmentAddOperations.isCancelled(operation)) return;\n if (lastAttachment) {\n upsertAttachment({\n ...lastAttachment,\n status: {\n type: \"incomplete\",\n reason: \"error\",\n message: e instanceof Error ? e.message : String(e),\n },\n });\n }\n this._safeEmitAttachmentAddError(\n \"adapter-error\",\n e instanceof Error ? e.message : String(e),\n lastAttachment?.id,\n e instanceof Error ? e : undefined,\n lastAttachment?.contentType || fileOrAttachment.type,\n );\n throw e;\n } finally {\n this._attachmentAddOperations.finish(operation);\n }\n\n if (this._attachmentAddOperations.isCancelled(operation)) return;\n if (\n lastAttachment?.status.type === \"incomplete\" &&\n lastAttachment.status.reason === \"error\"\n ) {\n this._safeEmitAttachmentAddError(\n \"adapter-error\",\n lastAttachment.status.message ??\n \"Attachment upload did not complete successfully.\",\n lastAttachment.id,\n undefined,\n lastAttachment.contentType || fileOrAttachment.type,\n );\n } else {\n this._notifyEventSubscribers(\"attachmentAdd\", {\n ...(lastAttachment?.contentType\n ? { contentType: lastAttachment.contentType }\n : fileOrAttachment.type\n ? { contentType: fileOrAttachment.type }\n : undefined),\n });\n }\n }\n\n private _safeEmitAttachmentAddError(\n reason: AttachmentAddErrorReason,\n message: string,\n attachmentId?: string,\n error?: Error,\n contentType?: string,\n ) {\n try {\n this._notifyEventSubscribers(\"attachmentAddError\", {\n reason,\n message,\n ...(attachmentId !== undefined && { attachmentId }),\n ...(error !== undefined && { error }),\n ...(contentType ? { contentType } : undefined),\n });\n } catch (subscriberError) {\n console.error(\n \"[assistant-ui] attachmentAddError subscriber threw:\",\n subscriberError,\n );\n }\n }\n\n async removeAttachment(attachmentId: string) {\n const index = this._attachments.findIndex((a) => a.id === attachmentId);\n if (index === -1) throw new Error(\"Attachment not found\");\n const attachment = this._attachments[index]!;\n\n this._cancelAttachmentAdd(attachmentId);\n\n // A send in flight may already be uploading this attachment; the upload\n // can't be cancelled, so mark it to be dropped from the outgoing message\n // before any await gives the upload a chance to settle first.\n if (this._isSending) this._removedDuringSend.add(attachmentId);\n\n if (!isAttachmentComplete(attachment)) {\n const adapter = this.getAttachmentAdapter();\n if (!adapter) throw new Error(\"Attachments are not supported\");\n try {\n await adapter.remove(attachment);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this._attachments = this._attachments.map((candidate) =>\n candidate.id === attachmentId && !isAttachmentComplete(candidate)\n ? {\n ...candidate,\n status: { type: \"incomplete\", reason: \"error\", message },\n }\n : candidate,\n );\n this._notifySubscribers();\n throw error;\n }\n }\n this._attachments = this._attachments.filter((a) => a.id !== attachmentId);\n this._notifySubscribers();\n }\n\n private _dictation: DictationState | undefined;\n private _dictationSession: DictationAdapter.Session | undefined;\n private _dictationUnsubscribes: Unsubscribe[] = [];\n private _dictationBaseText = \"\";\n private _currentInterimText = \"\";\n private _dictationSessionIdCounter = 0;\n private _activeDictationSessionId: number | undefined;\n private _isCleaningDictation = false;\n\n public get dictation(): DictationState | undefined {\n return this._dictation;\n }\n\n private _isActiveSession(\n sessionId: number,\n session: DictationAdapter.Session,\n ): boolean {\n return (\n this._activeDictationSessionId === sessionId &&\n this._dictationSession === session\n );\n }\n\n public startDictation(): void {\n const adapter = this.getDictationAdapter();\n if (!adapter) {\n throw new Error(\"Dictation adapter not configured\");\n }\n\n if (this._dictationSession) {\n for (const unsub of this._dictationUnsubscribes) {\n unsub();\n }\n this._dictationUnsubscribes = [];\n const oldSession = this._dictationSession;\n oldSession.stop().catch(() => {});\n this._dictationSession = undefined;\n }\n\n const inputDisabled = adapter.disableInputDuringDictation ?? false;\n\n this._dictationBaseText = this._text;\n this._currentInterimText = \"\";\n\n const session = adapter.listen();\n this._dictationSession = session;\n const sessionId = ++this._dictationSessionIdCounter;\n this._activeDictationSessionId = sessionId;\n this._dictation = { status: session.status, inputDisabled };\n this._notifySubscribers();\n\n const unsubSpeech = session.onSpeech((result) => {\n if (!this._isActiveSession(sessionId, session)) return;\n const isFinal = result.isFinal !== false;\n\n const needsSeparator =\n this._dictationBaseText &&\n !this._dictationBaseText.endsWith(\" \") &&\n result.transcript;\n const separator = needsSeparator ? \" \" : \"\";\n\n if (isFinal) {\n this._dictationBaseText =\n this._dictationBaseText + separator + result.transcript;\n this._currentInterimText = \"\";\n this._text = this._dictationBaseText;\n\n if (this._dictation) {\n const { transcript: _, ...rest } = this._dictation;\n this._dictation = rest;\n }\n this._notifySubscribers();\n } else {\n this._currentInterimText = separator + result.transcript;\n this._text = this._dictationBaseText + this._currentInterimText;\n\n if (this._dictation) {\n this._dictation = {\n ...this._dictation,\n transcript: result.transcript,\n };\n }\n this._notifySubscribers();\n }\n });\n this._dictationUnsubscribes.push(unsubSpeech);\n\n const unsubStart = session.onSpeechStart(() => {\n if (!this._isActiveSession(sessionId, session)) return;\n\n this._dictation = {\n status: { type: \"running\" },\n inputDisabled,\n ...(this._dictation?.transcript && {\n transcript: this._dictation.transcript,\n }),\n };\n this._notifySubscribers();\n });\n this._dictationUnsubscribes.push(unsubStart);\n\n const unsubEnd = session.onSpeechEnd(() => {\n this._cleanupDictation({ sessionId });\n });\n this._dictationUnsubscribes.push(unsubEnd);\n\n const statusInterval = setInterval(() => {\n if (!this._isActiveSession(sessionId, session)) return;\n\n if (session.status.type === \"ended\") {\n this._cleanupDictation({ sessionId });\n }\n }, 100);\n this._dictationUnsubscribes.push(() => clearInterval(statusInterval));\n }\n\n public stopDictation(): void {\n if (!this._dictationSession) return;\n\n const session = this._dictationSession;\n const sessionId = this._activeDictationSessionId;\n const cleanup = () => this._cleanupDictation({ sessionId });\n void session.stop().then(cleanup, cleanup);\n }\n\n private _cleanupDictation(options?: { sessionId: number | undefined }): void {\n const isStaleSession =\n options?.sessionId !== undefined &&\n options.sessionId !== this._activeDictationSessionId;\n if (isStaleSession || this._isCleaningDictation) return;\n\n this._isCleaningDictation = true;\n try {\n for (const unsub of this._dictationUnsubscribes) {\n unsub();\n }\n this._dictationUnsubscribes = [];\n this._dictationSession = undefined;\n this._activeDictationSessionId = undefined;\n this._dictation = undefined;\n this._dictationBaseText = \"\";\n this._currentInterimText = \"\";\n this._notifySubscribers();\n } finally {\n this._isCleaningDictation = false;\n }\n }\n\n private _eventSubscribers = new Map<\n ComposerRuntimeEventType,\n Set<(payload?: unknown) => void>\n >();\n\n protected _notifyEventSubscribers<E extends ComposerRuntimeEventType>(\n event: E,\n payload: ComposerRuntimeEventPayload[E],\n ) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n\n notifyEventListeners(subscribers, payload, `Composer runtime \"${event}\"`);\n }\n\n public unstable_on<E extends ComposerRuntimeEventType>(\n event: E,\n callback: ComposerRuntimeEventCallback<E>,\n ) {\n const wrapped = callback as (payload?: unknown) => void;\n let subscribers = this._eventSubscribers.get(event);\n if (!subscribers) {\n subscribers = new Set();\n this._eventSubscribers.set(event, subscribers);\n }\n subscribers.add(wrapped);\n\n return () => {\n this._eventSubscribers.get(event)?.delete(wrapped);\n };\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"base-composer-runtime-core.js","names":["isAttachmentComplete","isCreateAttachment","Attachment","CompleteAttachment","CreateAttachment","PendingAttachment","MessageRole","AppendMessage","isMessageNotSentError","QuoteInfo","Unsubscribe","RunConfig","BaseSubscribable","AttachmentAdapter","fileMatchesAccept","AttachmentAddErrorReason","ComposerRuntimeCore","ComposerRuntimeEventCallback","ComposerRuntimeEventPayload","ComposerRuntimeEventType","DictationState","SendOptions","DictationAdapter","QueuePlacement","EMPTY_QUEUE_ITEMS","QueueItemState","generateId","notifyEventListeners","AttachmentAddOperations","drainAttachmentAdd","BaseComposerRuntimeCore","isEditing","getAttachmentAdapter","getDictationAdapter","enrichWithComposerMetadata","metadata","custom","Record","message","T","composerMetadata","attachmentAccept","accept","_attachments","attachments","setAttachments","value","_notifySubscribers","canCancel","canSend","isEmpty","text","trim","length","_text","_role","role","_runConfig","runConfig","_quote","undefined","quote","setQuote","setText","_rebaseDictation","_dictation","_dictationBaseText","_currentInterimText","status","inputDisabled","setRole","setRunConfig","_isSending","_removedDuringSend","Set","_sendGeneration","_attachmentAddOperations","_cancelAttachmentAdd","attachmentId","cancel","_cancelAllAttachmentAdds","cancelAll","_emptyTextAndAttachments","_onClearAttachments","adapter","pending","filter","a","Promise","all","map","remove","reset","clear","Object","keys","task","clearAttachments","attachment","add","id","send","options","_dictationSession","error","console","_cleanupDictation","attachmentTasks","Error","result","originalAttachments","generation","resolvedAttachments","e","allSettled","then","sentIds","has","finalAttachments","Omit","createdAt","Date","content","type","draft","sendTask","handleSend","_restoreUnsentDraft","catch","_notifyEventSubscribers","chars","restoreDraft","retractDraft","attachmentsUntouched","handleCancel","queue","moveQueueItem","_queueItemId","_placement","removeQueueItem","addAttachment","fileOrAttachment","File","name","contentType","err","_safeEmitAttachmentAddError","operation","start","upsertAttachment","idx","findIndex","slice","lastAttachment","file","isCancelled","reason","String","finish","subscriberError","removeAttachment","index","candidate","Session","_dictationUnsubscribes","_dictationSessionIdCounter","_activeDictationSessionId","_isCleaningDictation","dictation","_isActiveSession","sessionId","session","startDictation","isReplacing","oldSession","notify","_stopDictationSession","disableInputDuringDictation","listen","notifyError","unsubSpeech","onSpeech","isFinal","needsSeparator","endsWith","transcript","separator","_","rest","push","unsubStart","onSpeechStart","unsubEnd","onSpeechEnd","statusInterval","setInterval","clearInterval","stopDictation","cleanup","onSettled","stop","isStaleSession","runCleanup","unsubscribes","unsubscribe","_eventSubscribers","Map","payload","event","E","subscribers","get","unstable_on","callback","wrapped","set","delete"],"sources":["../../../src/runtime/base/base-composer-runtime-core.ts"],"sourcesContent":["import {\n isAttachmentComplete,\n isCreateAttachment,\n type Attachment,\n type CompleteAttachment,\n type CreateAttachment,\n type PendingAttachment,\n} from \"../../types/attachment\";\nimport type { MessageRole, AppendMessage } from \"../../types/message\";\nimport { isMessageNotSentError } from \"../../types/error\";\nimport type { QuoteInfo } from \"../../types/quote\";\nimport type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { RunConfig } from \"../../types/message\";\nimport { BaseSubscribable } from \"../../subscribable/subscribable\";\nimport {\n type AttachmentAdapter,\n fileMatchesAccept,\n} from \"../../adapters/attachment\";\nimport type {\n AttachmentAddErrorReason,\n ComposerRuntimeCore,\n ComposerRuntimeEventCallback,\n ComposerRuntimeEventPayload,\n ComposerRuntimeEventType,\n DictationState,\n SendOptions,\n} from \"../interfaces/composer-runtime-core\";\nimport type { DictationAdapter } from \"../../adapters/speech\";\nimport type { QueuePlacement } from \"../queue/external-thread-queue-adapter\";\nimport { EMPTY_QUEUE_ITEMS, type QueueItemState } from \"../queue/queue-item\";\nimport { generateId } from \"../../utils/id\";\nimport { notifyEventListeners } from \"../../utils/notify-event-listeners\";\nimport {\n AttachmentAddOperations,\n drainAttachmentAdd,\n} from \"../utils/attachment-add-operations\";\n\nexport abstract class BaseComposerRuntimeCore\n extends BaseSubscribable\n implements ComposerRuntimeCore\n{\n public readonly isEditing = true;\n\n protected abstract getAttachmentAdapter(): AttachmentAdapter | undefined;\n protected abstract getDictationAdapter(): DictationAdapter | undefined;\n\n protected enrichWithComposerMetadata<\n T extends { metadata?: { custom?: Record<string, unknown> } },\n >(message: T, composerMetadata: Record<string, unknown> | undefined): T {\n if (!composerMetadata) return message;\n return {\n ...message,\n metadata: {\n ...message.metadata,\n custom: { ...message.metadata?.custom, ...composerMetadata },\n },\n } as T;\n }\n\n public get attachmentAccept(): string {\n return this.getAttachmentAdapter()?.accept ?? \"*\";\n }\n\n private _attachments: readonly Attachment[] = [];\n public get attachments() {\n return this._attachments;\n }\n\n protected setAttachments(value: readonly Attachment[]) {\n this._attachments = value;\n this._notifySubscribers();\n }\n\n public abstract get canCancel(): boolean;\n public abstract get canSend(): boolean;\n\n public get isEmpty() {\n return !this.text.trim() && !this.attachments.length;\n }\n\n private _text = \"\";\n\n get text() {\n return this._text;\n }\n\n private _role: MessageRole = \"user\";\n\n get role() {\n return this._role;\n }\n\n private _runConfig: RunConfig = {};\n\n get runConfig() {\n return this._runConfig;\n }\n\n private _quote: QuoteInfo | undefined = undefined;\n\n get quote() {\n return this._quote;\n }\n\n public setQuote(quote: QuoteInfo | undefined) {\n if (this._quote === quote) return;\n\n this._quote = quote;\n this._notifySubscribers();\n }\n\n public setText(value: string) {\n if (this._text === value) return;\n\n this._text = value;\n this._rebaseDictation(value);\n this._notifySubscribers();\n }\n\n // A live dictation session appends to the text it last saw, so any write\n // that bypasses `setText` has to move that baseline or the next transcript\n // overwrites what was just written.\n private _rebaseDictation(value: string) {\n if (!this._dictation) return;\n\n this._dictationBaseText = value;\n this._currentInterimText = \"\";\n const { status, inputDisabled } = this._dictation;\n this._dictation = inputDisabled ? { status, inputDisabled } : { status };\n }\n\n public setRole(role: MessageRole) {\n if (this._role === role) return;\n\n this._role = role;\n this._notifySubscribers();\n }\n\n public setRunConfig(runConfig: RunConfig) {\n if (this._runConfig === runConfig) return;\n\n this._runConfig = runConfig;\n this._notifySubscribers();\n }\n\n protected _isSending = false;\n private _removedDuringSend = new Set<string>();\n private _sendGeneration = 0;\n private _attachmentAddOperations = new AttachmentAddOperations();\n\n private _cancelAttachmentAdd(attachmentId: string) {\n this._attachmentAddOperations.cancel(attachmentId);\n }\n\n private _cancelAllAttachmentAdds() {\n this._attachmentAddOperations.cancelAll();\n }\n\n private _emptyTextAndAttachments() {\n this._attachments = [];\n this._text = \"\";\n this._rebaseDictation(\"\");\n this._notifySubscribers();\n }\n\n private async _onClearAttachments() {\n const adapter = this.getAttachmentAdapter();\n if (adapter) {\n const pending = this._attachments.filter((a) => !isAttachmentComplete(a));\n await Promise.all(pending.map(async (a) => adapter.remove(a)));\n }\n }\n\n public async reset() {\n this._cancelAllAttachmentAdds();\n\n // A send whose adapter never settles must not brick the composer; reset is\n // the escape hatch that releases the in-flight lock. Bumping the generation\n // invalidates that send entirely so a late-settling upload can neither\n // append the discarded draft nor touch a newer send's lock.\n this._sendGeneration++;\n this._isSending = false;\n this._removedDuringSend.clear();\n\n if (\n this._attachments.length === 0 &&\n this._text === \"\" &&\n this._role === \"user\" &&\n Object.keys(this._runConfig).length === 0 &&\n this._quote === undefined\n ) {\n return;\n }\n\n this._role = \"user\";\n this._runConfig = {};\n this._quote = undefined;\n\n const task = this._onClearAttachments();\n this._emptyTextAndAttachments();\n await task;\n }\n\n public async clearAttachments() {\n this._cancelAllAttachmentAdds();\n if (this._isSending) {\n for (const attachment of this._attachments)\n this._removedDuringSend.add(attachment.id);\n }\n const task = this._onClearAttachments();\n this.setAttachments([]);\n\n await task;\n }\n\n public async send(options?: SendOptions) {\n if (!this.canSend || this._isSending) return;\n\n if (this._dictationSession) {\n try {\n this._dictationSession.cancel();\n } catch (error) {\n console.error(\"[assistant-ui] Dictation session cancel threw\", error);\n } finally {\n this._cleanupDictation();\n }\n }\n\n const adapter = this.getAttachmentAdapter();\n const attachmentTasks = this.attachments.map(async (a) => {\n if (isAttachmentComplete(a)) return a;\n if (!adapter) throw new Error(\"Attachments are not supported\");\n const result = await adapter.send(a);\n return result as CompleteAttachment;\n });\n\n const originalAttachments = this.attachments;\n const text = this.text;\n const quote = this._quote;\n const role = this.role;\n const runConfig = this.runConfig;\n this._quote = undefined;\n this._text = \"\";\n this._isSending = true;\n const generation = ++this._sendGeneration;\n this._notifySubscribers();\n\n let resolvedAttachments: CompleteAttachment[];\n try {\n resolvedAttachments = await Promise.all(attachmentTasks);\n } catch (e) {\n if (generation === this._sendGeneration) {\n if (!this.text.trim() && this._quote === undefined) {\n this._text = text;\n this._rebaseDictation(text);\n this._quote = quote;\n this._notifySubscribers();\n }\n // Promise.all rejects on the first failure, but sibling uploads from\n // this batch keep running; the send rejects immediately while the\n // retry lock is held until they settle, or a retry could re-send\n // attachments that are still in flight.\n void Promise.allSettled(attachmentTasks).then(() => {\n if (generation !== this._sendGeneration) return;\n this._removedDuringSend.clear();\n this._isSending = false;\n this._notifySubscribers();\n });\n }\n throw e;\n }\n\n // A reset during the upload discarded this send's draft; the settled\n // uploads must not append it or touch the lock a newer send may own.\n if (generation !== this._sendGeneration) return;\n\n // Drop by id, not wholesale: the user may have added or removed chips while\n // the upload was in flight.\n const sentIds = new Set(originalAttachments.map((a) => a.id));\n this._attachments = this._attachments.filter((a) => !sentIds.has(a.id));\n this._isSending = false;\n this._notifySubscribers();\n\n // An attachment removed mid-upload can't be cancelled, but it can still be\n // dropped from the outgoing message instead of silently being sent anyway.\n const finalAttachments = resolvedAttachments.filter(\n (a) => !this._removedDuringSend.has(a.id),\n );\n this._removedDuringSend.clear();\n\n const message: Omit<AppendMessage, \"parentId\" | \"sourceId\"> = {\n createdAt: new Date(),\n role,\n content: text ? [{ type: \"text\", text }] : [],\n attachments: finalAttachments,\n runConfig,\n metadata: { custom: { ...(quote ? { quote } : {}) } },\n };\n\n const draft = { text, quote, attachments: finalAttachments };\n let sendTask: void | Promise<void>;\n try {\n sendTask = this.handleSend(message, options);\n } catch (error) {\n this._restoreUnsentDraft(error, generation, draft);\n throw error;\n }\n if (sendTask)\n void sendTask.catch((error) => {\n this._restoreUnsentDraft(error, generation, draft);\n });\n this._notifyEventSubscribers(\"send\", {\n chars: text.length,\n attachments: finalAttachments.length,\n });\n }\n\n /**\n * Take a message back into the composer when it has nowhere else to live:\n * a send the runtime never dispatched, or a message a cancelled run is\n * removing from the thread. Reports whether the composer accepted it, so a\n * caller that is also removing the message can keep it instead of dropping\n * it. Refused, and left untouched, while the composer holds anything of its\n * own.\n */\n public restoreDraft(draft: {\n text: string;\n quote?: QuoteInfo | undefined;\n attachments?: readonly Attachment[] | undefined;\n }): boolean {\n if (\n this._text.trim() ||\n this._quote !== undefined ||\n this._attachments.length > 0\n )\n return false;\n\n this._text = draft.text;\n this._rebaseDictation(draft.text);\n this._quote = draft.quote;\n this._attachments = draft.attachments ?? [];\n this._notifySubscribers();\n return true;\n }\n\n /**\n * Inverse of `restoreDraft`: clears the composer while it still holds\n * exactly the given draft. A draft the user has edited since is left\n * untouched.\n */\n public retractDraft(draft: {\n text: string;\n quote?: QuoteInfo | undefined;\n attachments?: readonly Attachment[] | undefined;\n }): void {\n const attachmentsUntouched =\n draft.attachments !== undefined\n ? this._attachments === draft.attachments\n : this._attachments.length === 0;\n if (\n this._text !== draft.text ||\n this._quote !== draft.quote ||\n !attachmentsUntouched\n )\n return;\n\n this._text = \"\";\n this._rebaseDictation(\"\");\n this._quote = undefined;\n this._attachments = [];\n this._notifySubscribers();\n }\n\n // The generation check is what a reset and a later send use to invalidate a\n // draft, so of several queued drafts only the most recent one is still\n // restorable.\n private _restoreUnsentDraft(\n error: unknown,\n generation: number,\n draft: {\n text: string;\n quote: QuoteInfo | undefined;\n attachments: readonly CompleteAttachment[];\n },\n ) {\n if (!isMessageNotSentError(error)) return;\n if (generation !== this._sendGeneration) return;\n this.restoreDraft(draft);\n }\n\n public cancel() {\n this.handleCancel();\n }\n\n public get queue(): readonly QueueItemState[] {\n return EMPTY_QUEUE_ITEMS;\n }\n\n public moveQueueItem(\n _queueItemId: string,\n _placement: QueuePlacement,\n ): void {}\n public removeQueueItem(_queueItemId: string): void {}\n\n protected abstract handleSend(\n message: Omit<AppendMessage, \"parentId\" | \"sourceId\">,\n options?: SendOptions,\n ): void | Promise<void>;\n protected abstract handleCancel(): void;\n\n async addAttachment(fileOrAttachment: File | CreateAttachment) {\n if (isCreateAttachment(fileOrAttachment)) {\n const adapter = this.getAttachmentAdapter();\n if (\n adapter &&\n !fileMatchesAccept(\n {\n name: fileOrAttachment.name,\n type: fileOrAttachment.contentType ?? \"\",\n },\n adapter.accept,\n )\n ) {\n const message = `File type ${fileOrAttachment.contentType || \"unknown\"} is not accepted. Accepted types: ${adapter.accept}`;\n const err = new Error(message);\n this._safeEmitAttachmentAddError(\n \"not-accepted\",\n message,\n undefined,\n err,\n fileOrAttachment.contentType,\n );\n throw err;\n }\n\n const a: CompleteAttachment = {\n id: fileOrAttachment.id ?? generateId(),\n type: fileOrAttachment.type ?? \"document\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.contentType,\n content: fileOrAttachment.content,\n status: { type: \"complete\" },\n };\n this._attachments = [...this._attachments, a];\n this._notifySubscribers();\n this._notifyEventSubscribers(\"attachmentAdd\", {\n ...(a.contentType ? { contentType: a.contentType } : undefined),\n });\n return;\n }\n\n const adapter = this.getAttachmentAdapter();\n if (!adapter) {\n const message = \"Attachments are not supported\";\n const err = new Error(message);\n this._safeEmitAttachmentAddError(\n \"no-adapter\",\n message,\n undefined,\n err,\n fileOrAttachment.type,\n );\n throw err;\n }\n\n if (\n !fileMatchesAccept(\n { name: fileOrAttachment.name, type: fileOrAttachment.type },\n adapter.accept,\n )\n ) {\n const message = `File type ${fileOrAttachment.type || \"unknown\"} is not accepted. Accepted types: ${adapter.accept}`;\n const err = new Error(message);\n this._safeEmitAttachmentAddError(\n \"not-accepted\",\n message,\n undefined,\n err,\n fileOrAttachment.type,\n );\n throw err;\n }\n\n const operation = this._attachmentAddOperations.start();\n const upsertAttachment = (a: PendingAttachment) => {\n if (!this._attachmentAddOperations.accept(operation, a.id)) return false;\n\n const idx = this._attachments.findIndex(\n (attachment) => attachment.id === a.id,\n );\n if (idx !== -1)\n this._attachments = [\n ...this._attachments.slice(0, idx),\n a,\n ...this._attachments.slice(idx + 1),\n ];\n else {\n this._attachments = [...this._attachments, a];\n }\n\n this._notifySubscribers();\n return true;\n };\n let lastAttachment: PendingAttachment | undefined;\n try {\n await drainAttachmentAdd(\n adapter.add({ file: fileOrAttachment }),\n (attachment) => {\n lastAttachment = attachment;\n return upsertAttachment(attachment);\n },\n );\n } catch (e) {\n if (this._attachmentAddOperations.isCancelled(operation)) return;\n if (lastAttachment) {\n upsertAttachment({\n ...lastAttachment,\n status: {\n type: \"incomplete\",\n reason: \"error\",\n message: e instanceof Error ? e.message : String(e),\n },\n });\n }\n this._safeEmitAttachmentAddError(\n \"adapter-error\",\n e instanceof Error ? e.message : String(e),\n lastAttachment?.id,\n e instanceof Error ? e : undefined,\n lastAttachment?.contentType || fileOrAttachment.type,\n );\n throw e;\n } finally {\n this._attachmentAddOperations.finish(operation);\n }\n\n if (this._attachmentAddOperations.isCancelled(operation)) return;\n if (\n lastAttachment?.status.type === \"incomplete\" &&\n lastAttachment.status.reason === \"error\"\n ) {\n this._safeEmitAttachmentAddError(\n \"adapter-error\",\n lastAttachment.status.message ??\n \"Attachment upload did not complete successfully.\",\n lastAttachment.id,\n undefined,\n lastAttachment.contentType || fileOrAttachment.type,\n );\n } else {\n this._notifyEventSubscribers(\"attachmentAdd\", {\n ...(lastAttachment?.contentType\n ? { contentType: lastAttachment.contentType }\n : fileOrAttachment.type\n ? { contentType: fileOrAttachment.type }\n : undefined),\n });\n }\n }\n\n private _safeEmitAttachmentAddError(\n reason: AttachmentAddErrorReason,\n message: string,\n attachmentId?: string,\n error?: Error,\n contentType?: string,\n ) {\n try {\n this._notifyEventSubscribers(\"attachmentAddError\", {\n reason,\n message,\n ...(attachmentId !== undefined && { attachmentId }),\n ...(error !== undefined && { error }),\n ...(contentType ? { contentType } : undefined),\n });\n } catch (subscriberError) {\n console.error(\n \"[assistant-ui] attachmentAddError subscriber threw:\",\n subscriberError,\n );\n }\n }\n\n async removeAttachment(attachmentId: string) {\n const index = this._attachments.findIndex((a) => a.id === attachmentId);\n if (index === -1) throw new Error(\"Attachment not found\");\n const attachment = this._attachments[index]!;\n\n this._cancelAttachmentAdd(attachmentId);\n\n // A send in flight may already be uploading this attachment; the upload\n // can't be cancelled, so mark it to be dropped from the outgoing message\n // before any await gives the upload a chance to settle first.\n if (this._isSending) this._removedDuringSend.add(attachmentId);\n\n if (!isAttachmentComplete(attachment)) {\n const adapter = this.getAttachmentAdapter();\n if (!adapter) throw new Error(\"Attachments are not supported\");\n try {\n await adapter.remove(attachment);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this._attachments = this._attachments.map((candidate) =>\n candidate.id === attachmentId && !isAttachmentComplete(candidate)\n ? {\n ...candidate,\n status: { type: \"incomplete\", reason: \"error\", message },\n }\n : candidate,\n );\n this._notifySubscribers();\n throw error;\n }\n }\n this._attachments = this._attachments.filter((a) => a.id !== attachmentId);\n this._notifySubscribers();\n }\n\n private _dictation: DictationState | undefined;\n private _dictationSession: DictationAdapter.Session | undefined;\n private _dictationUnsubscribes: Unsubscribe[] = [];\n private _dictationBaseText = \"\";\n private _currentInterimText = \"\";\n private _dictationSessionIdCounter = 0;\n private _activeDictationSessionId: number | undefined;\n private _isCleaningDictation = false;\n\n public get dictation(): DictationState | undefined {\n return this._dictation;\n }\n\n private _isActiveSession(\n sessionId: number,\n session: DictationAdapter.Session,\n ): boolean {\n return (\n this._activeDictationSessionId === sessionId &&\n this._dictationSession === session\n );\n }\n\n public startDictation(): void {\n const adapter = this.getDictationAdapter();\n if (!adapter) {\n throw new Error(\"Dictation adapter not configured\");\n }\n\n const isReplacing = this._dictationSession !== undefined;\n if (this._dictationSession) {\n const oldSession = this._dictationSession;\n this._cleanupDictation({ notify: false });\n this._stopDictationSession(oldSession);\n }\n\n const inputDisabled = adapter.disableInputDuringDictation ?? false;\n\n this._dictationBaseText = this._text;\n this._currentInterimText = \"\";\n\n let session: DictationAdapter.Session;\n try {\n session = adapter.listen();\n } catch (error) {\n if (isReplacing) {\n try {\n this._notifySubscribers();\n } catch (notifyError) {\n console.error(\n \"[assistant-ui] Dictation replacement rollback notification threw\",\n notifyError,\n );\n }\n }\n throw error;\n }\n this._dictationSession = session;\n const sessionId = ++this._dictationSessionIdCounter;\n this._activeDictationSessionId = sessionId;\n this._dictation = { status: session.status, inputDisabled };\n this._notifySubscribers();\n\n const unsubSpeech = session.onSpeech((result) => {\n if (!this._isActiveSession(sessionId, session)) return;\n const isFinal = result.isFinal !== false;\n\n const needsSeparator =\n this._dictationBaseText &&\n !this._dictationBaseText.endsWith(\" \") &&\n result.transcript;\n const separator = needsSeparator ? \" \" : \"\";\n\n if (isFinal) {\n this._dictationBaseText =\n this._dictationBaseText + separator + result.transcript;\n this._currentInterimText = \"\";\n this._text = this._dictationBaseText;\n\n if (this._dictation) {\n const { transcript: _, ...rest } = this._dictation;\n this._dictation = rest;\n }\n this._notifySubscribers();\n } else {\n this._currentInterimText = separator + result.transcript;\n this._text = this._dictationBaseText + this._currentInterimText;\n\n if (this._dictation) {\n this._dictation = {\n ...this._dictation,\n transcript: result.transcript,\n };\n }\n this._notifySubscribers();\n }\n });\n this._dictationUnsubscribes.push(unsubSpeech);\n\n const unsubStart = session.onSpeechStart(() => {\n if (!this._isActiveSession(sessionId, session)) return;\n\n this._dictation = {\n status: { type: \"running\" },\n inputDisabled,\n ...(this._dictation?.transcript && {\n transcript: this._dictation.transcript,\n }),\n };\n this._notifySubscribers();\n });\n this._dictationUnsubscribes.push(unsubStart);\n\n const unsubEnd = session.onSpeechEnd(() => {\n this._cleanupDictation({ sessionId });\n });\n this._dictationUnsubscribes.push(unsubEnd);\n\n const statusInterval = setInterval(() => {\n if (!this._isActiveSession(sessionId, session)) return;\n\n if (session.status.type === \"ended\") {\n this._cleanupDictation({ sessionId });\n }\n }, 100);\n this._dictationUnsubscribes.push(() => clearInterval(statusInterval));\n }\n\n public stopDictation(): void {\n if (!this._dictationSession) return;\n\n const session = this._dictationSession;\n const sessionId = this._activeDictationSessionId;\n const cleanup = () => this._cleanupDictation({ sessionId });\n this._stopDictationSession(session, cleanup);\n }\n\n private _stopDictationSession(\n session: DictationAdapter.Session,\n onSettled: () => void = () => {},\n ): void {\n let task: Promise<void>;\n try {\n task = session.stop();\n } catch (error) {\n console.error(\"[assistant-ui] Dictation session stop threw\", error);\n onSettled();\n return;\n }\n\n void task.then(onSettled, (error) => {\n console.error(\"[assistant-ui] Dictation session stop rejected\", error);\n onSettled();\n });\n }\n\n private _cleanupDictation(options?: {\n sessionId?: number | undefined;\n notify?: boolean | undefined;\n }): void {\n const isStaleSession =\n options?.sessionId !== undefined &&\n options.sessionId !== this._activeDictationSessionId;\n if (isStaleSession || this._isCleaningDictation) return;\n\n this._isCleaningDictation = true;\n const runCleanup = (cleanup: () => void) => {\n try {\n cleanup();\n } catch (error) {\n console.error(\"[assistant-ui] Dictation cleanup threw\", error);\n }\n };\n\n try {\n const unsubscribes = this._dictationUnsubscribes;\n this._dictationUnsubscribes = [];\n this._dictationSession = undefined;\n this._activeDictationSessionId = undefined;\n this._dictation = undefined;\n this._dictationBaseText = \"\";\n this._currentInterimText = \"\";\n\n for (const unsubscribe of unsubscribes) runCleanup(unsubscribe);\n if (options?.notify !== false) {\n runCleanup(() => this._notifySubscribers());\n }\n } finally {\n this._isCleaningDictation = false;\n }\n }\n\n private _eventSubscribers = new Map<\n ComposerRuntimeEventType,\n Set<(payload?: unknown) => void>\n >();\n\n protected _notifyEventSubscribers<E extends ComposerRuntimeEventType>(\n event: E,\n payload: ComposerRuntimeEventPayload[E],\n ) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n\n notifyEventListeners(subscribers, payload, `Composer runtime \"${event}\"`);\n }\n\n public unstable_on<E extends ComposerRuntimeEventType>(\n event: E,\n callback: ComposerRuntimeEventCallback<E>,\n ) {\n const wrapped = callback as (payload?: unknown) => void;\n let subscribers = this._eventSubscribers.get(event);\n if (!subscribers) {\n subscribers = new Set();\n this._eventSubscribers.set(event, subscribers);\n }\n subscribers.add(wrapped);\n\n return () => {\n this._eventSubscribers.get(event)?.delete(wrapped);\n };\n }\n}\n"],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ type BaseThreadAdapters = {
|
|
|
19
19
|
attachments?: AttachmentAdapter | undefined;
|
|
20
20
|
voice?: RealtimeVoiceAdapter | undefined;
|
|
21
21
|
};
|
|
22
|
-
declare abstract class BaseThreadRuntimeCore extends BaseSubscribable implements ThreadRuntimeCore {
|
|
22
|
+
export declare abstract class BaseThreadRuntimeCore extends BaseSubscribable implements ThreadRuntimeCore {
|
|
23
23
|
private _isInitialized;
|
|
24
24
|
protected repository: MessageRepository;
|
|
25
25
|
abstract get adapters(): BaseThreadAdapters | undefined;
|
|
@@ -47,6 +47,7 @@ declare abstract class BaseThreadRuntimeCore extends BaseSubscribable implements
|
|
|
47
47
|
private _cachedMergedBase;
|
|
48
48
|
protected _markVoiceMessagesDirty(): void;
|
|
49
49
|
protected _getBaseMessages(): readonly ThreadMessage[];
|
|
50
|
+
protected _commitVoiceMessage(_message: ThreadMessage): void;
|
|
50
51
|
get messages(): readonly ThreadMessage[];
|
|
51
52
|
get state(): string | number | boolean | import("assistant-stream/utils").ReadonlyJSONObject | import("assistant-stream/utils").ReadonlyJSONArray | null;
|
|
52
53
|
readonly composer: DefaultThreadComposerRuntimeCore;
|
|
@@ -69,6 +70,8 @@ declare abstract class BaseThreadRuntimeCore extends BaseSubscribable implements
|
|
|
69
70
|
protected enrichAppendMetadata(message: AppendMessage, anchorId?: string | null): AppendMessage;
|
|
70
71
|
private _editComposers;
|
|
71
72
|
getEditComposer(messageId: string): DefaultEditComposerRuntimeCore | undefined;
|
|
73
|
+
protected _isVoiceMessage(messageId: string | null): boolean;
|
|
74
|
+
protected _resolveAppendParent(parentId: string | null): string | null;
|
|
72
75
|
beginEdit(messageId: string): void;
|
|
73
76
|
getMessageById(messageId: string): {
|
|
74
77
|
parentId: string | null;
|
|
@@ -78,7 +81,8 @@ declare abstract class BaseThreadRuntimeCore extends BaseSubscribable implements
|
|
|
78
81
|
getBranches(messageId: string): string[];
|
|
79
82
|
switchToBranch(branchId: string): void;
|
|
80
83
|
_notifyEventSubscribers<E extends ThreadRuntimeEventType>(event: E, payload: ThreadRuntimeEventPayload[E]): void;
|
|
81
|
-
|
|
84
|
+
protected _notifyToolApprovalAnswered(messageId: string, toolCallId: string, toolName: string, approved: boolean): void;
|
|
85
|
+
submitFeedback({ messageId, type, comment }: SubmitFeedbackOptions): void;
|
|
82
86
|
private _stopSpeaking;
|
|
83
87
|
speech: SpeechState | undefined;
|
|
84
88
|
speak(messageId: string): void;
|
|
@@ -90,11 +94,15 @@ declare abstract class BaseThreadRuntimeCore extends BaseSubscribable implements
|
|
|
90
94
|
private _voiceVolumeSubscribers;
|
|
91
95
|
getVoiceVolume: () => number;
|
|
92
96
|
subscribeVoiceVolume: (callback: () => void) => Unsubscribe;
|
|
97
|
+
protected _onVoiceConnected(): void;
|
|
98
|
+
protected _onVoiceDisconnected(): void;
|
|
99
|
+
protected _isRunActive(): boolean;
|
|
93
100
|
connectVoice(): void;
|
|
94
101
|
private _currentAssistantMsg;
|
|
95
102
|
private _handleVoiceTranscript;
|
|
96
103
|
private _finishVoiceAssistantMessage;
|
|
97
104
|
disconnectVoice(): void;
|
|
105
|
+
private _disconnectVoice;
|
|
98
106
|
muteVoice(): void;
|
|
99
107
|
unmuteVoice(): void;
|
|
100
108
|
protected ensureInitialized(): void;
|
|
@@ -105,5 +113,4 @@ declare abstract class BaseThreadRuntimeCore extends BaseSubscribable implements
|
|
|
105
113
|
unstable_on<E extends ThreadRuntimeEventType>(event: E, callback: ThreadRuntimeEventCallback<E>): Unsubscribe;
|
|
106
114
|
}
|
|
107
115
|
//#endregion
|
|
108
|
-
export { BaseThreadRuntimeCore };
|
|
109
116
|
//# sourceMappingURL=base-thread-runtime-core.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-thread-runtime-core.d.ts","names":[],"sources":["../../../src/runtime/base/base-thread-runtime-core.ts"],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"base-thread-runtime-core.d.ts","names":[],"sources":["../../../src/runtime/base/base-thread-runtime-core.ts"],"mappings":";;;;;;;;;;;;;;;KA2CK;EACH,SAAS;EACT,WAAW;EACX,cAAc;EACd,QAAQ;;8BAGY,8BACZ,4BACG;UAEH;YAEE,YAAU;eACA,YAAY;eACZ;eACA;eACA;eACA,wBAAwB;eACxB;eAEA,gBAAgB;WACpB,OAAO,SAAS;WAChB,cAAc,2BAA2B;WACzC,SAAS,QAAQ;WACjB,UAAU,QAAQ;WAClB,cAAc,SAAS;WACvB,eAAe,SAAS;WACxB,sBACd,SAAS,+BACR;WACa;WACA;WACA,oBAAoB;WACpB;YAEN,gBAAgB;YAChB;UACF;UACA;UACA;YAEE;YAKA,6BAA6B;YAI7B,oBAAoB,UAAU;MAE7B,qBAAqB;MAsBrB,sEAAK,sDAAA;WAWA,UAAQ;mBAEP;EAEL,YAAA,kBAAkB;EAKvB,mBALuB;;;;;;;;;;;;;;YAsBpB,qBACR,SAAS,eACT,2BACC;UAmBK;EACD,gBAAgB,oBAAiB;YAG9B,gBAAgB;YAMhB,qBAAqB;EAMxB,UAAU;EAsBV,eAAe;;;;;EAsBf,YAAY;EAOZ,eAAe;EAKf,wBAAwB,UAAU,wBACvC,OAAO,GACP,SAAS,0BAA0B;YAQ3B,4BACR,mBACA,oBACA,kBACA;EAUK,iBAAiB,WAAW,MAAM,WAAW;UAkC5C;EACD,QAAQ;EAER,MAAM;EA2EN;UAKC;UACA;EACD,OAAO;UAEN;UACA;EAED;EAEA,uBAAwB,yBAAuB;YAK5C;YAEA;YAEA;EAUH;UA+HC;UAEA;UAoEA;EAeD;UAIC;EAoCD;EAUA;YAUG;EAOH,UAAM;EAIN,OAAO,MAAM;EAOb,MAAM,2BAA2B;UAIhC;EAKD,YAAY,UAAU,wBAC3B,OAAO,GACP,UAAU,2BAA2B,KAAE"}
|