@assistant-ui/core 0.3.19 → 0.3.21
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 +50 -43
- package/dist/adapters/attachment.d.ts.map +1 -1
- package/dist/adapters/attachment.js +52 -21
- package/dist/adapters/attachment.js.map +1 -1
- package/dist/adapters/directive-formatter.d.ts +2 -5
- package/dist/adapters/directive-formatter.d.ts.map +1 -1
- package/dist/adapters/feedback.d.ts +7 -8
- package/dist/adapters/feedback.d.ts.map +1 -1
- package/dist/adapters/index.d.ts +14 -9
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +1 -1
- package/dist/adapters/speech.d.ts +63 -65
- package/dist/adapters/speech.d.ts.map +1 -1
- package/dist/adapters/speech.js +16 -2
- package/dist/adapters/speech.js.map +1 -1
- package/dist/adapters/suggestion.d.ts +19 -22
- package/dist/adapters/suggestion.d.ts.map +1 -1
- package/dist/adapters/thread-history.d.ts +60 -58
- package/dist/adapters/thread-history.d.ts.map +1 -1
- package/dist/adapters/trigger.d.ts +8 -11
- package/dist/adapters/trigger.d.ts.map +1 -1
- package/dist/adapters/voice.d.ts +50 -45
- package/dist/adapters/voice.d.ts.map +1 -1
- package/dist/adapters/voice.js +17 -3
- package/dist/adapters/voice.js.map +1 -1
- package/dist/index.d.ts +70 -56
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/internal/duplicate-detection.d.ts +1 -4
- package/dist/internal/duplicate-detection.d.ts.map +1 -1
- package/dist/internal.d.ts +27 -58
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +8 -6
- package/dist/model-context/frame/host.d.ts +20 -23
- package/dist/model-context/frame/host.d.ts.map +1 -1
- package/dist/model-context/frame/host.js +3 -1
- package/dist/model-context/frame/host.js.map +1 -1
- package/dist/model-context/frame/provider.d.ts +28 -30
- package/dist/model-context/frame/provider.d.ts.map +1 -1
- package/dist/model-context/frame/provider.js +6 -0
- package/dist/model-context/frame/provider.js.map +1 -1
- package/dist/model-context/frame/types.d.ts +24 -27
- package/dist/model-context/frame/types.d.ts.map +1 -1
- package/dist/model-context/frame/validate.d.ts +3 -0
- package/dist/model-context/frame/validate.d.ts.map +1 -0
- package/dist/model-context/frame/validate.js +26 -0
- package/dist/model-context/frame/validate.js.map +1 -0
- package/dist/model-context/interactable-composer-metadata.d.ts +51 -39
- package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
- package/dist/model-context/interactable-composer-metadata.js +30 -6
- package/dist/model-context/interactable-composer-metadata.js.map +1 -1
- package/dist/model-context/registry-handles.d.ts +9 -12
- package/dist/model-context/registry-handles.d.ts.map +1 -1
- package/dist/model-context/registry.d.ts +15 -18
- package/dist/model-context/registry.d.ts.map +1 -1
- package/dist/model-context/tool-call-text.d.ts +15 -17
- package/dist/model-context/tool-call-text.d.ts.map +1 -1
- package/dist/model-context/tool.d.ts +12 -14
- package/dist/model-context/tool.d.ts.map +1 -1
- package/dist/model-context/types.d.ts +40 -43
- package/dist/model-context/types.d.ts.map +1 -1
- package/dist/react/AssistantProvider.d.ts +9 -12
- package/dist/react/AssistantProvider.d.ts.map +1 -1
- package/dist/react/AssistantRuntimeProvider.d.ts +23 -26
- package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
- package/dist/react/RuntimeAdapter.d.ts +4 -8
- package/dist/react/RuntimeAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts +28 -23
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js +77 -58
- package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
- package/dist/react/adapters/TitleGenerationAdapter.d.ts +4 -7
- package/dist/react/adapters/TitleGenerationAdapter.d.ts.map +1 -1
- package/dist/react/client/AdaptedRemoteThread.d.ts +6 -9
- package/dist/react/client/AdaptedRemoteThread.d.ts.map +1 -1
- package/dist/react/client/DataRenderers.d.ts +2 -5
- package/dist/react/client/DataRenderers.d.ts.map +1 -1
- package/dist/react/client/InMemoryThreadList.d.ts +9 -12
- package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
- package/dist/react/client/Interactables.d.ts +3 -6
- package/dist/react/client/Interactables.d.ts.map +1 -1
- package/dist/react/client/Interactables.js +306 -101
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/RemoteThreadList.d.ts +34 -37
- package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
- package/dist/react/client/RemoteThreadList.js +2 -1
- package/dist/react/client/RemoteThreadList.js.map +1 -1
- package/dist/react/client/Tools.d.ts +10 -12
- package/dist/react/client/Tools.d.ts.map +1 -1
- package/dist/react/client/Tools.js +4 -8
- package/dist/react/client/Tools.js.map +1 -1
- package/dist/react/client/interactable-model-context.d.ts +9 -11
- package/dist/react/client/interactable-model-context.d.ts.map +1 -1
- package/dist/react/client/interactable-model-context.js +32 -22
- package/dist/react/client/interactable-model-context.js.map +1 -1
- package/dist/react/index.d.ts +160 -122
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +5 -5
- package/dist/react/interactables-legacy/Interactables.d.ts +2 -5
- package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
- package/dist/react/interactables-legacy/Interactables.js +15 -8
- package/dist/react/interactables-legacy/Interactables.js.map +1 -1
- package/dist/react/interactables-legacy/interactable-model-context.d.ts +6 -9
- package/dist/react/interactables-legacy/interactable-model-context.d.ts.map +1 -1
- package/dist/react/interactables-legacy/interactable-model-context.js +13 -14
- package/dist/react/interactables-legacy/interactable-model-context.js.map +1 -1
- package/dist/react/interactables-legacy/scopes.d.ts +42 -46
- package/dist/react/interactables-legacy/scopes.d.ts.map +1 -1
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts +8 -11
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -1
- package/dist/react/interactables-legacy/useInteractableState.d.ts +7 -9
- package/dist/react/interactables-legacy/useInteractableState.d.ts.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts +23 -14
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.js +54 -25
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.js.map +1 -1
- package/dist/react/model-context/define-mcp-toolkit.d.ts +15 -18
- package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -1
- package/dist/react/model-context/define-toolkit.d.ts +13 -6
- package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
- package/dist/react/model-context/external-tool.d.ts +1 -4
- package/dist/react/model-context/external-tool.d.ts.map +1 -1
- package/dist/react/model-context/human-tool.d.ts +3 -6
- package/dist/react/model-context/human-tool.d.ts.map +1 -1
- package/dist/react/model-context/interactableTool.d.ts +26 -29
- package/dist/react/model-context/interactableTool.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantDataUI.d.ts +6 -9
- package/dist/react/model-context/makeAssistantDataUI.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantTool.d.ts +6 -9
- package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantToolUI.d.ts +6 -9
- package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
- package/dist/react/model-context/provider-tool.d.ts +5 -7
- package/dist/react/model-context/provider-tool.d.ts.map +1 -1
- package/dist/react/model-context/stub-tool.d.ts +1 -4
- package/dist/react/model-context/stub-tool.d.ts.map +1 -1
- package/dist/react/model-context/toolbox.d.ts +44 -32
- package/dist/react/model-context/toolbox.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantContext.d.ts +3 -6
- package/dist/react/model-context/useAssistantContext.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantDataUI.d.ts +7 -10
- package/dist/react/model-context/useAssistantDataUI.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantInstructions.d.ts +3 -6
- package/dist/react/model-context/useAssistantInstructions.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantTool.d.ts +9 -13
- package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantToolUI.d.ts +13 -16
- package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
- package/dist/react/model-context/useAuiToolOverrides.d.ts +3 -5
- package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -1
- package/dist/react/model-context/useInlineRender.d.ts +3 -6
- package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
- package/dist/react/model-context/useInteractable.d.ts +40 -40
- package/dist/react/model-context/useInteractable.d.ts.map +1 -1
- package/dist/react/model-context/useInteractableState.d.ts +10 -9
- package/dist/react/model-context/useInteractableState.d.ts.map +1 -1
- package/dist/react/model-context/useInteractableVersions.d.ts +4 -7
- package/dist/react/model-context/useInteractableVersions.d.ts.map +1 -1
- package/dist/react/model-context/useToolArgsStatus.d.ts +7 -9
- package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts +7 -10
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts +3 -6
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarFeedback.d.ts +6 -9
- package/dist/react/primitive-hooks/useActionBarFeedback.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarReload.d.ts +3 -6
- package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarSpeak.d.ts +3 -6
- package/dist/react/primitive-hooks/useActionBarSpeak.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts +3 -6
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts +3 -6
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts +3 -6
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts +4 -7
- package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerCancel.d.ts +3 -6
- package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerDictate.d.ts +3 -6
- package/dist/react/primitive-hooks/useComposerDictate.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerSend.d.ts +4 -7
- package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerCancel.d.ts +2 -5
- package/dist/react/primitive-hooks/useEditComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerSend.d.ts +3 -6
- package/dist/react/primitive-hooks/useEditComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageBranching.d.ts +5 -8
- package/dist/react/primitive-hooks/useMessageBranching.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageError.d.ts +1 -4
- package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageReload.d.ts +3 -6
- package/dist/react/primitive-hooks/useMessageReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts +7 -10
- package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.js +4 -4
- package/dist/react/primitive-hooks/useSuggestionTrigger.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts +1 -4
- package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +1 -4
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts +2 -5
- package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts +2 -5
- package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts +2 -5
- package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts +2 -5
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts +3 -6
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListNew.d.ts +2 -5
- package/dist/react/primitive-hooks/useThreadListNew.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts +1 -4
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessages.d.ts +2 -5
- package/dist/react/primitive-hooks/useThreadMessages.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useVoice.d.ts +8 -11
- package/dist/react/primitive-hooks/useVoice.d.ts.map +1 -1
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +27 -29
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.d.ts +26 -28
- package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerIf.d.ts +13 -13
- package/dist/react/primitives/composer/ComposerIf.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerQueue.d.ts +13 -17
- package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.d.ts +30 -33
- package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.js +42 -33
- package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.d.ts +30 -28
- package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.js +14 -15
- package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.d.ts +122 -120
- package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.js +3 -3
- package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
- package/dist/react/primitives/message/MessageParts.d.ts +208 -194
- package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageParts.js +124 -82
- package/dist/react/primitives/message/MessageParts.js.map +1 -1
- package/dist/react/primitives/message/MessageQuote.d.ts +8 -11
- package/dist/react/primitives/message/MessageQuote.d.ts.map +1 -1
- package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts +4 -7
- package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
- package/dist/react/primitives/part/PartMessages.d.ts +16 -19
- package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.d.ts +61 -64
- package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadSuggestions.d.ts +25 -27
- package/dist/react/primitives/thread/ThreadSuggestions.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadSuggestions.js +24 -5
- package/dist/react/primitives/thread/ThreadSuggestions.js.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.d.ts +26 -28
- package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts +6 -9
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -1
- package/dist/react/providers/AttachmentByIndexProvider.d.ts +5 -8
- package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +4 -7
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +3 -6
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/MessageByIdProvider.d.ts +3 -6
- package/dist/react/providers/MessageByIdProvider.d.ts.map +1 -1
- package/dist/react/providers/MessageByIndexProvider.d.ts +3 -6
- package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/PartByIndexProvider.d.ts +3 -6
- package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/QueueItemByIndexProvider.d.ts +4 -7
- package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ReadonlyThreadProvider.d.ts +7 -10
- package/dist/react/providers/ReadonlyThreadProvider.d.ts.map +1 -1
- package/dist/react/providers/ReadonlyThreadProvider.js.map +1 -1
- package/dist/react/providers/SuggestionByIndexProvider.d.ts +4 -7
- package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.d.ts +4 -7
- package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.js +5 -1
- package/dist/react/providers/TextMessagePartProvider.js.map +1 -1
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts +4 -7
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +4 -8
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +210 -219
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +70 -46
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +186 -198
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +13 -4
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.d.ts +17 -23
- package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.js +3 -1
- package/dist/react/runtimes/RemoteThreadResource.js.map +1 -1
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +10 -11
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts +11 -14
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts +6 -8
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.js +9 -2
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.js.map +1 -1
- package/dist/react/runtimes/assistant-transport/runManager.d.ts +9 -12
- package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/runManager.js +4 -1
- package/dist/react/runtimes/assistant-transport/runManager.js.map +1 -1
- package/dist/react/runtimes/assistant-transport/types.d.ts +123 -118
- package/dist/react/runtimes/assistant-transport/types.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts +7 -10
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js +17 -6
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js.map +1 -1
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts +3 -6
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts +2 -5
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +7 -10
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +426 -216
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +15 -18
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js +8 -4
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.d.ts +146 -125
- package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.js +120 -8
- package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +13 -15
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts +5 -7
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/sdkIdentity.d.ts +2 -5
- package/dist/react/runtimes/cloud/sdkIdentity.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/sdkIdentity.js +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +3 -6
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts +9 -11
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/createMessageConverter.d.ts +15 -19
- package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
- package/dist/react/runtimes/createMessageConverter.js.map +1 -1
- package/dist/react/runtimes/createRuntimeExtras.d.ts +14 -17
- package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.d.ts +17 -21
- package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
- package/dist/react/runtimes/external-store-history-copy.d.ts +25 -0
- package/dist/react/runtimes/external-store-history-copy.d.ts.map +1 -0
- package/dist/react/runtimes/external-store-history-copy.js +148 -0
- package/dist/react/runtimes/external-store-history-copy.js.map +1 -0
- package/dist/react/runtimes/useExternalStoreRuntime.d.ts +3 -6
- package/dist/react/runtimes/useExternalStoreRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.js +72 -35
- package/dist/react/runtimes/useExternalStoreRuntime.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts +2 -5
- package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts.map +1 -1
- package/dist/react/runtimes/useLocalRuntime.d.ts +29 -41
- package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useLocalRuntime.js +142 -34
- package/dist/react/runtimes/useLocalRuntime.js.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts +3 -6
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +2 -2
- package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
- package/dist/react/runtimes/useRuntimeAdapters.d.ts +5 -7
- package/dist/react/runtimes/useRuntimeAdapters.d.ts.map +1 -1
- package/dist/react/runtimes/useStreamingTiming.d.ts +4 -6
- package/dist/react/runtimes/useStreamingTiming.d.ts.map +1 -1
- package/dist/react/types/MessagePartComponentTypes.d.ts +72 -70
- package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
- package/dist/react/types/scopes/dataRenderers.d.ts +11 -15
- package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -1
- package/dist/react/types/scopes/interactables.d.ts +60 -60
- package/dist/react/types/scopes/interactables.d.ts.map +1 -1
- package/dist/react/types/scopes/tools.d.ts +21 -24
- package/dist/react/types/scopes/tools.d.ts.map +1 -1
- package/dist/react/types/store-augmentation.d.ts +10 -11
- package/dist/react/types/store-augmentation.d.ts.map +1 -1
- package/dist/react/utils/getMessageQuote.d.ts +6 -8
- package/dist/react/utils/getMessageQuote.d.ts.map +1 -1
- package/dist/react/utils/groupParts.d.ts +35 -37
- package/dist/react/utils/groupParts.d.ts.map +1 -1
- package/dist/react/utils/useJSONEqual.d.ts +3 -6
- package/dist/react/utils/useJSONEqual.d.ts.map +1 -1
- package/dist/react/utils/useJSONSchemaDependency.d.ts +3 -6
- package/dist/react/utils/useJSONSchemaDependency.d.ts.map +1 -1
- package/dist/runtime/api/assistant-runtime.d.ts +28 -31
- package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
- package/dist/runtime/api/attachment-runtime.d.ts +51 -49
- package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
- package/dist/runtime/api/attachment-runtime.js.map +1 -1
- package/dist/runtime/api/bindings.d.ts +35 -35
- package/dist/runtime/api/bindings.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.d.ts +215 -201
- package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.js +4 -0
- package/dist/runtime/api/composer-runtime.js.map +1 -1
- package/dist/runtime/api/message-part-runtime.d.ts +31 -30
- package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.js +25 -2
- package/dist/runtime/api/message-part-runtime.js.map +1 -1
- package/dist/runtime/api/message-runtime.d.ts +87 -82
- package/dist/runtime/api/message-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-runtime.js +4 -3
- package/dist/runtime/api/message-runtime.js.map +1 -1
- package/dist/runtime/api/paths.d.ts +54 -57
- package/dist/runtime/api/paths.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.d.ts +70 -72
- package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts +77 -81
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +306 -308
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.js +2 -1
- package/dist/runtime/api/thread-runtime.js.map +1 -1
- package/dist/runtime/base/base-assistant-runtime-core.d.ts +9 -12
- package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts +150 -101
- package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.js +400 -122
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts +121 -104
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js +174 -62
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +30 -31
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.js +21 -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 +28 -31
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js +23 -2
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts +15 -18
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -1
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts +8 -11
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/composer-runtime-core.d.ts +98 -83
- package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +67 -70
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +225 -211
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/internal.d.ts +25 -20
- package/dist/runtime/internal.d.ts.map +1 -0
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts +37 -40
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.d.ts +32 -33
- package/dist/runtime/queue/message-queue.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.js +10 -2
- package/dist/runtime/queue/message-queue.js.map +1 -1
- package/dist/runtime/queue/queue-item.d.ts +7 -10
- package/dist/runtime/queue/queue-item.d.ts.map +1 -1
- package/dist/runtime/utils/abortable-thread-load.d.ts +9 -11
- package/dist/runtime/utils/abortable-thread-load.d.ts.map +1 -1
- package/dist/runtime/utils/attachment-add-operations.d.ts +16 -15
- package/dist/runtime/utils/attachment-add-operations.d.ts.map +1 -1
- package/dist/runtime/utils/attachment-add-operations.js +24 -2
- package/dist/runtime/utils/attachment-add-operations.js.map +1 -1
- package/dist/runtime/utils/attachment-send-operations.d.ts +12 -0
- package/dist/runtime/utils/attachment-send-operations.d.ts.map +1 -0
- package/dist/runtime/utils/attachment-send-operations.js +34 -0
- package/dist/runtime/utils/attachment-send-operations.js.map +1 -0
- package/dist/runtime/utils/auto-status.d.ts +11 -13
- package/dist/runtime/utils/auto-status.d.ts.map +1 -1
- package/dist/runtime/utils/auto-status.js +3 -5
- package/dist/runtime/utils/auto-status.js.map +1 -1
- package/dist/runtime/utils/chat-model-adapter.d.ts +31 -33
- package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.d.ts +47 -48
- package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.js +6 -5
- package/dist/runtime/utils/external-message-conversion.js.map +1 -1
- package/dist/runtime/utils/external-store-message.d.ts +6 -9
- package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository-session.d.ts +24 -27
- package/dist/runtime/utils/message-repository-session.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.d.ts +52 -54
- package/dist/runtime/utils/message-repository.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.js +8 -7
- package/dist/runtime/utils/message-repository.js.map +1 -1
- package/dist/runtime/utils/pending-tool-calls.d.ts +12 -14
- package/dist/runtime/utils/pending-tool-calls.d.ts.map +1 -1
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +7 -10
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
- package/dist/runtime/utils/runtime-extras-brand.d.ts +6 -9
- 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 +103 -0
- package/dist/runtime/utils/stored-message-parts.js.map +1 -0
- package/dist/runtime/utils/streaming-timing.d.ts +23 -26
- package/dist/runtime/utils/streaming-timing.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.d.ts +38 -34
- package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.js +16 -6
- package/dist/runtime/utils/thread-message-like.js.map +1 -1
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts +5 -7
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts.map +1 -1
- package/dist/runtime/utils/thread-runtime-lifecycle.js +31 -4
- package/dist/runtime/utils/thread-runtime-lifecycle.js.map +1 -1
- package/dist/runtime/utils/tool-call-tree.d.ts +10 -13
- package/dist/runtime/utils/tool-call-tree.d.ts.map +1 -1
- package/dist/runtime/utils/tool-interactions.d.ts +10 -0
- package/dist/runtime/utils/tool-interactions.d.ts.map +1 -0
- package/dist/runtime/utils/tool-interactions.js +92 -0
- package/dist/runtime/utils/tool-interactions.js.map +1 -0
- package/dist/runtimes/assistant-transport/utils.d.ts +1 -4
- package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-adapter.d.ts +220 -200
- package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-runtime-core.d.ts +6 -8
- package/dist/runtimes/external-store/external-store-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-runtime-core.js +4 -1
- package/dist/runtimes/external-store/external-store-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/external-store-shared-options.d.ts +3 -6
- 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 +40 -43
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +2 -2
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +119 -125
- 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 +71 -18
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/thread-message-converter.d.ts +5 -8
- package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +96 -98
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.js +3 -0
- package/dist/runtimes/inert/InertThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/internal.d.ts +20 -16
- package/dist/runtimes/internal.d.ts.map +1 -0
- package/dist/runtimes/local/local-runtime-core.d.ts +7 -10
- package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-runtime-options.d.ts +41 -44
- package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +42 -45
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +94 -93
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +220 -29
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/local/should-continue.d.ts +2 -5
- package/dist/runtimes/local/should-continue.d.ts.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +77 -55
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +28 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +12 -15
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts +3 -6
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts +2 -5
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +34 -31
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/optimistic-state.js +8 -3
- package/dist/runtimes/remote-thread-list/optimistic-state.js.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +60 -63
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.js +1 -1
- package/dist/runtimes/remote-thread-list/title-generation.d.ts +31 -33
- package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/title.d.ts +5 -8
- package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/types.d.ts +119 -121
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +147 -149
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +22 -7
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
- package/dist/store/clients/chain-of-thought-client.d.ts +8 -11
- package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
- package/dist/store/clients/external-thread.d.ts +56 -58
- package/dist/store/clients/external-thread.d.ts.map +1 -1
- package/dist/store/clients/external-thread.js +1270 -741
- package/dist/store/clients/external-thread.js.map +1 -1
- package/dist/store/clients/model-context-client.d.ts +2 -5
- package/dist/store/clients/model-context-client.d.ts.map +1 -1
- package/dist/store/clients/no-op-composer-client.d.ts +3 -6
- package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
- package/dist/store/clients/no-op-composer-client.js +3 -1
- package/dist/store/clients/no-op-composer-client.js.map +1 -1
- package/dist/store/clients/runtime-adapter.d.ts +2 -5
- package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
- package/dist/store/clients/single-thread-list.d.ts +4 -6
- package/dist/store/clients/single-thread-list.d.ts.map +1 -1
- package/dist/store/clients/submission-message.d.ts +8 -0
- package/dist/store/clients/submission-message.d.ts.map +1 -0
- package/dist/store/clients/submission-message.js +22 -0
- package/dist/store/clients/submission-message.js.map +1 -0
- package/dist/store/clients/suggestions.d.ts +8 -11
- package/dist/store/clients/suggestions.d.ts.map +1 -1
- package/dist/store/clients/thread-message-client.d.ts +12 -12
- package/dist/store/clients/thread-message-client.d.ts.map +1 -1
- package/dist/store/clients/thread-message-client.js +81 -82
- package/dist/store/clients/thread-message-client.js.map +1 -1
- package/dist/store/clients/thread-selection-events.d.ts +1 -4
- package/dist/store/clients/thread-selection-events.d.ts.map +1 -1
- package/dist/store/clients/thread-tasks.d.ts +7 -10
- package/dist/store/clients/thread-tasks.d.ts.map +1 -1
- package/dist/store/env.d.ts +1 -4
- package/dist/store/env.d.ts.map +1 -1
- package/dist/store/index.d.ts +33 -36
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +5 -5
- package/dist/store/internal.d.ts +12 -12
- package/dist/store/internal.d.ts.map +1 -0
- package/dist/store/internal.js +2 -2
- package/dist/store/primitive-predicates.d.ts +14 -16
- package/dist/store/primitive-predicates.d.ts.map +1 -1
- package/dist/store/primitive-predicates.js +10 -5
- package/dist/store/primitive-predicates.js.map +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts +4 -7
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts +11 -14
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.js +65 -62
- package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/handle-runtime-action.d.ts +1 -4
- 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 -4
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts.map +1 -1
- package/dist/store/runtime-clients/liveRef.d.ts +2 -5
- package/dist/store/runtime-clients/liveRef.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts +4 -7
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.js +26 -16
- package/dist/store/runtime-clients/message-part-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts +10 -11
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.js +121 -113
- package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +5 -8
- 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 +6 -9
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts +4 -7
- package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +221 -158
- package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/useSubscribable.d.ts +3 -6
- package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
- package/dist/store/scope-registration.d.ts +28 -29
- package/dist/store/scope-registration.d.ts.map +1 -1
- package/dist/store/scopes/attachment.d.ts +19 -22
- package/dist/store/scopes/attachment.d.ts.map +1 -1
- package/dist/store/scopes/chain-of-thought.d.ts +33 -35
- package/dist/store/scopes/chain-of-thought.d.ts.map +1 -1
- package/dist/store/scopes/composer.d.ts +147 -135
- package/dist/store/scopes/composer.d.ts.map +1 -1
- package/dist/store/scopes/message.d.ts +119 -112
- package/dist/store/scopes/message.d.ts.map +1 -1
- package/dist/store/scopes/model-context.d.ts +10 -13
- package/dist/store/scopes/model-context.d.ts.map +1 -1
- package/dist/store/scopes/part.d.ts +53 -50
- package/dist/store/scopes/part.d.ts.map +1 -1
- package/dist/store/scopes/queue-item.d.ts +21 -23
- package/dist/store/scopes/queue-item.d.ts.map +1 -1
- package/dist/store/scopes/suggestion.d.ts +14 -17
- package/dist/store/scopes/suggestion.d.ts.map +1 -1
- package/dist/store/scopes/suggestions.d.ts +18 -21
- package/dist/store/scopes/suggestions.d.ts.map +1 -1
- package/dist/store/scopes/task.d.ts +27 -30
- package/dist/store/scopes/task.d.ts.map +1 -1
- package/dist/store/scopes/thread-list-item.d.ts +68 -71
- package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
- package/dist/store/scopes/thread.d.ts +197 -200
- package/dist/store/scopes/thread.d.ts.map +1 -1
- package/dist/store/scopes/threads.d.ts +49 -52
- package/dist/store/scopes/threads.d.ts.map +1 -1
- package/dist/subscribable/subscribable.d.ts +73 -69
- package/dist/subscribable/subscribable.d.ts.map +1 -1
- package/dist/subscribable/subscribable.js +35 -7
- package/dist/subscribable/subscribable.js.map +1 -1
- package/dist/types/attachment.d.ts +35 -37
- package/dist/types/attachment.d.ts.map +1 -1
- package/dist/types/augmentations.d.ts +7 -8
- package/dist/types/augmentations.d.ts.map +1 -1
- package/dist/types/directive.d.ts +13 -16
- package/dist/types/directive.d.ts.map +1 -1
- package/dist/types/error.d.ts +15 -17
- package/dist/types/error.d.ts.map +1 -1
- package/dist/types/index.d.ts +7 -7
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/message.d.ts +358 -318
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js.map +1 -1
- package/dist/types/quote.d.ts +3 -6
- package/dist/types/quote.d.ts.map +1 -1
- package/dist/types/trigger.d.ts +10 -13
- package/dist/types/trigger.d.ts.map +1 -1
- package/dist/types/unsubscribe.d.ts +1 -4
- package/dist/types/unsubscribe.d.ts.map +1 -1
- package/dist/utils/abortable-iterable.d.ts +2 -5
- package/dist/utils/abortable-iterable.d.ts.map +1 -1
- package/dist/utils/composite-context-provider.d.ts +9 -13
- package/dist/utils/composite-context-provider.d.ts.map +1 -1
- package/dist/utils/data-url.d.ts +16 -19
- package/dist/utils/data-url.d.ts.map +1 -1
- package/dist/utils/getGroupStatus.d.ts +19 -21
- package/dist/utils/getGroupStatus.d.ts.map +1 -1
- package/dist/utils/id.d.ts +3 -6
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/image-media-type.d.ts +1 -4
- package/dist/utils/image-media-type.d.ts.map +1 -1
- package/dist/utils/invoke-user-callback.d.ts +1 -4
- package/dist/utils/invoke-user-callback.d.ts.map +1 -1
- package/dist/utils/json/is-json-equal.d.ts +1 -4
- package/dist/utils/json/is-json-equal.d.ts.map +1 -1
- package/dist/utils/json/is-json.d.ts +5 -8
- package/dist/utils/json/is-json.d.ts.map +1 -1
- package/dist/utils/json/stable-stringify-tool-args.d.ts +3 -6
- package/dist/utils/json/stable-stringify-tool-args.d.ts.map +1 -1
- package/dist/utils/normalizePartStatus.d.ts +6 -8
- package/dist/utils/normalizePartStatus.d.ts.map +1 -1
- package/dist/utils/normalizePartStatus.js +3 -2
- package/dist/utils/normalizePartStatus.js.map +1 -1
- package/dist/utils/notify-event-listeners.d.ts +2 -4
- package/dist/utils/notify-event-listeners.d.ts.map +1 -1
- package/dist/utils/record.d.ts +1 -4
- package/dist/utils/record.d.ts.map +1 -1
- package/dist/utils/silent-runtime-action.d.ts +2 -5
- package/dist/utils/silent-runtime-action.d.ts.map +1 -1
- package/dist/utils/text.d.ts +2 -5
- package/dist/utils/text.d.ts.map +1 -1
- package/dist/utils/wire-media.d.ts +3 -6
- package/dist/utils/wire-media.d.ts.map +1 -1
- package/package.json +15 -13
- package/src/adapters/attachment.test.ts +98 -1
- package/src/adapters/attachment.ts +77 -20
- package/src/adapters/feedback.ts +1 -0
- package/src/adapters/speech.test.ts +94 -0
- package/src/adapters/speech.ts +16 -2
- package/src/adapters/thread-history.ts +16 -5
- package/src/adapters/voice.test.ts +169 -0
- package/src/adapters/voice.ts +25 -4
- package/src/index.ts +14 -2
- package/src/internal.ts +7 -0
- package/src/model-context/frame/host.test.ts +51 -1
- package/src/model-context/frame/host.ts +3 -1
- package/src/model-context/frame/provider.test.ts +106 -20
- package/src/model-context/frame/provider.ts +8 -1
- package/src/model-context/frame/validate.ts +57 -0
- package/src/model-context/interactable-composer-metadata.test.ts +82 -0
- package/src/model-context/interactable-composer-metadata.ts +45 -2
- package/src/react/RuntimeAdapter.test.ts +4 -1
- package/src/react/adapters/LocalStorageThreadListAdapter.test.ts +711 -0
- package/src/react/adapters/LocalStorageThreadListAdapter.tsx +125 -109
- package/src/react/client/Interactables.test.ts +865 -8
- package/src/react/client/Interactables.ts +325 -45
- package/src/react/client/RemoteThreadList.concurrent.test.tsx +9 -3
- package/src/react/client/RemoteThreadList.initialize-failure.test.ts +124 -0
- package/src/react/client/RemoteThreadList.test.ts +5 -6
- package/src/react/client/RemoteThreadList.ts +6 -0
- package/src/react/client/Tools.ts +2 -3
- package/src/react/client/interactable-model-context.test.ts +56 -13
- package/src/react/client/interactable-model-context.ts +48 -23
- package/src/react/index.ts +2 -2
- package/src/react/interactables-legacy/Interactables.test.ts +221 -4
- package/src/react/interactables-legacy/Interactables.ts +25 -14
- package/src/react/interactables-legacy/interactable-model-context.ts +26 -24
- package/src/react/interactables-legacy/useAssistantInteractable.test.tsx +40 -22
- package/src/react/interactables-shared/useInteractablePersistenceQueue.test.tsx +22 -2
- package/src/react/interactables-shared/useInteractablePersistenceQueue.ts +63 -11
- package/src/react/model-context/useInteractable.test.tsx +56 -29
- package/src/react/primitive-hooks/useActionBarCopy.test.ts +5 -5
- package/src/react/primitive-hooks/useSuggestionTrigger.test.ts +33 -0
- package/src/react/primitive-hooks/useSuggestionTrigger.ts +7 -4
- package/src/react/primitives/generativeUI/GenerativeUI.test.tsx +170 -0
- package/src/react/primitives/generativeUI/GenerativeUI.tsx +43 -28
- package/src/react/primitives/message/MessageAttachments.test.tsx +2 -6
- package/src/react/primitives/message/MessageAttachments.tsx +14 -8
- package/src/react/primitives/message/MessageGroupedParts.test.tsx +155 -8
- package/src/react/primitives/message/MessageGroupedParts.tsx +19 -6
- package/src/react/primitives/message/MessageParts.test.tsx +84 -0
- package/src/react/primitives/message/MessageParts.tool-interaction.test.tsx +69 -0
- package/src/react/primitives/message/MessageParts.tsx +29 -8
- package/src/react/primitives/thread/ThreadMessages.test.tsx +25 -7
- package/src/react/primitives/thread/ThreadSuggestions.test.tsx +97 -0
- package/src/react/primitives/thread/ThreadSuggestions.tsx +29 -6
- package/src/react/providers/ReadonlyThreadProvider.tsx +2 -2
- package/src/react/providers/TextMessagePartProvider.tsx +3 -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.running.test.tsx +93 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +181 -21
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.title.test.tsx +62 -17
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +112 -77
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +19 -3
- package/src/react/runtimes/RemoteThreadResource.ts +5 -2
- package/src/react/runtimes/assistant-transport/replayBoundaryStream.test.ts +3 -1
- package/src/react/runtimes/assistant-transport/replayBoundaryStream.ts +10 -2
- package/src/react/runtimes/assistant-transport/runManager.ts +3 -0
- package/src/react/runtimes/assistant-transport/transport-parentid.test.tsx +57 -0
- package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +73 -46
- package/src/react/runtimes/assistant-transport/transport-thread-id.test.tsx +571 -0
- package/src/react/runtimes/assistant-transport/types.ts +9 -1
- package/src/react/runtimes/assistant-transport/useAssistantTransport.spec.md +10 -0
- package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.test.tsx +108 -1
- package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.ts +33 -9
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.copy.integration.test.tsx +289 -0
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.copy.test.tsx +471 -0
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.engagement.test.tsx +330 -0
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.ts +78 -2
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +463 -2
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +595 -227
- package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +33 -4
- package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +7 -3
- package/src/react/runtimes/cloud/auiV0.ts +275 -6
- package/src/react/runtimes/cloud/auiV0DecodeSafely.test.ts +873 -0
- package/src/react/runtimes/createMessageConverter.ts +9 -3
- package/src/react/runtimes/external-message-converter.test.ts +7 -3
- package/src/react/runtimes/external-store-history-copy.ts +223 -0
- package/src/react/runtimes/remote-thread-hook-on-tap.test.ts +2 -1
- package/src/react/runtimes/useExternalStoreRuntime.history-copy.test.tsx +483 -0
- package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +84 -3
- package/src/react/runtimes/useExternalStoreRuntime.suggestions.test.tsx +6 -2
- package/src/react/runtimes/useExternalStoreRuntime.ts +25 -5
- package/src/react/runtimes/useLocalRuntime.test.tsx +145 -1
- package/src/react/runtimes/useLocalRuntime.ts +8 -5
- package/src/react/runtimes/useRemoteThreadListRuntime.concurrent.test.tsx +84 -4
- package/src/react/runtimes/useRemoteThreadListRuntime.ts +5 -1
- package/src/react/types/MessagePartComponentTypes.ts +10 -0
- package/src/react/types/scopes/interactables.ts +3 -0
- package/src/runtime/api/attachment-runtime.ts +10 -5
- package/src/runtime/api/bindings.ts +6 -1
- package/src/runtime/api/composer-runtime.ts +29 -6
- package/src/runtime/api/message-part-runtime.test.ts +215 -0
- package/src/runtime/api/message-part-runtime.ts +44 -1
- package/src/runtime/api/message-runtime.test.ts +112 -2
- package/src/runtime/api/message-runtime.ts +25 -7
- package/src/runtime/api/thread-list-item-runtime.ts +5 -5
- package/src/runtime/api/thread-list-runtime.ts +3 -3
- package/src/runtime/api/thread-runtime.test.ts +59 -0
- package/src/runtime/api/thread-runtime.ts +21 -11
- package/src/runtime/base/base-composer-runtime-core.ts +548 -153
- package/src/runtime/base/base-thread-runtime-core.test.ts +1614 -136
- package/src/runtime/base/base-thread-runtime-core.ts +236 -46
- package/src/runtime/base/default-edit-composer-runtime-core.ts +24 -2
- package/src/runtime/base/default-thread-composer-runtime-core.ts +33 -3
- package/src/runtime/interfaces/composer-runtime-core.ts +19 -0
- package/src/runtime/interfaces/thread-runtime-core.ts +24 -1
- package/src/runtime/queue/message-queue.ts +11 -1
- package/src/runtime/utils/attachment-add-operations.ts +45 -2
- package/src/runtime/utils/attachment-send-operations.ts +54 -0
- package/src/runtime/utils/auto-status.test.ts +54 -0
- package/src/runtime/utils/auto-status.ts +3 -10
- package/src/runtime/utils/external-message-conversion.test.ts +91 -0
- package/src/runtime/utils/external-message-conversion.ts +9 -6
- package/src/runtime/utils/message-repository.test.ts +69 -1
- package/src/runtime/utils/message-repository.ts +14 -7
- package/src/runtime/utils/stored-message-parts.ts +216 -0
- package/src/runtime/utils/thread-message-like.test.ts +58 -0
- package/src/runtime/utils/thread-message-like.ts +79 -48
- package/src/runtime/utils/thread-runtime-lifecycle.test.ts +67 -0
- package/src/runtime/utils/thread-runtime-lifecycle.ts +42 -8
- package/src/runtime/utils/tool-interactions.test.ts +193 -0
- package/src/runtime/utils/tool-interactions.ts +147 -0
- package/src/runtimes/external-store/external-store-adapter.ts +25 -0
- package/src/runtimes/external-store/external-store-runtime-core.ts +10 -2
- package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +2 -2
- package/src/runtimes/external-store/external-store-thread-runtime-core.test.ts +49 -0
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +114 -32
- package/src/runtimes/inert/InertThreadRuntimeCore.test.ts +127 -56
- package/src/runtimes/inert/InertThreadRuntimeCore.ts +10 -1
- package/src/runtimes/local/local-thread-runtime-core.edit-cancellation.test.ts +70 -0
- package/src/runtimes/local/local-thread-runtime-core.test.ts +1866 -169
- package/src/runtimes/local/local-thread-runtime-core.ts +365 -40
- package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +53 -1
- package/src/runtimes/remote-thread-list/optimistic-state.ts +8 -3
- package/src/runtimes/tool-invocations/EDGE_CASES.md +19 -4
- package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +392 -39
- package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +31 -8
- package/src/store/clients/external-thread.test.ts +145 -0
- package/src/store/clients/external-thread.ts +669 -144
- package/src/store/clients/model-context-client.test.ts +8 -8
- package/src/store/clients/no-op-composer-client.ts +2 -0
- package/src/store/clients/submission-message.ts +27 -0
- package/src/store/clients/thread-message-client.test.ts +39 -0
- package/src/store/clients/thread-message-client.ts +13 -6
- package/src/store/index.ts +2 -2
- package/src/store/internal.ts +1 -0
- package/src/store/primitive-predicates.test.ts +119 -0
- package/src/store/primitive-predicates.ts +19 -4
- package/src/store/runtime-clients/composer-runtime-client.ts +4 -3
- package/src/store/runtime-clients/message-part-runtime-client.test.ts +42 -0
- package/src/store/runtime-clients/message-part-runtime-client.ts +4 -0
- package/src/store/runtime-clients/message-runtime-client.ts +5 -0
- package/src/store/runtime-clients/thread-runtime-client.test.tsx +243 -0
- package/src/store/runtime-clients/thread-runtime-client.ts +46 -9
- package/src/store/scopes/composer.ts +22 -4
- package/src/store/scopes/message.ts +12 -1
- package/src/store/scopes/part.ts +8 -0
- package/src/subscribable/subscribable.test.ts +205 -3
- package/src/subscribable/subscribable.ts +49 -7
- package/src/tests/RemoteThreadListThreadListRuntimeCore-errors.test.ts +95 -1
- package/src/tests/attachment-adapters.test.ts +16 -1
- package/src/tests/auiV0Encode.test.ts +412 -1
- package/src/tests/base-composer-runtime-core-addAttachment.test.ts +6 -6
- package/src/tests/base-composer-runtime-core-send.test.ts +722 -29
- package/src/tests/base-composer-runtime-core.test.ts +212 -5
- package/src/tests/composer-can-cancel.test.ts +35 -6
- package/src/tests/composer-can-send.test.ts +120 -1
- package/src/tests/composer-submission.test.tsx +796 -0
- package/src/tests/default-edit-composer-runtime-core.test.ts +149 -2
- package/src/tests/external-store-thread-list-runtime-core.test.ts +111 -0
- package/src/tests/external-store-thread-runtime-core-adapter.test.ts +810 -28
- package/src/tests/external-store-thread-runtime-core.test.ts +217 -0
- package/src/tests/external-thread-attachments.test.tsx +763 -26
- package/src/tests/external-thread-feedback.test.tsx +20 -7
- package/src/tests/external-thread-isLast.test.tsx +69 -0
- package/src/tests/external-thread-parity.test.tsx +1 -1
- package/src/tests/get-thread-state-isRunning.test.ts +2 -2
- package/src/tests/message-queue.test.ts +45 -10
- package/src/tests/remote-thread-list-adapter-switch.test.ts +45 -1
- package/src/tests/thread-switch-events.test.tsx +11 -7
- package/src/tests/useRemoteThreadListRuntime-controlled.test.tsx +2 -1
- package/src/types/message.test.ts +19 -0
- package/src/types/message.ts +65 -10
- package/src/utils/normalizePartStatus.ts +14 -1
- package/dist/tests/remote-thread-list-test-helpers.d.ts +0 -16
- package/dist/tests/remote-thread-list-test-helpers.d.ts.map +0 -1
- package/dist/tests/remote-thread-list-test-helpers.js +0 -59
- package/dist/tests/remote-thread-list-test-helpers.js.map +0 -1
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { gateInteractableComposerMetadata } from "../../model-context/interactable-composer-metadata.js";
|
|
2
|
-
import { notifyEventListeners } from "../../utils/notify-event-listeners.js";
|
|
3
|
-
import { BaseSubscribable, notifySubscribers } from "../../subscribable/subscribable.js";
|
|
4
1
|
import { generateId } from "../../utils/id.js";
|
|
2
|
+
import { notifyEventListeners } from "../../utils/notify-event-listeners.js";
|
|
5
3
|
import { getThreadMessageText } from "../../utils/text.js";
|
|
4
|
+
import { gateInteractableComposerMetadata } from "../../model-context/interactable-composer-metadata.js";
|
|
5
|
+
import { BaseSubscribable, notifySubscribers } from "../../subscribable/subscribable.js";
|
|
6
|
+
import { MessageNotSentError } from "../../types/error.js";
|
|
6
7
|
import { ExportedMessageRepository, MessageRepository } from "../utils/message-repository.js";
|
|
8
|
+
import { captureThreadRuntimeGeneration } from "../utils/thread-runtime-lifecycle.js";
|
|
7
9
|
import { DefaultThreadComposerRuntimeCore } from "./default-thread-composer-runtime-core.js";
|
|
8
10
|
import { DefaultEditComposerRuntimeCore } from "./default-edit-composer-runtime-core.js";
|
|
9
11
|
//#region src/runtime/base/base-thread-runtime-core.ts
|
|
@@ -22,11 +24,21 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
22
24
|
_getBaseMessages() {
|
|
23
25
|
return this.repository.getMessages();
|
|
24
26
|
}
|
|
27
|
+
_commitVoiceMessage(_message) {}
|
|
28
|
+
_onMessageMetadataChanged(_previousMessage, _message) {}
|
|
29
|
+
_dropVoiceMessage(messageId, notify) {
|
|
30
|
+
const index = this._voiceMessages.findIndex((voiceMessage) => voiceMessage.id === messageId);
|
|
31
|
+
if (index === -1) return;
|
|
32
|
+
this._voiceMessages.splice(index, 1);
|
|
33
|
+
this._markVoiceMessagesDirty();
|
|
34
|
+
if (notify) this._notifySubscribers();
|
|
35
|
+
}
|
|
25
36
|
get messages() {
|
|
26
37
|
if (this._voiceMessages.length === 0) return this._getBaseMessages();
|
|
27
38
|
const base = this._getBaseMessages();
|
|
28
39
|
if (this._cachedVoiceGeneration !== this._voiceGeneration || this._cachedMergedBase !== base) {
|
|
29
|
-
|
|
40
|
+
const baseMessageIds = new Set(base.map((message) => message.id));
|
|
41
|
+
this._cachedMergedMessages = [...base, ...this._voiceMessages.filter((message) => !baseMessageIds.has(message.id))];
|
|
30
42
|
this._cachedVoiceGeneration = this._voiceGeneration;
|
|
31
43
|
this._cachedMergedBase = base;
|
|
32
44
|
}
|
|
@@ -83,7 +95,11 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
83
95
|
_isVoiceMessage(messageId) {
|
|
84
96
|
return messageId !== null && this._voiceMessages.some((m) => m.id === messageId);
|
|
85
97
|
}
|
|
98
|
+
_resolveAppendParent(parentId) {
|
|
99
|
+
return this._isVoiceMessage(parentId) ? this._getBaseMessages().at(-1)?.id ?? null : parentId;
|
|
100
|
+
}
|
|
86
101
|
beginEdit(messageId) {
|
|
102
|
+
if (this.voice) throw new Error("Cannot edit a message while a voice session is connected");
|
|
87
103
|
if (this._isVoiceMessage(messageId)) throw new Error("Voice transcript messages cannot be edited");
|
|
88
104
|
if (this._editComposers.has(messageId)) throw new Error("Edit already in progress");
|
|
89
105
|
this._editComposers.set(messageId, new DefaultEditComposerRuntimeCore(this, () => this._editComposers.delete(messageId), this.repository.getMessage(messageId)));
|
|
@@ -124,27 +140,33 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
124
140
|
approved
|
|
125
141
|
});
|
|
126
142
|
}
|
|
127
|
-
submitFeedback({ messageId, type }) {
|
|
143
|
+
submitFeedback({ messageId, type, comment }) {
|
|
128
144
|
const adapter = this.adapters?.feedback;
|
|
129
|
-
if (!adapter) throw new Error("Feedback adapter not configured");
|
|
130
145
|
const entry = this.getMessageById(messageId);
|
|
131
146
|
if (!entry) throw new Error(`Message not found: ${messageId}`);
|
|
132
147
|
const { message, parentId } = entry;
|
|
133
|
-
|
|
148
|
+
const trimmed = comment?.trim();
|
|
149
|
+
const feedback = {
|
|
150
|
+
type,
|
|
151
|
+
...trimmed ? { comment: trimmed } : void 0
|
|
152
|
+
};
|
|
153
|
+
adapter?.submit({
|
|
134
154
|
message,
|
|
135
|
-
|
|
155
|
+
...feedback
|
|
136
156
|
});
|
|
137
157
|
if (message.role === "assistant") {
|
|
138
158
|
const updatedMessage = {
|
|
139
159
|
...message,
|
|
140
160
|
metadata: {
|
|
141
161
|
...message.metadata,
|
|
142
|
-
submittedFeedback:
|
|
162
|
+
submittedFeedback: feedback
|
|
143
163
|
}
|
|
144
164
|
};
|
|
145
165
|
const voiceIdx = this._voiceMessages.findIndex((voiceMessage) => voiceMessage.id === messageId);
|
|
146
|
-
if (voiceIdx === -1)
|
|
147
|
-
|
|
166
|
+
if (voiceIdx === -1) {
|
|
167
|
+
this.repository.addOrUpdateMessage(parentId, updatedMessage);
|
|
168
|
+
this._onMessageMetadataChanged(message, updatedMessage);
|
|
169
|
+
} else {
|
|
148
170
|
this._voiceMessages[voiceIdx] = updatedMessage;
|
|
149
171
|
if (this._currentAssistantMsg === message) this._currentAssistantMsg = updatedMessage;
|
|
150
172
|
this._markVoiceMessagesDirty();
|
|
@@ -231,15 +253,60 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
231
253
|
this._voiceVolumeSubscribers.add(callback);
|
|
232
254
|
return () => this._voiceVolumeSubscribers.delete(callback);
|
|
233
255
|
};
|
|
256
|
+
_onVoiceConnected() {}
|
|
257
|
+
_onVoiceDisconnected() {}
|
|
258
|
+
_toVoiceSessionState(session, status, mode) {
|
|
259
|
+
return {
|
|
260
|
+
status,
|
|
261
|
+
isMuted: session.isMuted,
|
|
262
|
+
mode,
|
|
263
|
+
canSendText: status.type === "running" && session.sendText !== void 0
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
_isRunActive() {
|
|
267
|
+
if (this.isRunning) return true;
|
|
268
|
+
const last = this._getBaseMessages().at(-1);
|
|
269
|
+
return last?.role === "assistant" && (last.status.type === "running" || last.status.type === "requires-action");
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Waits for a pending history import before a voice message is committed.
|
|
273
|
+
* The import may begin before or after the voice session connects, so the
|
|
274
|
+
* loading state must be rechecked when the commit is ready to run. The wait
|
|
275
|
+
* also ends when the runtime is invalidated, since a superseded runtime may
|
|
276
|
+
* never learn that loading ended.
|
|
277
|
+
*/
|
|
278
|
+
_getVoiceCommitBarrier() {
|
|
279
|
+
if (!this.isLoading) return void 0;
|
|
280
|
+
const generation = captureThreadRuntimeGeneration(this);
|
|
281
|
+
return (async () => {
|
|
282
|
+
while (this.isLoading && !generation.aborted) await new Promise((resolve) => {
|
|
283
|
+
const wake = () => {
|
|
284
|
+
unsubscribe();
|
|
285
|
+
generation.removeEventListener("abort", wake);
|
|
286
|
+
resolve();
|
|
287
|
+
};
|
|
288
|
+
const unsubscribe = this.subscribe(wake);
|
|
289
|
+
generation.addEventListener("abort", wake);
|
|
290
|
+
});
|
|
291
|
+
})();
|
|
292
|
+
}
|
|
234
293
|
connectVoice() {
|
|
235
294
|
const adapter = this.adapters?.voice;
|
|
236
295
|
if (!adapter) throw new Error("Voice adapter not configured");
|
|
296
|
+
if (this._isRunActive()) throw new Error("Cannot start a voice session while a run is in progress or paused on a pending tool action");
|
|
297
|
+
const replacing = this._voiceSession !== void 0;
|
|
237
298
|
try {
|
|
238
|
-
this.
|
|
299
|
+
this._disconnectVoice(false);
|
|
239
300
|
} catch (error) {
|
|
240
301
|
console.error("[assistant-ui] Voice cleanup threw before reconnect", error);
|
|
241
302
|
}
|
|
242
|
-
|
|
303
|
+
let session;
|
|
304
|
+
try {
|
|
305
|
+
session = adapter.connect({});
|
|
306
|
+
} catch (error) {
|
|
307
|
+
if (replacing && this._voiceSession === void 0) this._onVoiceDisconnected();
|
|
308
|
+
throw error;
|
|
309
|
+
}
|
|
243
310
|
this._voiceSession = session;
|
|
244
311
|
const unsubs = [];
|
|
245
312
|
this._voiceUnsubs = unsubs;
|
|
@@ -254,28 +321,23 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
254
321
|
};
|
|
255
322
|
try {
|
|
256
323
|
let currentMode = "listening";
|
|
257
|
-
this.voice =
|
|
258
|
-
status: session.status,
|
|
259
|
-
isMuted: session.isMuted,
|
|
260
|
-
mode: currentMode
|
|
261
|
-
};
|
|
324
|
+
this.voice = this._toVoiceSessionState(session, session.status, currentMode);
|
|
262
325
|
this._voiceVolume = 0;
|
|
263
326
|
this._notifySubscribers();
|
|
264
327
|
if (finishDetachedSetup()) return;
|
|
265
328
|
unsubs.push(session.onStatusChange((status) => {
|
|
329
|
+
if (this._voiceSession !== session) return;
|
|
266
330
|
if (status.type === "ended") {
|
|
267
331
|
this._finishVoiceAssistantMessage();
|
|
268
332
|
this._voiceSession = void 0;
|
|
269
333
|
this.voice = void 0;
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
isMuted: session.isMuted,
|
|
273
|
-
mode: currentMode
|
|
274
|
-
};
|
|
334
|
+
this._onVoiceDisconnected();
|
|
335
|
+
} else this.voice = this._toVoiceSessionState(session, status, currentMode);
|
|
275
336
|
this._notifySubscribers();
|
|
276
337
|
}));
|
|
277
338
|
if (finishDetachedSetup()) return;
|
|
278
339
|
unsubs.push(session.onModeChange((mode) => {
|
|
340
|
+
if (this._voiceSession !== session) return;
|
|
279
341
|
currentMode = mode;
|
|
280
342
|
if (this.voice) {
|
|
281
343
|
this.voice = {
|
|
@@ -287,52 +349,53 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
287
349
|
}));
|
|
288
350
|
if (finishDetachedSetup()) return;
|
|
289
351
|
unsubs.push(session.onVolumeChange((volume) => {
|
|
352
|
+
if (this._voiceSession !== session) return;
|
|
290
353
|
this._voiceVolume = volume;
|
|
291
354
|
notifyEventListeners(this._voiceVolumeSubscribers, void 0, "Voice volume");
|
|
292
355
|
}));
|
|
293
356
|
if (finishDetachedSetup()) return;
|
|
294
357
|
unsubs.push(session.onTranscript((transcript) => {
|
|
358
|
+
if (this._voiceSession !== session) return;
|
|
295
359
|
this._handleVoiceTranscript(transcript);
|
|
296
360
|
}));
|
|
297
|
-
finishDetachedSetup();
|
|
361
|
+
if (!finishDetachedSetup()) this._onVoiceConnected();
|
|
298
362
|
} catch (error) {
|
|
299
|
-
if (this._voiceSession === session && this._voiceUnsubs === unsubs)
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
363
|
+
if (this._voiceSession === session && this._voiceUnsubs === unsubs) {
|
|
364
|
+
try {
|
|
365
|
+
this._disconnectVoice(false);
|
|
366
|
+
} catch (cleanupError) {
|
|
367
|
+
console.error("[assistant-ui] Voice rollback cleanup threw", cleanupError);
|
|
368
|
+
}
|
|
369
|
+
if (replacing && this._voiceSession === void 0) this._onVoiceDisconnected();
|
|
370
|
+
} else finishDetachedSetup();
|
|
305
371
|
throw error;
|
|
306
372
|
}
|
|
307
373
|
}
|
|
308
374
|
_currentAssistantMsg = null;
|
|
375
|
+
_observeVoiceCommit(commit) {
|
|
376
|
+
Promise.resolve(commit).catch((error) => {
|
|
377
|
+
console.error("[assistant-ui] Voice message commit failed", error);
|
|
378
|
+
});
|
|
379
|
+
}
|
|
309
380
|
_handleVoiceTranscript(transcript) {
|
|
310
381
|
this.ensureInitialized();
|
|
311
382
|
if (transcript.role === "user") {
|
|
312
383
|
this._finishVoiceAssistantMessage();
|
|
313
384
|
this._currentAssistantMsg = null;
|
|
314
|
-
if (transcript.isFinal) {
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
type: "complete",
|
|
329
|
-
reason: "unknown"
|
|
330
|
-
},
|
|
331
|
-
attachments: []
|
|
332
|
-
});
|
|
333
|
-
this._markVoiceMessagesDirty();
|
|
334
|
-
this._notifySubscribers();
|
|
335
|
-
}
|
|
385
|
+
if (transcript.isFinal) this._observeVoiceCommit(this._commitVoiceUserMessage({
|
|
386
|
+
id: generateId(),
|
|
387
|
+
role: "user",
|
|
388
|
+
content: [{
|
|
389
|
+
type: "text",
|
|
390
|
+
text: transcript.text
|
|
391
|
+
}],
|
|
392
|
+
metadata: {
|
|
393
|
+
modality: "voice",
|
|
394
|
+
custom: {}
|
|
395
|
+
},
|
|
396
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
397
|
+
attachments: []
|
|
398
|
+
}));
|
|
336
399
|
} else {
|
|
337
400
|
const status = transcript.isFinal ? {
|
|
338
401
|
type: "complete",
|
|
@@ -372,12 +435,51 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
372
435
|
this._voiceMessages[idx] = updated;
|
|
373
436
|
this._currentAssistantMsg = updated;
|
|
374
437
|
}
|
|
375
|
-
if (transcript.isFinal)
|
|
438
|
+
if (transcript.isFinal) {
|
|
439
|
+
this._observeVoiceCommit(this._commitVoiceMessage(this._currentAssistantMsg));
|
|
440
|
+
this._currentAssistantMsg = null;
|
|
441
|
+
}
|
|
376
442
|
this._markVoiceMessagesDirty();
|
|
377
443
|
this._notifySubscribers();
|
|
378
444
|
}
|
|
379
445
|
}
|
|
380
|
-
|
|
446
|
+
_commitVoiceUserMessage(message) {
|
|
447
|
+
this._voiceMessages.push(message);
|
|
448
|
+
const committed = this._commitVoiceMessage(message);
|
|
449
|
+
this._markVoiceMessagesDirty();
|
|
450
|
+
this._notifySubscribers();
|
|
451
|
+
return committed;
|
|
452
|
+
}
|
|
453
|
+
async _appendToVoiceSession(message) {
|
|
454
|
+
const session = this._voiceSession;
|
|
455
|
+
if (!this.voice?.canSendText || !session?.sendText) throw new Error("Cannot send a text message while a voice session is connected");
|
|
456
|
+
const content = message.content.filter((part) => part.type === "text");
|
|
457
|
+
if (message.role !== "user" || message.sourceId != null || message.parentId !== this._resolveAppendParent(this.messages.at(-1)?.id ?? null) || message.attachments?.length || content.length !== message.content.length || !content.some((part) => part.text.trim())) throw new Error("Only a plain text user message can be sent while a voice session is connected");
|
|
458
|
+
const enriched = this.enrichAppendMetadata(message);
|
|
459
|
+
this.ensureInitialized();
|
|
460
|
+
const generation = captureThreadRuntimeGeneration(this);
|
|
461
|
+
try {
|
|
462
|
+
await session.sendText(getThreadMessageText(message));
|
|
463
|
+
} catch (error) {
|
|
464
|
+
if (generation.aborted) return;
|
|
465
|
+
const notSent = new MessageNotSentError();
|
|
466
|
+
notSent.cause = error;
|
|
467
|
+
throw notSent;
|
|
468
|
+
}
|
|
469
|
+
if (generation.aborted) return;
|
|
470
|
+
if (this._voiceSession !== session) throw new MessageNotSentError("The voice session ended before the typed message was recorded");
|
|
471
|
+
this._finishVoiceAssistantMessage(false);
|
|
472
|
+
this._currentAssistantMsg = null;
|
|
473
|
+
await this._commitVoiceUserMessage({
|
|
474
|
+
id: generateId(),
|
|
475
|
+
role: "user",
|
|
476
|
+
content,
|
|
477
|
+
metadata: { custom: { ...enriched.metadata?.custom } },
|
|
478
|
+
createdAt: message.createdAt,
|
|
479
|
+
attachments: []
|
|
480
|
+
});
|
|
481
|
+
}
|
|
482
|
+
_finishVoiceAssistantMessage(notify = true) {
|
|
381
483
|
const last = this._voiceMessages.at(-1);
|
|
382
484
|
if (last?.role === "assistant" && last.status.type === "running") {
|
|
383
485
|
const idx = this._voiceMessages.length - 1;
|
|
@@ -388,11 +490,17 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
388
490
|
reason: "stop"
|
|
389
491
|
}
|
|
390
492
|
};
|
|
493
|
+
this._observeVoiceCommit(this._commitVoiceMessage(this._voiceMessages[idx]));
|
|
494
|
+
this._currentAssistantMsg = null;
|
|
391
495
|
this._markVoiceMessagesDirty();
|
|
392
|
-
this._notifySubscribers();
|
|
496
|
+
if (notify) this._notifySubscribers();
|
|
393
497
|
}
|
|
394
498
|
}
|
|
395
499
|
disconnectVoice() {
|
|
500
|
+
this._disconnectVoice(true);
|
|
501
|
+
}
|
|
502
|
+
_disconnectVoice(fireHook) {
|
|
503
|
+
this._finishVoiceAssistantMessage(false);
|
|
396
504
|
this._currentAssistantMsg = null;
|
|
397
505
|
const unsubs = this._voiceUnsubs.splice(0);
|
|
398
506
|
this._voiceUnsubs = [];
|
|
@@ -403,13 +511,17 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
403
511
|
const stopSpeaking = this.speech && this._isVoiceMessage(this.speech.messageId) ? this._stopSpeaking : void 0;
|
|
404
512
|
this._voiceMessages = [];
|
|
405
513
|
this._markVoiceMessagesDirty();
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
514
|
+
try {
|
|
515
|
+
notifySubscribers([
|
|
516
|
+
...unsubs,
|
|
517
|
+
...stopSpeaking ? [stopSpeaking] : [],
|
|
518
|
+
...session ? [() => session.disconnect()] : [],
|
|
519
|
+
() => notifyEventListeners(this._voiceVolumeSubscribers, void 0, "Voice volume"),
|
|
520
|
+
() => this._notifySubscribers()
|
|
521
|
+
]);
|
|
522
|
+
} finally {
|
|
523
|
+
if (fireHook && session && this._voiceSession === void 0) this._onVoiceDisconnected();
|
|
524
|
+
}
|
|
413
525
|
}
|
|
414
526
|
muteVoice() {
|
|
415
527
|
if (!this._voiceSession) throw new Error("No active voice session");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-thread-runtime-core.js","names":["AppendMessage","ThreadAssistantMessage","ThreadMessage","Unsubscribe","ModelContextProvider","getThreadMessageText","generateId","ExportedMessageRepository","MessageRepository","DefaultThreadComposerRuntimeCore","AddToolResultOptions","ResumeToolCallOptions","RespondToToolApprovalOptions","ThreadSuggestion","SubmitFeedbackOptions","ThreadRuntimeCore","SpeechState","VoiceSessionState","RuntimeCapabilities","ThreadRuntimeEventCallback","ThreadRuntimeEventPayload","ThreadRuntimeEventType","StartRunConfig","ResumeRunConfig","DefaultEditComposerRuntimeCore","SpeechSynthesisAdapter","FeedbackAdapter","AttachmentAdapter","RealtimeVoiceAdapter","ThreadMessageLike","notifyEventListeners","gateInteractableComposerMetadata","BaseSubscribable","notifySubscribers","BaseThreadAdapters","speech","feedback","attachments","voice","BaseThreadRuntimeCore","_isInitialized","repository","adapters","isDisabled","isSendDisabled","isLoading","suggestions","extras","capabilities","append","message","deleteMessage","messageId","Promise","startRun","config","resumeRun","addToolResult","options","resumeToolCall","respondToToolApproval","cancelRun","exportExternalState","importExternalState","state","unstable_notifySessionReset","_voiceMessages","_voiceGeneration","_cachedMergedMessages","_cachedVoiceGeneration","_cachedMergedBase","_markVoiceMessagesDirty","_getBaseMessages","getMessages","messages","length","base","mostRecentAssistantMessage","this","role","metadata","unstable_state","composer","_contextProvider","constructor","getModelContext","enrichAppendMetadata","anchorId","parentId","parentIndex","findIndex","m","id","composerMetadata","unstable_composerMetadata","slice","custom","_editComposers","Map","getEditComposer","get","_isVoiceMessage","some","beginEdit","Error","has","set","delete","getMessage","_notifySubscribers","getMessageById","baseMessages","voiceIdx","at","index","undefined","getBranches","switchToBranch","branchId","_notifyEventSubscribers","event","E","payload","subscribers","_eventSubscribers","_notifyToolApprovalAnswered","toolCallId","toolName","approved","submitFeedback","type","adapter","entry","submit","updatedMessage","submittedFeedback","voiceMessage","addOrUpdateMessage","_currentAssistantMsg","_stopSpeaking","speak","previousStop","utterance","Utterance","error","notificationError","console","unsub","clear","cleanup","stop","cancel","update","status","subscribe","cleanupError","stopSpeaking","_voiceSession","Session","_voiceUnsubs","Array","_voiceVolume","_voiceVolumeSubscribers","Set","getVoiceVolume","subscribeVoiceVolume","callback","add","connectVoice","disconnectVoice","session","connect","unsubs","finishDetachedSetup","splice","currentMode","Mode","isMuted","mode","push","onStatusChange","_finishVoiceAssistantMessage","onModeChange","onVolumeChange","volume","onTranscript","transcript","_handleVoiceTranscript","TranscriptItem","ensureInitialized","isFinal","content","text","modality","createdAt","Date","reason","unstable_annotations","unstable_data","steps","idx","indexOf","updated","last","disconnect","muteVoice","mute","unmuteVoice","unmute","export","import","data","reset","initialMessages","fromArray","unstable_on","wrapped","queueMicrotask"],"sources":["../../../src/runtime/base/base-thread-runtime-core.ts"],"sourcesContent":["import type {\n AppendMessage,\n ThreadAssistantMessage,\n ThreadMessage,\n} from \"../../types/message\";\nimport type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport { getThreadMessageText } from \"../../utils/text\";\nimport { generateId } from \"../../utils/id\";\nimport {\n ExportedMessageRepository,\n MessageRepository,\n} from \"../utils/message-repository\";\nimport { DefaultThreadComposerRuntimeCore } from \"./default-thread-composer-runtime-core\";\nimport type {\n AddToolResultOptions,\n ResumeToolCallOptions,\n RespondToToolApprovalOptions,\n ThreadSuggestion,\n SubmitFeedbackOptions,\n ThreadRuntimeCore,\n SpeechState,\n VoiceSessionState,\n RuntimeCapabilities,\n ThreadRuntimeEventCallback,\n ThreadRuntimeEventPayload,\n ThreadRuntimeEventType,\n StartRunConfig,\n ResumeRunConfig,\n} from \"../interfaces/thread-runtime-core\";\nimport { DefaultEditComposerRuntimeCore } from \"./default-edit-composer-runtime-core\";\nimport type { SpeechSynthesisAdapter } from \"../../adapters/speech\";\nimport type { FeedbackAdapter } from \"../../adapters/feedback\";\nimport type { AttachmentAdapter } from \"../../adapters/attachment\";\nimport type { RealtimeVoiceAdapter } from \"../../adapters/voice\";\nimport type { ThreadMessageLike } from \"../utils/thread-message-like\";\nimport { notifyEventListeners } from \"../../utils/notify-event-listeners\";\nimport { gateInteractableComposerMetadata } from \"../../model-context/interactable-composer-metadata\";\nimport {\n BaseSubscribable,\n notifySubscribers,\n} from \"../../subscribable/subscribable\";\n\ntype BaseThreadAdapters = {\n speech?: SpeechSynthesisAdapter | undefined;\n feedback?: FeedbackAdapter | undefined;\n attachments?: AttachmentAdapter | undefined;\n voice?: RealtimeVoiceAdapter | undefined;\n};\n\nexport abstract class BaseThreadRuntimeCore\n extends BaseSubscribable\n implements ThreadRuntimeCore\n{\n private _isInitialized = false;\n\n protected repository = new MessageRepository();\n public abstract get adapters(): BaseThreadAdapters | undefined;\n public abstract get isDisabled(): boolean;\n public abstract get isSendDisabled(): boolean;\n public abstract get isLoading(): boolean;\n public abstract get suggestions(): readonly ThreadSuggestion[];\n public abstract get extras(): unknown;\n\n public abstract get capabilities(): RuntimeCapabilities;\n public abstract append(message: AppendMessage): void;\n public abstract deleteMessage(messageId: string): void | Promise<void>;\n public abstract startRun(config: StartRunConfig): void;\n public abstract resumeRun(config: ResumeRunConfig): void;\n public abstract addToolResult(options: AddToolResultOptions): void;\n public abstract resumeToolCall(options: ResumeToolCallOptions): void;\n public abstract respondToToolApproval(\n options: RespondToToolApprovalOptions,\n ): Promise<void>;\n public abstract cancelRun(): void;\n public abstract exportExternalState(): any;\n public abstract importExternalState(state: any): void;\n public abstract unstable_notifySessionReset(): void;\n\n protected _voiceMessages: ThreadMessage[] = [];\n protected _voiceGeneration = 0;\n private _cachedMergedMessages: readonly ThreadMessage[] | null = null;\n private _cachedVoiceGeneration = -1;\n private _cachedMergedBase: readonly ThreadMessage[] | null = null;\n\n protected _markVoiceMessagesDirty() {\n this._voiceGeneration++;\n this._cachedMergedMessages = null;\n }\n\n protected _getBaseMessages(): readonly ThreadMessage[] {\n return this.repository.getMessages();\n }\n\n public get messages(): readonly ThreadMessage[] {\n if (this._voiceMessages.length === 0) {\n return this._getBaseMessages();\n }\n const base = this._getBaseMessages();\n if (\n this._cachedVoiceGeneration !== this._voiceGeneration ||\n this._cachedMergedBase !== base\n ) {\n this._cachedMergedMessages = [...base, ...this._voiceMessages];\n this._cachedVoiceGeneration = this._voiceGeneration;\n this._cachedMergedBase = base;\n }\n return this._cachedMergedMessages!;\n }\n\n public get state() {\n let mostRecentAssistantMessage: (typeof this.messages)[number] | undefined;\n for (const message of this.messages) {\n if (message.role === \"assistant\") {\n mostRecentAssistantMessage = message;\n }\n }\n\n return mostRecentAssistantMessage?.metadata.unstable_state ?? null;\n }\n\n public readonly composer = new DefaultThreadComposerRuntimeCore(this);\n\n private readonly _contextProvider: ModelContextProvider;\n\n constructor(_contextProvider: ModelContextProvider) {\n super();\n this._contextProvider = _contextProvider;\n }\n\n public getModelContext() {\n return this._contextProvider.getModelContext();\n }\n\n /**\n * Stamps provider-contributed composer metadata onto an outgoing message.\n * Called at dispatch rather than in the composer, so programmatic sends are\n * covered too, and exactly once per message: a queued send is stamped when\n * it leaves the lane, never when it enters.\n *\n * Only user messages are stamped, matching the readers: both the version\n * fold and the model injection skip every other role.\n *\n * @param anchorId Message the gated branch prefix ends at. A queued send\n * passes the current tail, having waited through a run that grew the prefix\n * past the parent it was created with.\n */\n protected enrichAppendMetadata(\n message: AppendMessage,\n anchorId: string | null = message.parentId,\n ): AppendMessage {\n if (message.role !== \"user\") return message;\n const messages = this.messages;\n const parentIndex =\n anchorId === null ? -1 : messages.findIndex((m) => m.id === anchorId);\n const composerMetadata = gateInteractableComposerMetadata(\n this.getModelContext().unstable_composerMetadata,\n messages.slice(0, parentIndex + 1),\n );\n if (!composerMetadata) return message;\n return {\n ...message,\n metadata: {\n ...message.metadata,\n custom: { ...message.metadata?.custom, ...composerMetadata },\n },\n };\n }\n\n private _editComposers = new Map<string, DefaultEditComposerRuntimeCore>();\n public getEditComposer(messageId: string) {\n return this._editComposers.get(messageId);\n }\n protected _isVoiceMessage(messageId: string | null) {\n return (\n messageId !== null && this._voiceMessages.some((m) => m.id === messageId)\n );\n }\n\n public beginEdit(messageId: string) {\n if (this._isVoiceMessage(messageId)) {\n throw new Error(\"Voice transcript messages cannot be edited\");\n }\n if (this._editComposers.has(messageId))\n throw new Error(\"Edit already in progress\");\n\n this._editComposers.set(\n messageId,\n new DefaultEditComposerRuntimeCore(\n this,\n () => this._editComposers.delete(messageId),\n this.repository.getMessage(messageId),\n ),\n );\n this._notifySubscribers();\n }\n\n public getMessageById(messageId: string) {\n try {\n return this.repository.getMessage(messageId);\n } catch {\n // Check voice messages\n const baseMessages = this.repository.getMessages();\n const voiceIdx = this._voiceMessages.findIndex((m) => m.id === messageId);\n if (voiceIdx !== -1) {\n const parentId =\n voiceIdx > 0\n ? this._voiceMessages[voiceIdx - 1]!.id\n : (baseMessages.at(-1)?.id ?? null);\n return {\n parentId,\n message: this._voiceMessages[voiceIdx]!,\n index: baseMessages.length + voiceIdx,\n };\n }\n return undefined;\n }\n }\n\n public getBranches(messageId: string): string[] {\n if (this._voiceMessages.some((m) => m.id === messageId)) {\n return [];\n }\n return this.repository.getBranches(messageId);\n }\n\n public switchToBranch(branchId: string): void {\n this.repository.switchToBranch(branchId);\n this._notifySubscribers();\n }\n\n public _notifyEventSubscribers<E extends ThreadRuntimeEventType>(\n event: E,\n payload: ThreadRuntimeEventPayload[E],\n ) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n\n notifyEventListeners(subscribers, payload, `Thread runtime \"${event}\"`);\n }\n\n protected _notifyToolApprovalAnswered(\n messageId: string,\n toolCallId: string,\n toolName: string,\n approved: boolean,\n ) {\n this._notifyEventSubscribers(\"toolApprovalAnswered\", {\n messageId,\n toolCallId,\n toolName,\n approved,\n });\n }\n\n public submitFeedback({ messageId, type }: SubmitFeedbackOptions) {\n const adapter = this.adapters?.feedback;\n if (!adapter) throw new Error(\"Feedback adapter not configured\");\n\n const entry = this.getMessageById(messageId);\n if (!entry) throw new Error(`Message not found: ${messageId}`);\n const { message, parentId } = entry;\n adapter.submit({ message, type });\n\n if (message.role === \"assistant\") {\n const updatedMessage: ThreadMessage = {\n ...message,\n metadata: {\n ...message.metadata,\n submittedFeedback: { type },\n },\n };\n const voiceIdx = this._voiceMessages.findIndex(\n (voiceMessage) => voiceMessage.id === messageId,\n );\n if (voiceIdx === -1) {\n this.repository.addOrUpdateMessage(parentId, updatedMessage);\n } else {\n this._voiceMessages[voiceIdx] = updatedMessage;\n if (this._currentAssistantMsg === message) {\n this._currentAssistantMsg = updatedMessage as ThreadAssistantMessage;\n }\n this._markVoiceMessagesDirty();\n }\n }\n\n this._notifySubscribers();\n }\n\n private _stopSpeaking: Unsubscribe | undefined;\n public speech: SpeechState | undefined;\n\n public speak(messageId: string) {\n const adapter = this.adapters?.speech;\n if (!adapter) throw new Error(\"Speech adapter not configured\");\n\n const entry = this.getMessageById(messageId);\n if (!entry) throw new Error(`Message not found: ${messageId}`);\n const { message } = entry;\n\n const previousStop = this._stopSpeaking;\n let utterance: SpeechSynthesisAdapter.Utterance;\n try {\n previousStop?.();\n utterance = adapter.speak(getThreadMessageText(message));\n } catch (error) {\n if (previousStop && !this._stopSpeaking) {\n try {\n this._notifySubscribers();\n } catch (notificationError) {\n console.error(\n \"[assistant-ui] Speech rollback notification threw\",\n notificationError,\n );\n }\n }\n throw error;\n }\n let unsub: Unsubscribe | undefined;\n const clear = () => {\n this._stopSpeaking = undefined;\n this.speech = undefined;\n const cleanup = unsub;\n unsub = undefined;\n cleanup?.();\n };\n const stop = () => {\n if (this._stopSpeaking !== stop) return;\n try {\n clear();\n } finally {\n utterance.cancel();\n }\n };\n const update = () => {\n if (this._stopSpeaking !== stop) return;\n if (utterance.status.type === \"ended\") {\n notifySubscribers([clear, () => this._notifySubscribers()]);\n } else {\n this.speech = { messageId, status: utterance.status };\n this._notifySubscribers();\n }\n };\n\n this._stopSpeaking = stop;\n try {\n unsub = utterance.subscribe(update);\n if (this._stopSpeaking !== stop) {\n unsub();\n return;\n }\n update();\n } catch (error) {\n if (this._stopSpeaking === stop) {\n try {\n notifySubscribers([stop, () => this._notifySubscribers()]);\n } catch (cleanupError) {\n console.error(\n \"[assistant-ui] Speech rollback cleanup threw\",\n cleanupError,\n );\n }\n }\n throw error;\n }\n }\n\n public stopSpeaking() {\n if (!this._stopSpeaking) throw new Error(\"No message is being spoken\");\n notifySubscribers([this._stopSpeaking, () => this._notifySubscribers()]);\n }\n\n private _voiceSession: RealtimeVoiceAdapter.Session | undefined;\n private _voiceUnsubs: Array<() => void> = [];\n public voice: VoiceSessionState | undefined;\n\n private _voiceVolume = 0;\n private _voiceVolumeSubscribers = new Set<() => void>();\n\n public getVoiceVolume = () => this._voiceVolume;\n\n public subscribeVoiceVolume = (callback: () => void): Unsubscribe => {\n this._voiceVolumeSubscribers.add(callback);\n return () => this._voiceVolumeSubscribers.delete(callback);\n };\n\n public connectVoice() {\n const adapter = this.adapters?.voice;\n if (!adapter) throw new Error(\"Voice adapter not configured\");\n\n try {\n this.disconnectVoice();\n } catch (error) {\n console.error(\n \"[assistant-ui] Voice cleanup threw before reconnect\",\n error,\n );\n }\n\n const session = adapter.connect({});\n this._voiceSession = session;\n const unsubs: Array<() => void> = [];\n this._voiceUnsubs = unsubs;\n\n // The cleanup-list identity preserves ownership after an ended status clears the session.\n const finishDetachedSetup = () => {\n if (this._voiceSession === session && this._voiceUnsubs === unsubs) {\n return false;\n }\n\n try {\n notifySubscribers(unsubs.splice(0));\n } catch (error) {\n console.error(\n \"[assistant-ui] Detached voice setup cleanup threw\",\n error,\n );\n }\n return true;\n };\n\n try {\n let currentMode: RealtimeVoiceAdapter.Mode = \"listening\";\n\n this.voice = {\n status: session.status,\n isMuted: session.isMuted,\n mode: currentMode,\n };\n this._voiceVolume = 0;\n this._notifySubscribers();\n if (finishDetachedSetup()) return;\n\n unsubs.push(\n session.onStatusChange((status) => {\n if (status.type === \"ended\") {\n this._finishVoiceAssistantMessage();\n this._voiceSession = undefined;\n this.voice = undefined;\n } else {\n this.voice = {\n status,\n isMuted: session.isMuted,\n mode: currentMode,\n };\n }\n this._notifySubscribers();\n }),\n );\n if (finishDetachedSetup()) return;\n\n unsubs.push(\n session.onModeChange((mode) => {\n currentMode = mode;\n if (this.voice) {\n this.voice = { ...this.voice, mode };\n this._notifySubscribers();\n }\n }),\n );\n if (finishDetachedSetup()) return;\n\n unsubs.push(\n session.onVolumeChange((volume) => {\n this._voiceVolume = volume;\n notifyEventListeners(\n this._voiceVolumeSubscribers,\n undefined,\n \"Voice volume\",\n );\n }),\n );\n if (finishDetachedSetup()) return;\n\n unsubs.push(\n session.onTranscript((transcript) => {\n this._handleVoiceTranscript(transcript);\n }),\n );\n finishDetachedSetup();\n } catch (error) {\n if (this._voiceSession === session && this._voiceUnsubs === unsubs) {\n try {\n this.disconnectVoice();\n } catch (cleanupError) {\n console.error(\n \"[assistant-ui] Voice rollback cleanup threw\",\n cleanupError,\n );\n }\n } else {\n finishDetachedSetup();\n }\n throw error;\n }\n }\n\n private _currentAssistantMsg: ThreadAssistantMessage | null = null;\n\n private _handleVoiceTranscript(\n transcript: RealtimeVoiceAdapter.TranscriptItem,\n ) {\n this.ensureInitialized();\n\n if (transcript.role === \"user\") {\n this._finishVoiceAssistantMessage();\n this._currentAssistantMsg = null;\n\n if (transcript.isFinal) {\n this._voiceMessages.push({\n id: generateId(),\n role: \"user\",\n content: [{ type: \"text\", text: transcript.text }],\n metadata: { modality: \"voice\", custom: {} },\n createdAt: new Date(),\n status: { type: \"complete\", reason: \"unknown\" },\n attachments: [],\n });\n this._markVoiceMessagesDirty();\n this._notifySubscribers();\n }\n } else {\n const status: ThreadAssistantMessage[\"status\"] = transcript.isFinal\n ? { type: \"complete\", reason: \"stop\" }\n : { type: \"running\" };\n\n if (!this._currentAssistantMsg) {\n this._currentAssistantMsg = {\n id: generateId(),\n role: \"assistant\",\n content: [{ type: \"text\", text: transcript.text }],\n metadata: {\n unstable_state: this.state,\n unstable_annotations: [],\n unstable_data: [],\n steps: [],\n modality: \"voice\",\n custom: {},\n },\n status,\n createdAt: new Date(),\n };\n this._voiceMessages.push(this._currentAssistantMsg);\n } else {\n const idx = this._voiceMessages.indexOf(this._currentAssistantMsg);\n if (idx === -1) return;\n const updated: ThreadAssistantMessage = {\n ...this._currentAssistantMsg,\n content: [{ type: \"text\", text: transcript.text }],\n status,\n };\n this._voiceMessages[idx] = updated;\n this._currentAssistantMsg = updated;\n }\n\n if (transcript.isFinal) {\n this._currentAssistantMsg = null;\n }\n\n this._markVoiceMessagesDirty();\n this._notifySubscribers();\n }\n }\n\n private _finishVoiceAssistantMessage() {\n const last = this._voiceMessages.at(-1);\n if (last?.role === \"assistant\" && last.status.type === \"running\") {\n const idx = this._voiceMessages.length - 1;\n this._voiceMessages[idx] = {\n ...(last as ThreadAssistantMessage),\n status: { type: \"complete\", reason: \"stop\" },\n };\n this._markVoiceMessagesDirty();\n this._notifySubscribers();\n }\n }\n\n public disconnectVoice() {\n this._currentAssistantMsg = null;\n // Drain the shared list in place so reentrant setup cannot release the same handles again.\n const unsubs = this._voiceUnsubs.splice(0);\n this._voiceUnsubs = [];\n const session = this._voiceSession;\n this._voiceSession = undefined;\n this.voice = undefined;\n this._voiceVolume = 0;\n const stopSpeaking =\n this.speech && this._isVoiceMessage(this.speech.messageId)\n ? this._stopSpeaking\n : undefined;\n this._voiceMessages = [];\n this._markVoiceMessagesDirty();\n\n notifySubscribers([\n ...unsubs,\n ...(stopSpeaking ? [stopSpeaking] : []),\n ...(session ? [() => session.disconnect()] : []),\n () =>\n notifyEventListeners(\n this._voiceVolumeSubscribers,\n undefined,\n \"Voice volume\",\n ),\n () => this._notifySubscribers(),\n ]);\n }\n\n public muteVoice() {\n if (!this._voiceSession) throw new Error(\"No active voice session\");\n this._voiceSession.mute();\n this.voice = {\n ...this.voice!,\n isMuted: true,\n };\n this._notifySubscribers();\n }\n\n public unmuteVoice() {\n if (!this._voiceSession) throw new Error(\"No active voice session\");\n this._voiceSession.unmute();\n this.voice = {\n ...this.voice!,\n isMuted: false,\n };\n this._notifySubscribers();\n }\n\n protected ensureInitialized() {\n if (!this._isInitialized) {\n this._isInitialized = true;\n this._notifyEventSubscribers(\"initialize\", {});\n }\n }\n\n public export() {\n return this.repository.export();\n }\n\n public import(data: ExportedMessageRepository) {\n this.ensureInitialized();\n this.repository.clear();\n this.repository.import(data);\n this._notifySubscribers();\n }\n\n public reset(initialMessages?: readonly ThreadMessageLike[]) {\n this.import(ExportedMessageRepository.fromArray(initialMessages ?? []));\n }\n\n private _eventSubscribers = new Map<\n ThreadRuntimeEventType,\n Set<(payload?: unknown) => void>\n >();\n\n public unstable_on<E extends ThreadRuntimeEventType>(\n event: E,\n callback: ThreadRuntimeEventCallback<E>,\n ) {\n const wrapped = callback as (payload?: unknown) => void;\n if (event === \"modelContextUpdate\") {\n // provider.subscribe is `() => void`; pump the typed empty payload to the user callback.\n return (\n this._contextProvider.subscribe?.(() =>\n notifyEventListeners([wrapped], {}, `Thread runtime \"${event}\"`),\n ) ?? (() => {})\n );\n }\n\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 // `initialize` latches: replay it (deferred) to subscribers that attach\n // after the thread already initialized, mirroring a BehaviorSubject.\n if (event === \"initialize\" && this._isInitialized) {\n queueMicrotask(() => {\n if (subscribers.has(wrapped)) {\n notifyEventListeners([wrapped], {}, `Thread runtime \"${event}\"`);\n }\n });\n }\n\n return () => {\n this._eventSubscribers.get(event)?.delete(wrapped);\n };\n }\n}\n"],"mappings":";;;;;;;;;AAkDA,IAAsBuC,wBAAtB,cACUP,iBAEV;CACE,iBAAyB;CAEzB,aAAuB,IAAIxB,kBAAkB;CAuB7C,iBAA4C,CAAA;CAC5C,mBAA6B;CAC7B,wBAAiE;CACjE,yBAAiC;CACjC,oBAA6D;CAE7D,0BAAoC;EAClC,KAAK2D;EACL,KAAKC,wBAAwB;CAC/B;CAEA,mBAAuD;EACrD,OAAO,KAAK3B,WAAWgC,YAAY;CACrC;CAEA,IAAWC,WAAqC;EAC9C,IAAI,KAAKR,eAAeS,WAAW,GACjC,OAAO,KAAKH,iBAAiB;EAE/B,MAAMI,OAAO,KAAKJ,iBAAiB;EACnC,IACE,KAAKH,2BAA2B,KAAKF,oBACrC,KAAKG,sBAAsBM,MAC3B;GACA,KAAKR,wBAAwB,CAAC,GAAGQ,MAAM,GAAG,KAAKV,cAAc;GAC7D,KAAKG,yBAAyB,KAAKF;GACnC,KAAKG,oBAAoBM;EAC3B;EACA,OAAO,KAAKR;CACd;CAEA,IAAWJ,QAAQ;EACjB,IAAIa;EACJ,KAAK,MAAM3B,WAAW,KAAKwB,UACzB,IAAIxB,QAAQ6B,SAAS,aACnBF,6BAA6B3B;EAIjC,OAAO2B,4BAA4BG,SAASC,kBAAkB;CAChE;CAEA,WAA2B,IAAIxE,iCAAiC,IAAI;CAEpE;CAEA2E,YAAYD,kBAAwC;EAClD,MAAM;EACN,KAAKA,mBAAmBA;CAC1B;CAEA,kBAAyB;EACvB,OAAO,KAAKA,iBAAiBE,gBAAgB;CAC/C;;;;;;;;;;;;;;CAeA,qBACEnC,SACAqC,WAA0BrC,QAAQsC,UACnB;EACf,IAAItC,QAAQ6B,SAAS,QAAQ,OAAO7B;EACpC,MAAMwB,WAAW,KAAKA;EACtB,MAAMe,cACJF,aAAa,OAAO,KAAKb,SAASgB,WAAWC,MAAMA,EAAEC,OAAOL,QAAQ;EACtE,MAAMM,mBAAmB9D,iCACvB,KAAKsD,gBAAgB,CAAC,CAACS,2BACvBpB,SAASqB,MAAM,GAAGN,cAAc,CAAC,CACnC;EACA,IAAI,CAACI,kBAAkB,OAAO3C;EAC9B,OAAO;GACL,GAAGA;GACH8B,UAAU;IACR,GAAG9B,QAAQ8B;IACXgB,QAAQ;KAAE,GAAG9C,QAAQ8B,UAAUgB;KAAQ,GAAGH;IAAiB;GAC7D;EACF;CACF;CAEA,iCAAyB,IAAIK,IAA4C;CACzE,gBAAuB9C,WAAmB;EACxC,OAAO,KAAK6C,eAAeG,IAAIhD,SAAS;CAC1C;CACA,gBAA0BA,WAA0B;EAClD,OACEA,cAAc,QAAQ,KAAKc,eAAeoC,MAAMX,MAAMA,EAAEC,OAAOxC,SAAS;CAE5E;CAEA,UAAiBA,WAAmB;EAClC,IAAI,KAAKiD,gBAAgBjD,SAAS,GAChC,MAAM,IAAIoD,MAAM,4CAA4C;EAE9D,IAAI,KAAKP,eAAeQ,IAAIrD,SAAS,GACnC,MAAM,IAAIoD,MAAM,0BAA0B;EAE5C,KAAKP,eAAeS,IAClBtD,WACA,IAAI5B,+BACF,YACM,KAAKyE,eAAeU,OAAOvD,SAAS,GAC1C,KAAKX,WAAWmE,WAAWxD,SAAS,CACtC,CACF;EACA,KAAKyD,mBAAmB;CAC1B;CAEA,eAAsBzD,WAAmB;EACvC,IAAI;GACF,OAAO,KAAKX,WAAWmE,WAAWxD,SAAS;EAC7C,QAAQ;GAEN,MAAM2D,eAAe,KAAKtE,WAAWgC,YAAY;GACjD,MAAMuC,WAAW,KAAK9C,eAAewB,WAAWC,MAAMA,EAAEC,OAAOxC,SAAS;GACxE,IAAI4D,aAAa,IAKf,OAAO;IACLxB,UAJAwB,WAAW,IACP,KAAK9C,eAAe8C,WAAW,EAAE,CAAEpB,KAClCmB,aAAaE,GAAG,EAAE,CAAC,EAAErB,MAAM;IAGhC1C,SAAS,KAAKgB,eAAe8C;IAC7BE,OAAOH,aAAapC,SAASqC;GAC/B;GAEF;EACF;CACF;CAEA,YAAmB5D,WAA6B;EAC9C,IAAI,KAAKc,eAAeoC,MAAMX,MAAMA,EAAEC,OAAOxC,SAAS,GACpD,OAAO,CAAA;EAET,OAAO,KAAKX,WAAW2E,YAAYhE,SAAS;CAC9C;CAEA,eAAsBkE,UAAwB;EAC5C,KAAK7E,WAAW4E,eAAeC,QAAQ;EACvC,KAAKT,mBAAmB;CAC1B;CAEA,wBACEW,OACAE,SACA;EACA,MAAMC,cAAc,KAAKC,kBAAkBxB,IAAIoB,KAAK;EACpD,IAAI,CAACG,aAAa;EAElB7F,qBAAqB6F,aAAaD,SAAS,mBAAmBF,MAAK,EAAG;CACxE;CAEA,4BACEpE,WACA0E,YACAC,UACAC,UACA;EACA,KAAKT,wBAAwB,wBAAwB;GACnDnE;GACA0E;GACAC;GACAC;EACF,CAAC;CACH;CAEA,eAAsB,EAAE5E,WAAW8E,QAA+B;EAChE,MAAMC,UAAU,KAAKzF,UAAUN;EAC/B,IAAI,CAAC+F,SAAS,MAAM,IAAI3B,MAAM,iCAAiC;EAE/D,MAAM4B,QAAQ,KAAKtB,eAAe1D,SAAS;EAC3C,IAAI,CAACgF,OAAO,MAAM,IAAI5B,MAAM,sBAAsBpD,WAAW;EAC7D,MAAM,EAAEF,SAASsC,aAAa4C;EAC9BD,QAAQE,OAAO;GAAEnF;GAASgF;EAAK,CAAC;EAEhC,IAAIhF,QAAQ6B,SAAS,aAAa;GAChC,MAAMuD,iBAAgC;IACpC,GAAGpF;IACH8B,UAAU;KACR,GAAG9B,QAAQ8B;KACXuD,mBAAmB,EAAEL,KAAK;IAC5B;GACF;GACA,MAAMlB,WAAW,KAAK9C,eAAewB,WAClC8C,iBAAiBA,aAAa5C,OAAOxC,SACxC;GACA,IAAI4D,aAAa,IACf,KAAKvE,WAAWgG,mBAAmBjD,UAAU8C,cAAc;QACtD;IACL,KAAKpE,eAAe8C,YAAYsB;IAChC,IAAI,KAAKI,yBAAyBxF,SAChC,KAAKwF,uBAAuBJ;IAE9B,KAAK/D,wBAAwB;GAC/B;EACF;EAEA,KAAKsC,mBAAmB;CAC1B;CAEA;CACA;CAEA,MAAazD,WAAmB;EAC9B,MAAM+E,UAAU,KAAKzF,UAAUP;EAC/B,IAAI,CAACgG,SAAS,MAAM,IAAI3B,MAAM,+BAA+B;EAE7D,MAAM4B,QAAQ,KAAKtB,eAAe1D,SAAS;EAC3C,IAAI,CAACgF,OAAO,MAAM,IAAI5B,MAAM,sBAAsBpD,WAAW;EAC7D,MAAM,EAAEF,YAAYkF;EAEpB,MAAMS,eAAe,KAAKF;EAC1B,IAAIG;EACJ,IAAI;GACFD,eAAe;GACfC,YAAYX,QAAQS,MAAMvI,qBAAqB6C,OAAO,CAAC;EACzD,SAAS8F,OAAO;GACd,IAAIH,gBAAgB,CAAC,KAAKF,eACxB,IAAI;IACF,KAAK9B,mBAAmB;GAC1B,SAASoC,mBAAmB;IAC1BC,QAAQF,MACN,qDACAC,iBACF;GACF;GAEF,MAAMD;EACR;EACA,IAAIG;EACJ,MAAMC,cAAc;GAClB,KAAKT,gBAAgBxB,KAAAA;GACrB,KAAKhF,SAASgF,KAAAA;GACd,MAAMkC,UAAUF;GAChBA,QAAQhC,KAAAA;GACRkC,UAAU;EACZ;EACA,MAAMC,aAAa;GACjB,IAAI,KAAKX,kBAAkBW,MAAM;GACjC,IAAI;IACFF,MAAM;GACR,UAAU;IACRN,UAAUS,OAAO;GACnB;EACF;EACA,MAAMC,eAAe;GACnB,IAAI,KAAKb,kBAAkBW,MAAM;GACjC,IAAIR,UAAUW,OAAOvB,SAAS,SAC5BjG,kBAAkB,CAACmH,aAAa,KAAKvC,mBAAmB,CAAC,CAAC;QACrD;IACL,KAAK1E,SAAS;KAAEiB;KAAWqG,QAAQX,UAAUW;IAAO;IACpD,KAAK5C,mBAAmB;GAC1B;EACF;EAEA,KAAK8B,gBAAgBW;EACrB,IAAI;GACFH,QAAQL,UAAUY,UAAUF,MAAM;GAClC,IAAI,KAAKb,kBAAkBW,MAAM;IAC/BH,MAAM;IACN;GACF;GACAK,OAAO;EACT,SAASR,OAAO;GACd,IAAI,KAAKL,kBAAkBW,MACzB,IAAI;IACFrH,kBAAkB,CAACqH,YAAY,KAAKzC,mBAAmB,CAAC,CAAC;GAC3D,SAAS8C,cAAc;IACrBT,QAAQF,MACN,gDACAW,YACF;GACF;GAEF,MAAMX;EACR;CACF;CAEA,eAAsB;EACpB,IAAI,CAAC,KAAKL,eAAe,MAAM,IAAInC,MAAM,4BAA4B;EACrEvE,kBAAkB,CAAC,KAAK0G,qBAAqB,KAAK9B,mBAAmB,CAAC,CAAC;CACzE;CAEA;CACA,eAA0C,CAAA;CAC1C;CAEA,eAAuB;CACvB,0CAAkC,IAAIsD,IAAgB;CAEtD,uBAA8B,KAAKF;CAEnC,wBAA+BK,aAAsC;EACnE,KAAKJ,wBAAwBK,IAAID,QAAQ;EACzC,aAAa,KAAKJ,wBAAwBvD,OAAO2D,QAAQ;CAC3D;CAEA,eAAsB;EACpB,MAAMnC,UAAU,KAAKzF,UAAUJ;EAC/B,IAAI,CAAC6F,SAAS,MAAM,IAAI3B,MAAM,8BAA8B;EAE5D,IAAI;GACF,KAAKiE,gBAAgB;EACvB,SAASzB,OAAO;GACdE,QAAQF,MACN,uDACAA,KACF;EACF;EAEA,MAAM0B,UAAUvC,QAAQwC,QAAQ,CAAC,CAAC;EAClC,KAAKd,gBAAgBa;EACrB,MAAME,SAA4B,CAAA;EAClC,KAAKb,eAAea;EAGpB,MAAMC,4BAA4B;GAChC,IAAI,KAAKhB,kBAAkBa,WAAW,KAAKX,iBAAiBa,QAC1D,OAAO;GAGT,IAAI;IACF3I,kBAAkB2I,OAAOE,OAAO,CAAC,CAAC;GACpC,SAAS9B,OAAO;IACdE,QAAQF,MACN,qDACAA,KACF;GACF;GACA,OAAO;EACT;EAEA,IAAI;GACF,IAAI+B,cAAyC;GAE7C,KAAKzI,QAAQ;IACXmH,QAAQiB,QAAQjB;IAChBwB,SAASP,QAAQO;IACjBC,MAAMH;GACR;GACA,KAAKd,eAAe;GACpB,KAAKpD,mBAAmB;GACxB,IAAIgE,oBAAoB,GAAG;GAE3BD,OAAOO,KACLT,QAAQU,gBAAgB3B,WAAW;IACjC,IAAIA,OAAOvB,SAAS,SAAS;KAC3B,KAAKmD,6BAA6B;KAClC,KAAKxB,gBAAgB1C,KAAAA;KACrB,KAAK7E,QAAQ6E,KAAAA;IACf,OACE,KAAK7E,QAAQ;KACXmH;KACAwB,SAASP,QAAQO;KACjBC,MAAMH;IACR;IAEF,KAAKlE,mBAAmB;GAC1B,CAAC,CACH;GACA,IAAIgE,oBAAoB,GAAG;GAE3BD,OAAOO,KACLT,QAAQY,cAAcJ,SAAS;IAC7BH,cAAcG;IACd,IAAI,KAAK5I,OAAO;KACd,KAAKA,QAAQ;MAAE,GAAG,KAAKA;MAAO4I;KAAK;KACnC,KAAKrE,mBAAmB;IAC1B;GACF,CAAC,CACH;GACA,IAAIgE,oBAAoB,GAAG;GAE3BD,OAAOO,KACLT,QAAQa,gBAAgBC,WAAW;IACjC,KAAKvB,eAAeuB;IACpB1J,qBACE,KAAKoI,yBACL/C,KAAAA,GACA,cACF;GACF,CAAC,CACH;GACA,IAAI0D,oBAAoB,GAAG;GAE3BD,OAAOO,KACLT,QAAQe,cAAcC,eAAe;IACnC,KAAKC,uBAAuBD,UAAU;GACxC,CAAC,CACH;GACAb,oBAAoB;EACtB,SAAS7B,OAAO;GACd,IAAI,KAAKa,kBAAkBa,WAAW,KAAKX,iBAAiBa,QAC1D,IAAI;IACF,KAAKH,gBAAgB;GACvB,SAASd,cAAc;IACrBT,QAAQF,MACN,+CACAW,YACF;GACF;QAEAkB,oBAAoB;GAEtB,MAAM7B;EACR;CACF;CAEA,uBAA8D;CAE9D,uBACE0C,YACA;EACA,KAAKG,kBAAkB;EAEvB,IAAIH,WAAW3G,SAAS,QAAQ;GAC9B,KAAKsG,6BAA6B;GAClC,KAAK3C,uBAAuB;GAE5B,IAAIgD,WAAWI,SAAS;IACtB,KAAK5H,eAAeiH,KAAK;KACvBvF,IAAItF,WAAW;KACfyE,MAAM;KACNgH,SAAS,CAAC;MAAE7D,MAAM;MAAQ8D,MAAMN,WAAWM;KAAK,CAAC;KACjDhH,UAAU;MAAEiH,UAAU;MAASjG,QAAQ,CAAC;KAAE;KAC1CkG,2BAAW,IAAIC,KAAK;KACpB1C,QAAQ;MAAEvB,MAAM;MAAYkE,QAAQ;KAAU;KAC9C/J,aAAa,CAAA;IACf,CAAC;IACD,KAAKkC,wBAAwB;IAC7B,KAAKsC,mBAAmB;GAC1B;EACF,OAAO;GACL,MAAM4C,SAA2CiC,WAAWI,UACxD;IAAE5D,MAAM;IAAYkE,QAAQ;GAAO,IACnC,EAAElE,MAAM,UAAU;GAEtB,IAAI,CAAC,KAAKQ,sBAAsB;IAC9B,KAAKA,uBAAuB;KAC1B9C,IAAItF,WAAW;KACfyE,MAAM;KACNgH,SAAS,CAAC;MAAE7D,MAAM;MAAQ8D,MAAMN,WAAWM;KAAK,CAAC;KACjDhH,UAAU;MACRC,gBAAgB,KAAKjB;MACrBqI,sBAAsB,CAAA;MACtBC,eAAe,CAAA;MACfC,OAAO,CAAA;MACPN,UAAU;MACVjG,QAAQ,CAAC;KACX;KACAyD;KACAyC,2BAAW,IAAIC,KAAK;IACtB;IACA,KAAKjI,eAAeiH,KAAK,KAAKzC,oBAAoB;GACpD,OAAO;IACL,MAAM8D,MAAM,KAAKtI,eAAeuI,QAAQ,KAAK/D,oBAAoB;IACjE,IAAI8D,QAAQ,IAAI;IAChB,MAAME,UAAkC;KACtC,GAAG,KAAKhE;KACRqD,SAAS,CAAC;MAAE7D,MAAM;MAAQ8D,MAAMN,WAAWM;KAAK,CAAC;KACjDvC;IACF;IACA,KAAKvF,eAAesI,OAAOE;IAC3B,KAAKhE,uBAAuBgE;GAC9B;GAEA,IAAIhB,WAAWI,SACb,KAAKpD,uBAAuB;GAG9B,KAAKnE,wBAAwB;GAC7B,KAAKsC,mBAAmB;EAC1B;CACF;CAEA,+BAAuC;EACrC,MAAM8F,OAAO,KAAKzI,eAAe+C,GAAG,EAAE;EACtC,IAAI0F,MAAM5H,SAAS,eAAe4H,KAAKlD,OAAOvB,SAAS,WAAW;GAChE,MAAMsE,MAAM,KAAKtI,eAAeS,SAAS;GACzC,KAAKT,eAAesI,OAAO;IACzB,GAAIG;IACJlD,QAAQ;KAAEvB,MAAM;KAAYkE,QAAQ;IAAO;GAC7C;GACA,KAAK7H,wBAAwB;GAC7B,KAAKsC,mBAAmB;EAC1B;CACF;CAEA,kBAAyB;EACvB,KAAK6B,uBAAuB;EAE5B,MAAMkC,SAAS,KAAKb,aAAae,OAAO,CAAC;EACzC,KAAKf,eAAe,CAAA;EACpB,MAAMW,UAAU,KAAKb;EACrB,KAAKA,gBAAgB1C,KAAAA;EACrB,KAAK7E,QAAQ6E,KAAAA;EACb,KAAK8C,eAAe;EACpB,MAAML,eACJ,KAAKzH,UAAU,KAAKkE,gBAAgB,KAAKlE,OAAOiB,SAAS,IACrD,KAAKuF,gBACLxB,KAAAA;EACN,KAAKjD,iBAAiB,CAAA;EACtB,KAAKK,wBAAwB;EAE7BtC,kBAAkB;GAChB,GAAG2I;GACH,GAAIhB,eAAe,CAACA,YAAY,IAAI,CAAA;GACpC,GAAIc,UAAU,OAAOA,QAAQkC,WAAW,CAAC,IAAI,CAAA;SAE3C9K,qBACE,KAAKoI,yBACL/C,KAAAA,GACA,cACF;SACI,KAAKN,mBAAmB;EAAC,CAChC;CACH;CAEA,YAAmB;EACjB,IAAI,CAAC,KAAKgD,eAAe,MAAM,IAAIrD,MAAM,yBAAyB;EAClE,KAAKqD,cAAciD,KAAK;EACxB,KAAKxK,QAAQ;GACX,GAAG,KAAKA;GACR2I,SAAS;EACX;EACA,KAAKpE,mBAAmB;CAC1B;CAEA,cAAqB;EACnB,IAAI,CAAC,KAAKgD,eAAe,MAAM,IAAIrD,MAAM,yBAAyB;EAClE,KAAKqD,cAAcmD,OAAO;EAC1B,KAAK1K,QAAQ;GACX,GAAG,KAAKA;GACR2I,SAAS;EACX;EACA,KAAKpE,mBAAmB;CAC1B;CAEA,oBAA8B;EAC5B,IAAI,CAAC,KAAKrE,gBAAgB;GACxB,KAAKA,iBAAiB;GACtB,KAAK+E,wBAAwB,cAAc,CAAC,CAAC;EAC/C;CACF;CAEA,SAAgB;EACd,OAAO,KAAK9E,WAAWwK,OAAO;CAChC;CAEA,OAAcE,MAAiC;EAC7C,KAAKtB,kBAAkB;EACvB,KAAKpJ,WAAW2G,MAAM;EACtB,KAAK3G,WAAWyK,OAAOC,IAAI;EAC3B,KAAKtG,mBAAmB;CAC1B;CAEA,MAAawG,iBAAgD;EAC3D,KAAKH,OAAO3M,0BAA0B+M,UAAUD,mBAAmB,CAAA,CAAE,CAAC;CACxE;CAEA,oCAA4B,IAAInH,IAG9B;CAEF,YACEsB,OACA8C,UACA;EACA,MAAMkD,UAAUlD;EAChB,IAAI9C,UAAU,sBAEZ,OACE,KAAKrC,iBAAiBuE,kBACpB5H,qBAAqB,CAAC0L,OAAO,GAAG,CAAC,GAAG,mBAAmBhG,MAAK,EAAG,CACjE,YAAY,CAAC;EAIjB,IAAIG,cAAc,KAAKC,kBAAkBxB,IAAIoB,KAAK;EAClD,IAAI,CAACG,aAAa;GAChBA,8BAAc,IAAIwC,IAAI;GACtB,KAAKvC,kBAAkBlB,IAAIc,OAAOG,WAAW;EAC/C;EACAA,YAAY4C,IAAIiD,OAAO;EAIvB,IAAIhG,UAAU,gBAAgB,KAAKhF,gBACjCiL,qBAAqB;GACnB,IAAI9F,YAAYlB,IAAI+G,OAAO,GACzB1L,qBAAqB,CAAC0L,OAAO,GAAG,CAAC,GAAG,mBAAmBhG,MAAK,EAAG;EAEnE,CAAC;EAGH,aAAa;GACX,KAAKI,kBAAkBxB,IAAIoB,KAAK,CAAC,EAAEb,OAAO6G,OAAO;EACnD;CACF;AACF"}
|
|
1
|
+
{"version":3,"file":"base-thread-runtime-core.js","names":["AppendMessage","TextMessagePart","ThreadAssistantMessage","ThreadMessage","Unsubscribe","ModelContextProvider","getThreadMessageText","generateId","ExportedMessageRepository","MessageRepository","captureThreadRuntimeGeneration","DefaultThreadComposerRuntimeCore","AddToolResultOptions","ResumeToolCallOptions","RespondToToolApprovalOptions","ThreadSuggestion","SubmitFeedbackOptions","ThreadRuntimeCore","SpeechState","VoiceSessionState","RuntimeCapabilities","ThreadRuntimeEventCallback","ThreadRuntimeEventPayload","ThreadRuntimeEventType","StartRunConfig","ResumeRunConfig","DefaultEditComposerRuntimeCore","SpeechSynthesisAdapter","FeedbackAdapter","AttachmentAdapter","RealtimeVoiceAdapter","ThreadMessageLike","notifyEventListeners","MessageNotSentError","gateInteractableComposerMetadata","BaseSubscribable","notifySubscribers","BaseThreadAdapters","speech","feedback","attachments","voice","BaseThreadRuntimeCore","_isInitialized","repository","adapters","isDisabled","isSendDisabled","isLoading","suggestions","extras","capabilities","append","message","deleteMessage","messageId","Promise","startRun","config","resumeRun","addToolResult","options","resumeToolCall","respondToToolApproval","cancelRun","exportExternalState","importExternalState","state","unstable_notifySessionReset","_voiceMessages","_voiceGeneration","_cachedMergedMessages","_cachedVoiceGeneration","_cachedMergedBase","_markVoiceMessagesDirty","_getBaseMessages","getMessages","_commitVoiceMessage","_message","_onMessageMetadataChanged","_previousMessage","_dropVoiceMessage","notify","index","findIndex","voiceMessage","id","splice","_notifySubscribers","messages","length","base","baseMessageIds","Set","map","filter","has","mostRecentAssistantMessage","this","role","metadata","unstable_state","composer","_contextProvider","constructor","getModelContext","enrichAppendMetadata","anchorId","parentId","parentIndex","m","composerMetadata","unstable_composerMetadata","slice","custom","_editComposers","Map","getEditComposer","get","_isVoiceMessage","some","_resolveAppendParent","at","beginEdit","Error","set","delete","getMessage","getMessageById","baseMessages","voiceIdx","undefined","getBranches","switchToBranch","branchId","_notifyEventSubscribers","event","E","payload","subscribers","_eventSubscribers","_notifyToolApprovalAnswered","toolCallId","toolName","approved","submitFeedback","type","comment","adapter","entry","trimmed","trim","submit","updatedMessage","submittedFeedback","addOrUpdateMessage","_currentAssistantMsg","_stopSpeaking","speak","previousStop","utterance","Utterance","error","notificationError","console","unsub","clear","cleanup","stop","cancel","update","status","subscribe","cleanupError","stopSpeaking","_voiceSession","Session","_voiceUnsubs","Array","_voiceVolume","_voiceVolumeSubscribers","getVoiceVolume","subscribeVoiceVolume","callback","add","_onVoiceConnected","_onVoiceDisconnected","_toVoiceSessionState","session","Status","mode","Mode","isMuted","canSendText","sendText","_isRunActive","runtime","isRunning","last","_getVoiceCommitBarrier","generation","aborted","resolve","wake","unsubscribe","removeEventListener","addEventListener","connectVoice","replacing","_disconnectVoice","connect","unsubs","finishDetachedSetup","currentMode","push","onStatusChange","_finishVoiceAssistantMessage","onModeChange","onVolumeChange","volume","onTranscript","transcript","_handleVoiceTranscript","_observeVoiceCommit","commit","catch","TranscriptItem","ensureInitialized","isFinal","_commitVoiceUserMessage","content","text","modality","createdAt","Date","reason","unstable_annotations","unstable_data","steps","idx","indexOf","updated","committed","_appendToVoiceSession","part","sourceId","enriched","notSent","cause","disconnectVoice","fireHook","disconnect","muteVoice","mute","unmuteVoice","unmute","export","import","data","reset","initialMessages","fromArray","unstable_on","wrapped","queueMicrotask"],"sources":["../../../src/runtime/base/base-thread-runtime-core.ts"],"sourcesContent":["import type {\n AppendMessage,\n TextMessagePart,\n ThreadAssistantMessage,\n ThreadMessage,\n} from \"../../types/message\";\nimport type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport { getThreadMessageText } from \"../../utils/text\";\nimport { generateId } from \"../../utils/id\";\nimport {\n ExportedMessageRepository,\n MessageRepository,\n} from \"../utils/message-repository\";\nimport { captureThreadRuntimeGeneration } from \"../utils/thread-runtime-lifecycle\";\nimport { DefaultThreadComposerRuntimeCore } from \"./default-thread-composer-runtime-core\";\nimport type {\n AddToolResultOptions,\n ResumeToolCallOptions,\n RespondToToolApprovalOptions,\n ThreadSuggestion,\n SubmitFeedbackOptions,\n ThreadRuntimeCore,\n SpeechState,\n VoiceSessionState,\n RuntimeCapabilities,\n ThreadRuntimeEventCallback,\n ThreadRuntimeEventPayload,\n ThreadRuntimeEventType,\n StartRunConfig,\n ResumeRunConfig,\n} from \"../interfaces/thread-runtime-core\";\nimport { DefaultEditComposerRuntimeCore } from \"./default-edit-composer-runtime-core\";\nimport type { SpeechSynthesisAdapter } from \"../../adapters/speech\";\nimport type { FeedbackAdapter } from \"../../adapters/feedback\";\nimport type { AttachmentAdapter } from \"../../adapters/attachment\";\nimport type { RealtimeVoiceAdapter } from \"../../adapters/voice\";\nimport type { ThreadMessageLike } from \"../utils/thread-message-like\";\nimport { notifyEventListeners } from \"../../utils/notify-event-listeners\";\nimport { MessageNotSentError } from \"../../types/error\";\nimport { gateInteractableComposerMetadata } from \"../../model-context/interactable-composer-metadata\";\nimport {\n BaseSubscribable,\n notifySubscribers,\n} from \"../../subscribable/subscribable\";\n\ntype BaseThreadAdapters = {\n speech?: SpeechSynthesisAdapter | undefined;\n feedback?: FeedbackAdapter | undefined;\n attachments?: AttachmentAdapter | undefined;\n voice?: RealtimeVoiceAdapter | undefined;\n};\n\nexport abstract class BaseThreadRuntimeCore\n extends BaseSubscribable\n implements ThreadRuntimeCore\n{\n private _isInitialized = false;\n\n protected repository = new MessageRepository();\n public abstract get adapters(): BaseThreadAdapters | undefined;\n public abstract get isDisabled(): boolean;\n public abstract get isSendDisabled(): boolean;\n public abstract get isLoading(): boolean;\n public abstract get suggestions(): readonly ThreadSuggestion[];\n public abstract get extras(): unknown;\n\n public abstract get capabilities(): RuntimeCapabilities;\n public abstract append(message: AppendMessage): void;\n public abstract deleteMessage(messageId: string): void | Promise<void>;\n public abstract startRun(config: StartRunConfig): void;\n public abstract resumeRun(config: ResumeRunConfig): void;\n public abstract addToolResult(options: AddToolResultOptions): void;\n public abstract resumeToolCall(options: ResumeToolCallOptions): void;\n public abstract respondToToolApproval(\n options: RespondToToolApprovalOptions,\n ): Promise<void>;\n public abstract cancelRun(): void;\n public abstract exportExternalState(): any;\n public abstract importExternalState(state: any): void;\n public abstract unstable_notifySessionReset(): void;\n\n protected _voiceMessages: ThreadMessage[] = [];\n protected _voiceGeneration = 0;\n private _cachedMergedMessages: readonly ThreadMessage[] | null = null;\n private _cachedVoiceGeneration = -1;\n private _cachedMergedBase: readonly ThreadMessage[] | null = null;\n\n protected _markVoiceMessagesDirty() {\n this._voiceGeneration++;\n this._cachedMergedMessages = null;\n }\n\n protected _getBaseMessages(): readonly ThreadMessage[] {\n return this.repository.getMessages();\n }\n\n protected _commitVoiceMessage(\n _message: ThreadMessage,\n ): void | Promise<void> {}\n\n protected _onMessageMetadataChanged(\n _previousMessage: ThreadAssistantMessage,\n _message: ThreadAssistantMessage,\n ): void {}\n\n protected _dropVoiceMessage(messageId: string, notify: boolean) {\n const index = this._voiceMessages.findIndex(\n (voiceMessage) => voiceMessage.id === messageId,\n );\n if (index === -1) return;\n this._voiceMessages.splice(index, 1);\n this._markVoiceMessagesDirty();\n if (notify) this._notifySubscribers();\n }\n\n public get messages(): readonly ThreadMessage[] {\n if (this._voiceMessages.length === 0) {\n return this._getBaseMessages();\n }\n const base = this._getBaseMessages();\n if (\n this._cachedVoiceGeneration !== this._voiceGeneration ||\n this._cachedMergedBase !== base\n ) {\n const baseMessageIds = new Set(base.map((message) => message.id));\n this._cachedMergedMessages = [\n ...base,\n ...this._voiceMessages.filter(\n (message) => !baseMessageIds.has(message.id),\n ),\n ];\n this._cachedVoiceGeneration = this._voiceGeneration;\n this._cachedMergedBase = base;\n }\n return this._cachedMergedMessages!;\n }\n\n public get state() {\n let mostRecentAssistantMessage: (typeof this.messages)[number] | undefined;\n for (const message of this.messages) {\n if (message.role === \"assistant\") {\n mostRecentAssistantMessage = message;\n }\n }\n\n return mostRecentAssistantMessage?.metadata.unstable_state ?? null;\n }\n\n public readonly composer = new DefaultThreadComposerRuntimeCore(this);\n\n private readonly _contextProvider: ModelContextProvider;\n\n constructor(_contextProvider: ModelContextProvider) {\n super();\n this._contextProvider = _contextProvider;\n }\n\n public getModelContext() {\n return this._contextProvider.getModelContext();\n }\n\n /**\n * Stamps provider-contributed composer metadata onto an outgoing message.\n * Called at dispatch rather than in the composer, so programmatic sends are\n * covered too, and exactly once per message: a queued send is stamped when\n * it leaves the lane, never when it enters.\n *\n * Only user messages are stamped, matching the readers: both the version\n * fold and the model injection skip every other role.\n *\n * @param anchorId Message the gated branch prefix ends at. A queued send\n * passes the current tail, having waited through a run that grew the prefix\n * past the parent it was created with.\n */\n protected enrichAppendMetadata(\n message: AppendMessage,\n anchorId: string | null = message.parentId,\n ): AppendMessage {\n if (message.role !== \"user\") return message;\n const messages = this.messages;\n const parentIndex =\n anchorId === null ? -1 : messages.findIndex((m) => m.id === anchorId);\n const composerMetadata = gateInteractableComposerMetadata(\n this.getModelContext().unstable_composerMetadata,\n messages.slice(0, parentIndex + 1),\n );\n if (!composerMetadata) return message;\n return {\n ...message,\n metadata: {\n ...message.metadata,\n custom: { ...message.metadata?.custom, ...composerMetadata },\n },\n };\n }\n\n private _editComposers = new Map<string, DefaultEditComposerRuntimeCore>();\n public getEditComposer(messageId: string) {\n return this._editComposers.get(messageId);\n }\n protected _isVoiceMessage(messageId: string | null) {\n return (\n messageId !== null && this._voiceMessages.some((m) => m.id === messageId)\n );\n }\n\n protected _resolveAppendParent(parentId: string | null): string | null {\n return this._isVoiceMessage(parentId)\n ? (this._getBaseMessages().at(-1)?.id ?? null)\n : parentId;\n }\n\n public beginEdit(messageId: string) {\n if (this.voice)\n throw new Error(\n \"Cannot edit a message while a voice session is connected\",\n );\n if (this._isVoiceMessage(messageId)) {\n throw new Error(\"Voice transcript messages cannot be edited\");\n }\n if (this._editComposers.has(messageId))\n throw new Error(\"Edit already in progress\");\n\n this._editComposers.set(\n messageId,\n new DefaultEditComposerRuntimeCore(\n this,\n () => this._editComposers.delete(messageId),\n this.repository.getMessage(messageId),\n ),\n );\n this._notifySubscribers();\n }\n\n public getMessageById(messageId: string) {\n try {\n return this.repository.getMessage(messageId);\n } catch {\n // Check voice messages\n const baseMessages = this.repository.getMessages();\n const voiceIdx = this._voiceMessages.findIndex((m) => m.id === messageId);\n if (voiceIdx !== -1) {\n const parentId =\n voiceIdx > 0\n ? this._voiceMessages[voiceIdx - 1]!.id\n : (baseMessages.at(-1)?.id ?? null);\n return {\n parentId,\n message: this._voiceMessages[voiceIdx]!,\n index: baseMessages.length + voiceIdx,\n };\n }\n return undefined;\n }\n }\n\n public getBranches(messageId: string): string[] {\n if (this._voiceMessages.some((m) => m.id === messageId)) {\n return [];\n }\n return this.repository.getBranches(messageId);\n }\n\n public switchToBranch(branchId: string): void {\n this.repository.switchToBranch(branchId);\n this._notifySubscribers();\n }\n\n public _notifyEventSubscribers<E extends ThreadRuntimeEventType>(\n event: E,\n payload: ThreadRuntimeEventPayload[E],\n ) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n\n notifyEventListeners(subscribers, payload, `Thread runtime \"${event}\"`);\n }\n\n protected _notifyToolApprovalAnswered(\n messageId: string,\n toolCallId: string,\n toolName: string,\n approved: boolean,\n ) {\n this._notifyEventSubscribers(\"toolApprovalAnswered\", {\n messageId,\n toolCallId,\n toolName,\n approved,\n });\n }\n\n public submitFeedback({ messageId, type, comment }: SubmitFeedbackOptions) {\n const adapter = this.adapters?.feedback;\n const entry = this.getMessageById(messageId);\n if (!entry) throw new Error(`Message not found: ${messageId}`);\n const { message, parentId } = entry;\n const trimmed = comment?.trim();\n const feedback = { type, ...(trimmed ? { comment: trimmed } : undefined) };\n adapter?.submit({ message, ...feedback });\n\n if (message.role === \"assistant\") {\n const updatedMessage: ThreadAssistantMessage = {\n ...message,\n metadata: {\n ...message.metadata,\n submittedFeedback: feedback,\n },\n };\n const voiceIdx = this._voiceMessages.findIndex(\n (voiceMessage) => voiceMessage.id === messageId,\n );\n if (voiceIdx === -1) {\n this.repository.addOrUpdateMessage(parentId, updatedMessage);\n this._onMessageMetadataChanged(message, updatedMessage);\n } else {\n this._voiceMessages[voiceIdx] = updatedMessage;\n if (this._currentAssistantMsg === message) {\n this._currentAssistantMsg = updatedMessage;\n }\n this._markVoiceMessagesDirty();\n }\n }\n\n this._notifySubscribers();\n }\n\n private _stopSpeaking: Unsubscribe | undefined;\n public speech: SpeechState | undefined;\n\n public speak(messageId: string) {\n const adapter = this.adapters?.speech;\n if (!adapter) throw new Error(\"Speech adapter not configured\");\n\n const entry = this.getMessageById(messageId);\n if (!entry) throw new Error(`Message not found: ${messageId}`);\n const { message } = entry;\n\n const previousStop = this._stopSpeaking;\n let utterance: SpeechSynthesisAdapter.Utterance;\n try {\n previousStop?.();\n utterance = adapter.speak(getThreadMessageText(message));\n } catch (error) {\n if (previousStop && !this._stopSpeaking) {\n try {\n this._notifySubscribers();\n } catch (notificationError) {\n console.error(\n \"[assistant-ui] Speech rollback notification threw\",\n notificationError,\n );\n }\n }\n throw error;\n }\n let unsub: Unsubscribe | undefined;\n const clear = () => {\n this._stopSpeaking = undefined;\n this.speech = undefined;\n const cleanup = unsub;\n unsub = undefined;\n cleanup?.();\n };\n const stop = () => {\n if (this._stopSpeaking !== stop) return;\n try {\n clear();\n } finally {\n utterance.cancel();\n }\n };\n const update = () => {\n if (this._stopSpeaking !== stop) return;\n if (utterance.status.type === \"ended\") {\n notifySubscribers([clear, () => this._notifySubscribers()]);\n } else {\n this.speech = { messageId, status: utterance.status };\n this._notifySubscribers();\n }\n };\n\n this._stopSpeaking = stop;\n try {\n unsub = utterance.subscribe(update);\n if (this._stopSpeaking !== stop) {\n unsub();\n return;\n }\n update();\n } catch (error) {\n if (this._stopSpeaking === stop) {\n try {\n notifySubscribers([stop, () => this._notifySubscribers()]);\n } catch (cleanupError) {\n console.error(\n \"[assistant-ui] Speech rollback cleanup threw\",\n cleanupError,\n );\n }\n }\n throw error;\n }\n }\n\n public stopSpeaking() {\n if (!this._stopSpeaking) throw new Error(\"No message is being spoken\");\n notifySubscribers([this._stopSpeaking, () => this._notifySubscribers()]);\n }\n\n private _voiceSession: RealtimeVoiceAdapter.Session | undefined;\n private _voiceUnsubs: Array<() => void> = [];\n public voice: VoiceSessionState | undefined;\n\n private _voiceVolume = 0;\n private _voiceVolumeSubscribers = new Set<() => void>();\n\n public getVoiceVolume = () => this._voiceVolume;\n\n public subscribeVoiceVolume = (callback: () => void): Unsubscribe => {\n this._voiceVolumeSubscribers.add(callback);\n return () => this._voiceVolumeSubscribers.delete(callback);\n };\n\n protected _onVoiceConnected(): void {}\n\n protected _onVoiceDisconnected(): void {}\n\n private _toVoiceSessionState(\n session: RealtimeVoiceAdapter.Session,\n status: RealtimeVoiceAdapter.Status,\n mode: RealtimeVoiceAdapter.Mode,\n ): VoiceSessionState {\n return {\n status,\n isMuted: session.isMuted,\n mode,\n canSendText: status.type === \"running\" && session.sendText !== undefined,\n };\n }\n\n protected _isRunActive(): boolean {\n const runtime: ThreadRuntimeCore = this;\n if (runtime.isRunning) return true;\n const last = this._getBaseMessages().at(-1);\n return (\n last?.role === \"assistant\" &&\n (last.status.type === \"running\" || last.status.type === \"requires-action\")\n );\n }\n\n /**\n * Waits for a pending history import before a voice message is committed.\n * The import may begin before or after the voice session connects, so the\n * loading state must be rechecked when the commit is ready to run. The wait\n * also ends when the runtime is invalidated, since a superseded runtime may\n * never learn that loading ended.\n */\n protected _getVoiceCommitBarrier(): Promise<void> | undefined {\n if (!this.isLoading) return undefined;\n const generation = captureThreadRuntimeGeneration(this);\n return (async () => {\n while (this.isLoading && !generation.aborted) {\n await new Promise<void>((resolve) => {\n const wake = () => {\n unsubscribe();\n generation.removeEventListener(\"abort\", wake);\n resolve();\n };\n const unsubscribe = this.subscribe(wake);\n generation.addEventListener(\"abort\", wake);\n });\n }\n })();\n }\n\n public connectVoice() {\n const adapter = this.adapters?.voice;\n if (!adapter) throw new Error(\"Voice adapter not configured\");\n if (this._isRunActive())\n throw new Error(\n \"Cannot start a voice session while a run is in progress or paused on a pending tool action\",\n );\n const replacing = this._voiceSession !== undefined;\n\n try {\n this._disconnectVoice(false);\n } catch (error) {\n console.error(\n \"[assistant-ui] Voice cleanup threw before reconnect\",\n error,\n );\n }\n\n let session: RealtimeVoiceAdapter.Session;\n try {\n session = adapter.connect({});\n } catch (error) {\n if (replacing && this._voiceSession === undefined)\n this._onVoiceDisconnected();\n throw error;\n }\n this._voiceSession = session;\n const unsubs: Array<() => void> = [];\n this._voiceUnsubs = unsubs;\n\n // The cleanup-list identity preserves ownership after an ended status clears the session.\n const finishDetachedSetup = () => {\n if (this._voiceSession === session && this._voiceUnsubs === unsubs) {\n return false;\n }\n\n try {\n notifySubscribers(unsubs.splice(0));\n } catch (error) {\n console.error(\n \"[assistant-ui] Detached voice setup cleanup threw\",\n error,\n );\n }\n return true;\n };\n\n try {\n let currentMode: RealtimeVoiceAdapter.Mode = \"listening\";\n\n this.voice = this._toVoiceSessionState(\n session,\n session.status,\n currentMode,\n );\n this._voiceVolume = 0;\n this._notifySubscribers();\n if (finishDetachedSetup()) return;\n\n unsubs.push(\n session.onStatusChange((status) => {\n if (this._voiceSession !== session) return;\n if (status.type === \"ended\") {\n this._finishVoiceAssistantMessage();\n this._voiceSession = undefined;\n this.voice = undefined;\n this._onVoiceDisconnected();\n } else {\n this.voice = this._toVoiceSessionState(\n session,\n status,\n currentMode,\n );\n }\n this._notifySubscribers();\n }),\n );\n if (finishDetachedSetup()) return;\n\n unsubs.push(\n session.onModeChange((mode) => {\n if (this._voiceSession !== session) return;\n currentMode = mode;\n if (this.voice) {\n this.voice = { ...this.voice, mode };\n this._notifySubscribers();\n }\n }),\n );\n if (finishDetachedSetup()) return;\n\n unsubs.push(\n session.onVolumeChange((volume) => {\n if (this._voiceSession !== session) return;\n this._voiceVolume = volume;\n notifyEventListeners(\n this._voiceVolumeSubscribers,\n undefined,\n \"Voice volume\",\n );\n }),\n );\n if (finishDetachedSetup()) return;\n\n unsubs.push(\n session.onTranscript((transcript) => {\n if (this._voiceSession !== session) return;\n this._handleVoiceTranscript(transcript);\n }),\n );\n if (!finishDetachedSetup()) this._onVoiceConnected();\n } catch (error) {\n if (this._voiceSession === session && this._voiceUnsubs === unsubs) {\n try {\n this._disconnectVoice(false);\n } catch (cleanupError) {\n console.error(\n \"[assistant-ui] Voice rollback cleanup threw\",\n cleanupError,\n );\n }\n if (replacing && this._voiceSession === undefined)\n this._onVoiceDisconnected();\n } else {\n finishDetachedSetup();\n }\n throw error;\n }\n }\n\n private _currentAssistantMsg: ThreadAssistantMessage | null = null;\n\n private _observeVoiceCommit(commit: void | Promise<void>) {\n void Promise.resolve(commit).catch((error) => {\n console.error(\"[assistant-ui] Voice message commit failed\", error);\n });\n }\n\n private _handleVoiceTranscript(\n transcript: RealtimeVoiceAdapter.TranscriptItem,\n ) {\n this.ensureInitialized();\n\n if (transcript.role === \"user\") {\n this._finishVoiceAssistantMessage();\n this._currentAssistantMsg = null;\n\n if (transcript.isFinal) {\n this._observeVoiceCommit(\n this._commitVoiceUserMessage({\n id: generateId(),\n role: \"user\",\n content: [{ type: \"text\", text: transcript.text }],\n metadata: { modality: \"voice\", custom: {} },\n createdAt: new Date(),\n attachments: [],\n }),\n );\n }\n } else {\n const status: ThreadAssistantMessage[\"status\"] = transcript.isFinal\n ? { type: \"complete\", reason: \"stop\" }\n : { type: \"running\" };\n\n if (!this._currentAssistantMsg) {\n this._currentAssistantMsg = {\n id: generateId(),\n role: \"assistant\",\n content: [{ type: \"text\", text: transcript.text }],\n metadata: {\n unstable_state: this.state,\n unstable_annotations: [],\n unstable_data: [],\n steps: [],\n modality: \"voice\",\n custom: {},\n },\n status,\n createdAt: new Date(),\n };\n this._voiceMessages.push(this._currentAssistantMsg);\n } else {\n const idx = this._voiceMessages.indexOf(this._currentAssistantMsg);\n if (idx === -1) return;\n const updated: ThreadAssistantMessage = {\n ...this._currentAssistantMsg,\n content: [{ type: \"text\", text: transcript.text }],\n status,\n };\n this._voiceMessages[idx] = updated;\n this._currentAssistantMsg = updated;\n }\n\n if (transcript.isFinal) {\n this._observeVoiceCommit(\n this._commitVoiceMessage(this._currentAssistantMsg),\n );\n this._currentAssistantMsg = null;\n }\n\n this._markVoiceMessagesDirty();\n this._notifySubscribers();\n }\n }\n\n private _commitVoiceUserMessage(message: ThreadMessage) {\n this._voiceMessages.push(message);\n const committed = this._commitVoiceMessage(message);\n this._markVoiceMessagesDirty();\n this._notifySubscribers();\n return committed;\n }\n\n protected async _appendToVoiceSession(message: AppendMessage) {\n const session = this._voiceSession;\n if (!this.voice?.canSendText || !session?.sendText)\n throw new Error(\n \"Cannot send a text message while a voice session is connected\",\n );\n const content = message.content.filter(\n (part): part is TextMessagePart => part.type === \"text\",\n );\n if (\n message.role !== \"user\" ||\n message.sourceId != null ||\n message.parentId !==\n this._resolveAppendParent(this.messages.at(-1)?.id ?? null) ||\n message.attachments?.length ||\n content.length !== message.content.length ||\n !content.some((part) => part.text.trim())\n )\n throw new Error(\n \"Only a plain text user message can be sent while a voice session is connected\",\n );\n\n const enriched = this.enrichAppendMetadata(message);\n this.ensureInitialized();\n const generation = captureThreadRuntimeGeneration(this);\n try {\n await session.sendText(getThreadMessageText(message));\n } catch (error) {\n if (generation.aborted) return;\n const notSent = new MessageNotSentError();\n notSent.cause = error;\n throw notSent;\n }\n if (generation.aborted) return;\n if (this._voiceSession !== session)\n throw new MessageNotSentError(\n \"The voice session ended before the typed message was recorded\",\n );\n this._finishVoiceAssistantMessage(false);\n this._currentAssistantMsg = null;\n await this._commitVoiceUserMessage({\n id: generateId(),\n role: \"user\",\n content,\n metadata: { custom: { ...enriched.metadata?.custom } },\n createdAt: message.createdAt,\n attachments: [],\n });\n }\n\n private _finishVoiceAssistantMessage(notify = true) {\n const last = this._voiceMessages.at(-1);\n if (last?.role === \"assistant\" && last.status.type === \"running\") {\n const idx = this._voiceMessages.length - 1;\n this._voiceMessages[idx] = {\n ...(last as ThreadAssistantMessage),\n status: { type: \"complete\", reason: \"stop\" },\n };\n this._observeVoiceCommit(\n this._commitVoiceMessage(this._voiceMessages[idx]!),\n );\n this._currentAssistantMsg = null;\n this._markVoiceMessagesDirty();\n if (notify) this._notifySubscribers();\n }\n }\n\n public disconnectVoice() {\n this._disconnectVoice(true);\n }\n\n private _disconnectVoice(fireHook: boolean) {\n this._finishVoiceAssistantMessage(false);\n this._currentAssistantMsg = null;\n // Drain the shared list in place so reentrant setup cannot release the same handles again.\n const unsubs = this._voiceUnsubs.splice(0);\n this._voiceUnsubs = [];\n const session = this._voiceSession;\n this._voiceSession = undefined;\n this.voice = undefined;\n this._voiceVolume = 0;\n const stopSpeaking =\n this.speech && this._isVoiceMessage(this.speech.messageId)\n ? this._stopSpeaking\n : undefined;\n this._voiceMessages = [];\n this._markVoiceMessagesDirty();\n\n try {\n notifySubscribers([\n ...unsubs,\n ...(stopSpeaking ? [stopSpeaking] : []),\n ...(session ? [() => session.disconnect()] : []),\n () =>\n notifyEventListeners(\n this._voiceVolumeSubscribers,\n undefined,\n \"Voice volume\",\n ),\n () => this._notifySubscribers(),\n ]);\n } finally {\n if (fireHook && session && this._voiceSession === undefined)\n this._onVoiceDisconnected();\n }\n }\n\n public muteVoice() {\n if (!this._voiceSession) throw new Error(\"No active voice session\");\n this._voiceSession.mute();\n this.voice = {\n ...this.voice!,\n isMuted: true,\n };\n this._notifySubscribers();\n }\n\n public unmuteVoice() {\n if (!this._voiceSession) throw new Error(\"No active voice session\");\n this._voiceSession.unmute();\n this.voice = {\n ...this.voice!,\n isMuted: false,\n };\n this._notifySubscribers();\n }\n\n protected ensureInitialized() {\n if (!this._isInitialized) {\n this._isInitialized = true;\n this._notifyEventSubscribers(\"initialize\", {});\n }\n }\n\n public export() {\n return this.repository.export();\n }\n\n public import(data: ExportedMessageRepository) {\n this.ensureInitialized();\n this.repository.clear();\n this.repository.import(data);\n this._notifySubscribers();\n }\n\n public reset(initialMessages?: readonly ThreadMessageLike[]) {\n this.import(ExportedMessageRepository.fromArray(initialMessages ?? []));\n }\n\n private _eventSubscribers = new Map<\n ThreadRuntimeEventType,\n Set<(payload?: unknown) => void>\n >();\n\n public unstable_on<E extends ThreadRuntimeEventType>(\n event: E,\n callback: ThreadRuntimeEventCallback<E>,\n ) {\n const wrapped = callback as (payload?: unknown) => void;\n if (event === \"modelContextUpdate\") {\n // provider.subscribe is `() => void`; pump the typed empty payload to the user callback.\n return (\n this._contextProvider.subscribe?.(() =>\n notifyEventListeners([wrapped], {}, `Thread runtime \"${event}\"`),\n ) ?? (() => {})\n );\n }\n\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 // `initialize` latches: replay it (deferred) to subscribers that attach\n // after the thread already initialized, mirroring a BehaviorSubject.\n if (event === \"initialize\" && this._isInitialized) {\n queueMicrotask(() => {\n if (subscribers.has(wrapped)) {\n notifyEventListeners([wrapped], {}, `Thread runtime \"${event}\"`);\n }\n });\n }\n\n return () => {\n this._eventSubscribers.get(event)?.delete(wrapped);\n };\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,34 +1,33 @@
|
|
|
1
|
-
import { AppendMessage, ThreadMessage } from "../../types/message.js";
|
|
2
|
-
import { AttachmentAdapter } from "../../adapters/attachment.js";
|
|
3
|
-
import { DictationAdapter } from "../../adapters/speech.js";
|
|
4
|
-
import { SendOptions } from "../interfaces/composer-runtime-core.js";
|
|
5
|
-
import { ThreadRuntimeCore } from "../interfaces/thread-runtime-core.js";
|
|
1
|
+
import type { AppendMessage, ThreadMessage } from "../../types/message.js";
|
|
2
|
+
import type { AttachmentAdapter } from "../../adapters/attachment.js";
|
|
3
|
+
import type { DictationAdapter } from "../../adapters/speech.js";
|
|
4
|
+
import type { SendOptions } from "../interfaces/composer-runtime-core.js";
|
|
5
|
+
import type { ThreadRuntimeCore } from "../interfaces/thread-runtime-core.js";
|
|
6
6
|
import { BaseComposerRuntimeCore } from "./base-composer-runtime-core.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
7
|
+
export declare class DefaultEditComposerRuntimeCore extends BaseComposerRuntimeCore {
|
|
8
|
+
get canCancel(): boolean;
|
|
9
|
+
protected get detachesDraftOnSend(): boolean;
|
|
10
|
+
get canSend(): boolean;
|
|
11
|
+
protected getAttachmentAdapter(): AttachmentAdapter | undefined;
|
|
12
|
+
protected getDictationAdapter(): DictationAdapter | undefined;
|
|
13
|
+
private _nonTextPassthrough;
|
|
14
|
+
private _parentId;
|
|
15
|
+
private _sourceId;
|
|
16
|
+
private runtime;
|
|
17
|
+
private endEditCallback;
|
|
18
|
+
private _ended;
|
|
19
|
+
constructor(runtime: ThreadRuntimeCore & {
|
|
20
|
+
adapters?: {
|
|
21
|
+
attachments?: AttachmentAdapter | undefined;
|
|
22
|
+
dictation?: DictationAdapter | undefined;
|
|
23
|
+
} | undefined;
|
|
24
|
+
}, endEditCallback: () => void, { parentId, message }: {
|
|
25
|
+
parentId: string | null;
|
|
26
|
+
message: ThreadMessage;
|
|
27
|
+
});
|
|
28
|
+
get parentId(): string | null;
|
|
29
|
+
get sourceId(): string | null;
|
|
30
|
+
handleSend(message: Omit<AppendMessage, "parentId" | "sourceId">, options?: SendOptions): Promise<void>;
|
|
31
|
+
handleCancel(): void;
|
|
31
32
|
}
|
|
32
|
-
//#endregion
|
|
33
|
-
export { DefaultEditComposerRuntimeCore };
|
|
34
33
|
//# sourceMappingURL=default-edit-composer-runtime-core.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-edit-composer-runtime-core.d.ts","
|
|
1
|
+
{"version":3,"file":"default-edit-composer-runtime-core.d.ts","sourceRoot":"","sources":["../../../src/runtime/base/default-edit-composer-runtime-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,+BAA4B;AAIxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,qCAAkC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,iCAA8B;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,+CAA4C;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,6CAA0C;AAC3E,OAAO,EAAE,uBAAuB,EAAE,wCAAqC;AAEvE,qBAAa,8BAA+B,SAAQ,uBAAuB;IACzE,IAAW,SAAS,YAEnB;IAID,cAAuB,mBAAmB,YAEzC;IAED,IAAW,OAAO,YAEjB;IAED,SAAS,CAAC,oBAAoB;IAI9B,SAAS,CAAC,mBAAmB;IAI7B,OAAO,CAAC,mBAAmB,CAA8C;IACzE,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,OAAO,CAOb;IACF,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,MAAM,CAAS;gBAGrB,OAAO,EAAE,iBAAiB,GAAG;QAC3B,QAAQ,CAAC,EACL;YACE,WAAW,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;YAC5C,SAAS,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;SAC1C,GACD,SAAS,CAAC;KACf,EACD,eAAe,EAAE,MAAM,IAAI,EAC3B,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,aAAa,CAAA;KAAE;IAuC5E,IAAW,QAAQ,kBAElB;IAED,IAAW,QAAQ,kBAElB;IAEY,UAAU,CACrB,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,GAAG,UAAU,CAAC,EACrD,OAAO,CAAC,EAAE,WAAW;IAqBhB,YAAY;CASpB"}
|