@assistant-ui/core 0.3.20 → 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 +42 -34
- package/dist/adapters/attachment.d.ts.map +1 -1
- package/dist/adapters/attachment.js +51 -21
- package/dist/adapters/attachment.js.map +1 -1
- package/dist/adapters/directive-formatter.d.ts +1 -3
- package/dist/adapters/directive-formatter.d.ts.map +1 -1
- package/dist/adapters/feedback.d.ts +6 -7
- 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 +57 -58
- 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 +14 -16
- package/dist/adapters/suggestion.d.ts.map +1 -1
- package/dist/adapters/thread-history.d.ts +54 -51
- package/dist/adapters/thread-history.d.ts.map +1 -1
- package/dist/adapters/trigger.d.ts +7 -9
- package/dist/adapters/trigger.d.ts.map +1 -1
- package/dist/adapters/voice.d.ts +46 -40
- 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 +0 -2
- 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 +19 -21
- 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 +27 -28
- 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 +19 -21
- 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 +42 -29
- 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 +6 -8
- package/dist/model-context/registry-handles.d.ts.map +1 -1
- package/dist/model-context/registry.d.ts +14 -16
- package/dist/model-context/registry.d.ts.map +1 -1
- package/dist/model-context/tool-call-text.d.ts +13 -14
- package/dist/model-context/tool-call-text.d.ts.map +1 -1
- package/dist/model-context/tool.d.ts +10 -11
- package/dist/model-context/tool.d.ts.map +1 -1
- package/dist/model-context/types.d.ts +32 -34
- package/dist/model-context/types.d.ts.map +1 -1
- package/dist/react/AssistantProvider.d.ts +6 -8
- package/dist/react/AssistantProvider.d.ts.map +1 -1
- package/dist/react/AssistantRuntimeProvider.d.ts +23 -25
- package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
- package/dist/react/RuntimeAdapter.d.ts +2 -5
- package/dist/react/RuntimeAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts +24 -18
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js +58 -25
- package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
- package/dist/react/adapters/TitleGenerationAdapter.d.ts +2 -4
- package/dist/react/adapters/TitleGenerationAdapter.d.ts.map +1 -1
- package/dist/react/client/AdaptedRemoteThread.d.ts +5 -7
- package/dist/react/client/AdaptedRemoteThread.d.ts.map +1 -1
- package/dist/react/client/DataRenderers.d.ts +1 -3
- package/dist/react/client/DataRenderers.d.ts.map +1 -1
- package/dist/react/client/InMemoryThreadList.d.ts +6 -8
- package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
- package/dist/react/client/Interactables.d.ts +2 -4
- 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 +32 -34
- 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 +9 -11
- 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 -10
- 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 +1 -3
- 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 -8
- 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 +33 -36
- package/dist/react/interactables-legacy/scopes.d.ts.map +1 -1
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts +6 -8
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -1
- package/dist/react/interactables-legacy/useInteractableState.d.ts +6 -7
- package/dist/react/interactables-legacy/useInteractableState.d.ts.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts +23 -13
- 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 +11 -13
- package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -1
- package/dist/react/model-context/define-toolkit.d.ts +12 -4
- package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
- package/dist/react/model-context/external-tool.d.ts +0 -2
- package/dist/react/model-context/external-tool.d.ts.map +1 -1
- package/dist/react/model-context/human-tool.d.ts +0 -2
- package/dist/react/model-context/human-tool.d.ts.map +1 -1
- package/dist/react/model-context/interactableTool.d.ts +23 -25
- package/dist/react/model-context/interactableTool.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantDataUI.d.ts +4 -6
- package/dist/react/model-context/makeAssistantDataUI.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantTool.d.ts +4 -6
- package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantToolUI.d.ts +4 -6
- package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
- package/dist/react/model-context/provider-tool.d.ts +3 -4
- package/dist/react/model-context/provider-tool.d.ts.map +1 -1
- package/dist/react/model-context/stub-tool.d.ts +0 -2
- package/dist/react/model-context/stub-tool.d.ts.map +1 -1
- package/dist/react/model-context/toolbox.d.ts +37 -24
- package/dist/react/model-context/toolbox.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantContext.d.ts +2 -5
- package/dist/react/model-context/useAssistantContext.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantDataUI.d.ts +5 -7
- package/dist/react/model-context/useAssistantDataUI.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantInstructions.d.ts +2 -5
- package/dist/react/model-context/useAssistantInstructions.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantTool.d.ts +8 -11
- package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantToolUI.d.ts +11 -13
- package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
- package/dist/react/model-context/useAuiToolOverrides.d.ts +2 -3
- package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -1
- package/dist/react/model-context/useInlineRender.d.ts +2 -4
- package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
- package/dist/react/model-context/useInteractable.d.ts +37 -36
- package/dist/react/model-context/useInteractable.d.ts.map +1 -1
- package/dist/react/model-context/useInteractableState.d.ts +10 -8
- package/dist/react/model-context/useInteractableState.d.ts.map +1 -1
- package/dist/react/model-context/useInteractableVersions.d.ts +3 -5
- package/dist/react/model-context/useInteractableVersions.d.ts.map +1 -1
- package/dist/react/model-context/useToolArgsStatus.d.ts +5 -6
- package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts +6 -8
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts +2 -4
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarFeedback.d.ts +4 -6
- package/dist/react/primitive-hooks/useActionBarFeedback.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarReload.d.ts +2 -4
- package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarSpeak.d.ts +2 -4
- package/dist/react/primitive-hooks/useActionBarSpeak.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts +2 -4
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts +2 -4
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts +2 -4
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts +3 -5
- package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerCancel.d.ts +2 -4
- package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerDictate.d.ts +2 -4
- package/dist/react/primitive-hooks/useComposerDictate.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerSend.d.ts +3 -5
- package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerCancel.d.ts +1 -3
- package/dist/react/primitive-hooks/useEditComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerSend.d.ts +2 -4
- package/dist/react/primitive-hooks/useEditComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageBranching.d.ts +4 -6
- package/dist/react/primitive-hooks/useMessageBranching.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageError.d.ts +0 -2
- package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageReload.d.ts +2 -4
- package/dist/react/primitive-hooks/useMessageReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts +6 -8
- 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 +0 -2
- package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +0 -2
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts +1 -3
- package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts +1 -3
- package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts +1 -3
- package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts +1 -3
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts +2 -4
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListNew.d.ts +1 -3
- package/dist/react/primitive-hooks/useThreadListNew.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts +0 -2
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessages.d.ts +1 -3
- package/dist/react/primitive-hooks/useThreadMessages.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useVoice.d.ts +5 -7
- package/dist/react/primitive-hooks/useVoice.d.ts.map +1 -1
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +25 -26
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.d.ts +22 -23
- package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerIf.d.ts +10 -9
- package/dist/react/primitives/composer/ComposerIf.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerQueue.d.ts +11 -14
- package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.d.ts +26 -28
- package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.js +16 -6
- package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.d.ts +26 -23
- 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 +120 -117
- 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 +199 -185
- 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 +6 -8
- package/dist/react/primitives/message/MessageQuote.d.ts.map +1 -1
- package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts +2 -4
- package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
- package/dist/react/primitives/part/PartMessages.d.ts +13 -15
- package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.d.ts +54 -56
- package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadSuggestions.d.ts +20 -21
- 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 +22 -23
- package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts +4 -6
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -1
- package/dist/react/providers/AttachmentByIndexProvider.d.ts +3 -5
- package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +3 -5
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +2 -4
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/MessageByIdProvider.d.ts +2 -4
- package/dist/react/providers/MessageByIdProvider.d.ts.map +1 -1
- package/dist/react/providers/MessageByIndexProvider.d.ts +2 -4
- package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/PartByIndexProvider.d.ts +2 -4
- package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/QueueItemByIndexProvider.d.ts +2 -4
- package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ReadonlyThreadProvider.d.ts +5 -7
- 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 +2 -4
- package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.d.ts +3 -5
- 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 +3 -5
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +3 -6
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +209 -219
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +53 -39
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +185 -196
- 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 +14 -19
- 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 +8 -9
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts +9 -11
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts +4 -5
- 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 +7 -9
- 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 +106 -100
- package/dist/react/runtimes/assistant-transport/types.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts +3 -5
- 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 +2 -4
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts +1 -3
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +5 -7
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +410 -213
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +14 -16
- 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 +136 -123
- package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.js +60 -9
- package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +9 -10
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts +4 -5
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/sdkIdentity.d.ts +1 -3
- 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 +2 -4
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts +8 -9
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/createMessageConverter.d.ts +14 -17
- 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 +11 -13
- package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.d.ts +14 -18
- 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 +2 -4
- 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 +1 -3
- package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts.map +1 -1
- package/dist/react/runtimes/useLocalRuntime.d.ts +26 -37
- 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 +2 -4
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRuntimeAdapters.d.ts +1 -3
- package/dist/react/runtimes/useRuntimeAdapters.d.ts.map +1 -1
- package/dist/react/runtimes/useStreamingTiming.d.ts +3 -5
- package/dist/react/runtimes/useStreamingTiming.d.ts.map +1 -1
- package/dist/react/types/MessagePartComponentTypes.d.ts +46 -43
- package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
- package/dist/react/types/scopes/dataRenderers.d.ts +8 -11
- package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -1
- package/dist/react/types/scopes/interactables.d.ts +50 -49
- package/dist/react/types/scopes/interactables.d.ts.map +1 -1
- package/dist/react/types/scopes/tools.d.ts +17 -19
- 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 +5 -6
- package/dist/react/utils/getMessageQuote.d.ts.map +1 -1
- package/dist/react/utils/groupParts.d.ts +28 -29
- package/dist/react/utils/groupParts.d.ts.map +1 -1
- package/dist/react/utils/useJSONEqual.d.ts +1 -3
- package/dist/react/utils/useJSONEqual.d.ts.map +1 -1
- package/dist/react/utils/useJSONSchemaDependency.d.ts +2 -4
- package/dist/react/utils/useJSONSchemaDependency.d.ts.map +1 -1
- package/dist/runtime/api/assistant-runtime.d.ts +26 -28
- package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
- package/dist/runtime/api/attachment-runtime.d.ts +46 -43
- 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 +31 -30
- package/dist/runtime/api/bindings.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.d.ts +207 -193
- 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 +28 -26
- package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.js +22 -0
- package/dist/runtime/api/message-part-runtime.js.map +1 -1
- package/dist/runtime/api/message-runtime.d.ts +87 -84
- package/dist/runtime/api/message-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-runtime.js +1 -1
- package/dist/runtime/api/message-runtime.js.map +1 -1
- package/dist/runtime/api/paths.d.ts +48 -50
- package/dist/runtime/api/paths.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.d.ts +64 -66
- 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 +73 -76
- 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 +299 -300
- 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 +8 -10
- package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts +149 -99
- 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 +120 -108
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js +109 -41
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +29 -29
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.js +10 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +27 -29
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js +21 -6
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts +14 -16
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -1
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts +7 -9
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/composer-runtime-core.d.ts +88 -72
- package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +63 -65
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +210 -197
- 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 +35 -37
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.d.ts +29 -31
- package/dist/runtime/queue/message-queue.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.js +1 -1
- package/dist/runtime/queue/queue-item.d.ts +5 -7
- package/dist/runtime/queue/queue-item.d.ts.map +1 -1
- package/dist/runtime/utils/abortable-thread-load.d.ts +7 -8
- package/dist/runtime/utils/abortable-thread-load.d.ts.map +1 -1
- package/dist/runtime/utils/attachment-add-operations.d.ts +13 -11
- 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 +4 -5
- 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 +26 -27
- package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.d.ts +32 -32
- package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.js +3 -3
- package/dist/runtime/utils/external-message-conversion.js.map +1 -1
- package/dist/runtime/utils/external-store-message.d.ts +2 -4
- package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository-session.d.ts +21 -23
- package/dist/runtime/utils/message-repository-session.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.d.ts +50 -51
- 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 +10 -11
- package/dist/runtime/utils/pending-tool-calls.d.ts.map +1 -1
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +6 -8
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
- package/dist/runtime/utils/runtime-extras-brand.d.ts +4 -6
- package/dist/runtime/utils/runtime-extras-brand.d.ts.map +1 -1
- package/dist/runtime/utils/stored-message-parts.d.ts +5 -5
- package/dist/runtime/utils/stored-message-parts.d.ts.map +1 -1
- package/dist/runtime/utils/stored-message-parts.js +22 -2
- package/dist/runtime/utils/stored-message-parts.js.map +1 -1
- package/dist/runtime/utils/streaming-timing.d.ts +19 -21
- package/dist/runtime/utils/streaming-timing.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.d.ts +36 -32
- 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 +4 -5
- 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 +6 -8
- 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 +0 -2
- package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-adapter.d.ts +215 -198
- package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-runtime-core.d.ts +5 -6
- 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 +1 -3
- package/dist/runtimes/external-store/external-store-shared-options.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +38 -40
- 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 +117 -124
- 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 +44 -14
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/thread-message-converter.d.ts +3 -5
- package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +94 -95
- 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 +6 -8
- package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-runtime-options.d.ts +40 -42
- package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +40 -42
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +93 -97
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +178 -31
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/local/should-continue.d.ts +1 -3
- package/dist/runtimes/local/should-continue.d.ts.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +76 -53
- 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 +11 -13
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts +2 -4
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts +1 -3
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +33 -29
- 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 +44 -46
- 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 +25 -26
- package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/title.d.ts +3 -5
- package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/types.d.ts +111 -112
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +144 -145
- 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 +7 -9
- package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
- package/dist/store/clients/external-thread.d.ts +53 -54
- package/dist/store/clients/external-thread.d.ts.map +1 -1
- package/dist/store/clients/external-thread.js +1256 -731
- package/dist/store/clients/external-thread.js.map +1 -1
- package/dist/store/clients/model-context-client.d.ts +1 -3
- package/dist/store/clients/model-context-client.d.ts.map +1 -1
- package/dist/store/clients/no-op-composer-client.d.ts +2 -4
- 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 +1 -3
- package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
- package/dist/store/clients/single-thread-list.d.ts +3 -4
- 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 +5 -7
- package/dist/store/clients/suggestions.d.ts.map +1 -1
- package/dist/store/clients/thread-message-client.d.ts +10 -9
- 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 +0 -2
- package/dist/store/clients/thread-selection-events.d.ts.map +1 -1
- package/dist/store/clients/thread-tasks.d.ts +4 -6
- package/dist/store/clients/thread-tasks.d.ts.map +1 -1
- package/dist/store/env.d.ts +0 -2
- 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 +3 -4
- package/dist/store/primitive-predicates.d.ts.map +1 -1
- package/dist/store/primitive-predicates.js +9 -4
- package/dist/store/primitive-predicates.js.map +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts +3 -5
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts +10 -12
- 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 +0 -2
- package/dist/store/runtime-clients/handle-runtime-action.d.ts.map +1 -1
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts +0 -2
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts.map +1 -1
- package/dist/store/runtime-clients/liveRef.d.ts +1 -3
- package/dist/store/runtime-clients/liveRef.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts +3 -5
- 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 +9 -9
- 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 +4 -6
- 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 +5 -7
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts +3 -5
- 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 +2 -4
- 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 +15 -17
- package/dist/store/scopes/attachment.d.ts.map +1 -1
- package/dist/store/scopes/chain-of-thought.d.ts +28 -29
- package/dist/store/scopes/chain-of-thought.d.ts.map +1 -1
- package/dist/store/scopes/composer.d.ts +141 -128
- package/dist/store/scopes/composer.d.ts.map +1 -1
- package/dist/store/scopes/message.d.ts +114 -107
- package/dist/store/scopes/message.d.ts.map +1 -1
- package/dist/store/scopes/model-context.d.ts +7 -9
- package/dist/store/scopes/model-context.d.ts.map +1 -1
- package/dist/store/scopes/part.d.ts +49 -45
- package/dist/store/scopes/part.d.ts.map +1 -1
- package/dist/store/scopes/queue-item.d.ts +18 -20
- package/dist/store/scopes/queue-item.d.ts.map +1 -1
- package/dist/store/scopes/suggestion.d.ts +10 -12
- package/dist/store/scopes/suggestion.d.ts.map +1 -1
- package/dist/store/scopes/suggestions.d.ts +13 -15
- package/dist/store/scopes/suggestions.d.ts.map +1 -1
- package/dist/store/scopes/task.d.ts +23 -25
- package/dist/store/scopes/task.d.ts.map +1 -1
- package/dist/store/scopes/thread-list-item.d.ts +63 -65
- package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
- package/dist/store/scopes/thread.d.ts +192 -194
- package/dist/store/scopes/thread.d.ts.map +1 -1
- package/dist/store/scopes/threads.d.ts +45 -47
- package/dist/store/scopes/threads.d.ts.map +1 -1
- package/dist/subscribable/subscribable.d.ts +58 -53
- 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 +26 -27
- package/dist/types/attachment.d.ts.map +1 -1
- package/dist/types/augmentations.d.ts +4 -4
- package/dist/types/augmentations.d.ts.map +1 -1
- package/dist/types/directive.d.ts +11 -13
- package/dist/types/directive.d.ts.map +1 -1
- package/dist/types/error.d.ts +7 -8
- 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 +322 -284
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js.map +1 -1
- package/dist/types/quote.d.ts +2 -4
- package/dist/types/quote.d.ts.map +1 -1
- package/dist/types/trigger.d.ts +8 -10
- package/dist/types/trigger.d.ts.map +1 -1
- package/dist/types/unsubscribe.d.ts +0 -2
- package/dist/types/unsubscribe.d.ts.map +1 -1
- package/dist/utils/abortable-iterable.d.ts +0 -2
- package/dist/utils/abortable-iterable.d.ts.map +1 -1
- package/dist/utils/composite-context-provider.d.ts +8 -11
- package/dist/utils/composite-context-provider.d.ts.map +1 -1
- package/dist/utils/data-url.d.ts +10 -12
- package/dist/utils/data-url.d.ts.map +1 -1
- package/dist/utils/getGroupStatus.d.ts +17 -18
- package/dist/utils/getGroupStatus.d.ts.map +1 -1
- package/dist/utils/id.d.ts +0 -2
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/image-media-type.d.ts +0 -2
- package/dist/utils/image-media-type.d.ts.map +1 -1
- package/dist/utils/invoke-user-callback.d.ts +0 -2
- package/dist/utils/invoke-user-callback.d.ts.map +1 -1
- package/dist/utils/json/is-json-equal.d.ts +0 -2
- package/dist/utils/json/is-json-equal.d.ts.map +1 -1
- package/dist/utils/json/is-json.d.ts +1 -3
- package/dist/utils/json/is-json.d.ts.map +1 -1
- package/dist/utils/json/stable-stringify-tool-args.d.ts +1 -3
- package/dist/utils/json/stable-stringify-tool-args.d.ts.map +1 -1
- package/dist/utils/normalizePartStatus.d.ts +2 -3
- 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 +1 -2
- package/dist/utils/notify-event-listeners.d.ts.map +1 -1
- package/dist/utils/record.d.ts +0 -2
- package/dist/utils/record.d.ts.map +1 -1
- package/dist/utils/silent-runtime-action.d.ts +0 -2
- package/dist/utils/silent-runtime-action.d.ts.map +1 -1
- package/dist/utils/text.d.ts +1 -3
- package/dist/utils/text.d.ts.map +1 -1
- package/dist/utils/wire-media.d.ts +0 -2
- package/dist/utils/wire-media.d.ts.map +1 -1
- package/package.json +11 -10
- package/src/adapters/attachment.test.ts +98 -1
- package/src/adapters/attachment.ts +70 -20
- 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 +61 -0
- 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/adapters/LocalStorageThreadListAdapter.test.ts +594 -0
- package/src/react/adapters/LocalStorageThreadListAdapter.tsx +98 -35
- package/src/react/client/Interactables.test.ts +853 -1
- package/src/react/client/Interactables.ts +325 -45
- package/src/react/client/RemoteThreadList.initialize-failure.test.ts +124 -0
- 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 +212 -1
- package/src/react/interactables-legacy/Interactables.ts +25 -14
- package/src/react/interactables-legacy/interactable-model-context.ts +26 -24
- package/src/react/interactables-shared/useInteractablePersistenceQueue.test.tsx +22 -2
- package/src/react/interactables-shared/useInteractablePersistenceQueue.ts +63 -11
- 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 +124 -8
- package/src/react/primitives/generativeUI/GenerativeUI.tsx +35 -15
- 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 +151 -7
- 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/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.running.test.tsx +93 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +160 -3
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.title.test.tsx +38 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +73 -53
- 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-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 +42 -0
- 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 +361 -2
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +571 -216
- package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +25 -0
- package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +7 -3
- package/src/react/runtimes/cloud/auiV0.ts +158 -9
- package/src/react/runtimes/cloud/auiV0DecodeSafely.test.ts +352 -1
- package/src/react/runtimes/createMessageConverter.ts +9 -3
- package/src/react/runtimes/external-store-history-copy.ts +223 -0
- package/src/react/runtimes/useExternalStoreRuntime.history-copy.test.tsx +483 -0
- package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +76 -1
- 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/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 +40 -0
- package/src/runtime/api/message-runtime.test.ts +112 -2
- package/src/runtime/api/message-runtime.ts +10 -5
- 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 +744 -9
- package/src/runtime/base/base-thread-runtime-core.ts +154 -27
- package/src/runtime/base/default-edit-composer-runtime-core.ts +13 -1
- package/src/runtime/base/default-thread-composer-runtime-core.ts +29 -10
- package/src/runtime/interfaces/composer-runtime-core.ts +19 -0
- package/src/runtime/interfaces/thread-runtime-core.ts +22 -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 +48 -0
- package/src/runtime/utils/external-message-conversion.ts +3 -4
- 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 +43 -1
- package/src/runtime/utils/thread-message-like.test.ts +58 -0
- package/src/runtime/utils/thread-message-like.ts +72 -46
- 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 +22 -1
- 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 +76 -29
- 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 +1649 -108
- package/src/runtimes/local/local-thread-runtime-core.ts +301 -47
- 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 +635 -131
- 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 +103 -0
- package/src/store/primitive-predicates.ts +15 -3
- 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 +138 -5
- 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 +8 -0
- package/src/store/scopes/part.ts +8 -0
- package/src/subscribable/subscribable.test.ts +198 -1
- package/src/subscribable/subscribable.ts +49 -7
- package/src/tests/RemoteThreadListThreadListRuntimeCore-errors.test.ts +95 -1
- package/src/tests/auiV0Encode.test.ts +408 -1
- package/src/tests/base-composer-runtime-core-send.test.ts +722 -29
- package/src/tests/base-composer-runtime-core.test.ts +196 -0
- package/src/tests/composer-can-send.test.ts +98 -1
- package/src/tests/composer-submission.test.tsx +796 -0
- package/src/tests/default-edit-composer-runtime-core.test.ts +102 -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 +581 -1
- package/src/tests/external-store-thread-runtime-core.test.ts +186 -0
- package/src/tests/external-thread-attachments.test.tsx +741 -3
- package/src/tests/external-thread-isLast.test.tsx +69 -0
- package/src/tests/get-thread-state-isRunning.test.ts +2 -2
- package/src/tests/remote-thread-list-adapter-switch.test.ts +45 -1
- package/src/types/message.ts +49 -2
- package/src/utils/normalizePartStatus.ts +14 -1
- package/dist/tests/remote-thread-list-test-helpers.d.ts +0 -15
- 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
|
|
@@ -23,6 +25,14 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
23
25
|
return this.repository.getMessages();
|
|
24
26
|
}
|
|
25
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
|
+
}
|
|
26
36
|
get messages() {
|
|
27
37
|
if (this._voiceMessages.length === 0) return this._getBaseMessages();
|
|
28
38
|
const base = this._getBaseMessages();
|
|
@@ -153,8 +163,10 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
153
163
|
}
|
|
154
164
|
};
|
|
155
165
|
const voiceIdx = this._voiceMessages.findIndex((voiceMessage) => voiceMessage.id === messageId);
|
|
156
|
-
if (voiceIdx === -1)
|
|
157
|
-
|
|
166
|
+
if (voiceIdx === -1) {
|
|
167
|
+
this.repository.addOrUpdateMessage(parentId, updatedMessage);
|
|
168
|
+
this._onMessageMetadataChanged(message, updatedMessage);
|
|
169
|
+
} else {
|
|
158
170
|
this._voiceMessages[voiceIdx] = updatedMessage;
|
|
159
171
|
if (this._currentAssistantMsg === message) this._currentAssistantMsg = updatedMessage;
|
|
160
172
|
this._markVoiceMessagesDirty();
|
|
@@ -243,11 +255,41 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
243
255
|
};
|
|
244
256
|
_onVoiceConnected() {}
|
|
245
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
|
+
}
|
|
246
266
|
_isRunActive() {
|
|
247
267
|
if (this.isRunning) return true;
|
|
248
268
|
const last = this._getBaseMessages().at(-1);
|
|
249
269
|
return last?.role === "assistant" && (last.status.type === "running" || last.status.type === "requires-action");
|
|
250
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
|
+
}
|
|
251
293
|
connectVoice() {
|
|
252
294
|
const adapter = this.adapters?.voice;
|
|
253
295
|
if (!adapter) throw new Error("Voice adapter not configured");
|
|
@@ -279,11 +321,7 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
279
321
|
};
|
|
280
322
|
try {
|
|
281
323
|
let currentMode = "listening";
|
|
282
|
-
this.voice =
|
|
283
|
-
status: session.status,
|
|
284
|
-
isMuted: session.isMuted,
|
|
285
|
-
mode: currentMode
|
|
286
|
-
};
|
|
324
|
+
this.voice = this._toVoiceSessionState(session, session.status, currentMode);
|
|
287
325
|
this._voiceVolume = 0;
|
|
288
326
|
this._notifySubscribers();
|
|
289
327
|
if (finishDetachedSetup()) return;
|
|
@@ -294,15 +332,12 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
294
332
|
this._voiceSession = void 0;
|
|
295
333
|
this.voice = void 0;
|
|
296
334
|
this._onVoiceDisconnected();
|
|
297
|
-
} else this.voice =
|
|
298
|
-
status,
|
|
299
|
-
isMuted: session.isMuted,
|
|
300
|
-
mode: currentMode
|
|
301
|
-
};
|
|
335
|
+
} else this.voice = this._toVoiceSessionState(session, status, currentMode);
|
|
302
336
|
this._notifySubscribers();
|
|
303
337
|
}));
|
|
304
338
|
if (finishDetachedSetup()) return;
|
|
305
339
|
unsubs.push(session.onModeChange((mode) => {
|
|
340
|
+
if (this._voiceSession !== session) return;
|
|
306
341
|
currentMode = mode;
|
|
307
342
|
if (this.voice) {
|
|
308
343
|
this.voice = {
|
|
@@ -314,11 +349,13 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
314
349
|
}));
|
|
315
350
|
if (finishDetachedSetup()) return;
|
|
316
351
|
unsubs.push(session.onVolumeChange((volume) => {
|
|
352
|
+
if (this._voiceSession !== session) return;
|
|
317
353
|
this._voiceVolume = volume;
|
|
318
354
|
notifyEventListeners(this._voiceVolumeSubscribers, void 0, "Voice volume");
|
|
319
355
|
}));
|
|
320
356
|
if (finishDetachedSetup()) return;
|
|
321
357
|
unsubs.push(session.onTranscript((transcript) => {
|
|
358
|
+
if (this._voiceSession !== session) return;
|
|
322
359
|
this._handleVoiceTranscript(transcript);
|
|
323
360
|
}));
|
|
324
361
|
if (!finishDetachedSetup()) this._onVoiceConnected();
|
|
@@ -335,35 +372,30 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
335
372
|
}
|
|
336
373
|
}
|
|
337
374
|
_currentAssistantMsg = null;
|
|
375
|
+
_observeVoiceCommit(commit) {
|
|
376
|
+
Promise.resolve(commit).catch((error) => {
|
|
377
|
+
console.error("[assistant-ui] Voice message commit failed", error);
|
|
378
|
+
});
|
|
379
|
+
}
|
|
338
380
|
_handleVoiceTranscript(transcript) {
|
|
339
381
|
this.ensureInitialized();
|
|
340
382
|
if (transcript.role === "user") {
|
|
341
383
|
this._finishVoiceAssistantMessage();
|
|
342
384
|
this._currentAssistantMsg = null;
|
|
343
|
-
if (transcript.isFinal) {
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
type: "complete",
|
|
358
|
-
reason: "unknown"
|
|
359
|
-
},
|
|
360
|
-
attachments: []
|
|
361
|
-
};
|
|
362
|
-
this._voiceMessages.push(message);
|
|
363
|
-
this._commitVoiceMessage(message);
|
|
364
|
-
this._markVoiceMessagesDirty();
|
|
365
|
-
this._notifySubscribers();
|
|
366
|
-
}
|
|
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
|
+
}));
|
|
367
399
|
} else {
|
|
368
400
|
const status = transcript.isFinal ? {
|
|
369
401
|
type: "complete",
|
|
@@ -404,13 +436,49 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
404
436
|
this._currentAssistantMsg = updated;
|
|
405
437
|
}
|
|
406
438
|
if (transcript.isFinal) {
|
|
407
|
-
this._commitVoiceMessage(this._currentAssistantMsg);
|
|
439
|
+
this._observeVoiceCommit(this._commitVoiceMessage(this._currentAssistantMsg));
|
|
408
440
|
this._currentAssistantMsg = null;
|
|
409
441
|
}
|
|
410
442
|
this._markVoiceMessagesDirty();
|
|
411
443
|
this._notifySubscribers();
|
|
412
444
|
}
|
|
413
445
|
}
|
|
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
|
+
}
|
|
414
482
|
_finishVoiceAssistantMessage(notify = true) {
|
|
415
483
|
const last = this._voiceMessages.at(-1);
|
|
416
484
|
if (last?.role === "assistant" && last.status.type === "running") {
|
|
@@ -422,7 +490,7 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
422
490
|
reason: "stop"
|
|
423
491
|
}
|
|
424
492
|
};
|
|
425
|
-
this._commitVoiceMessage(this._voiceMessages[idx]);
|
|
493
|
+
this._observeVoiceCommit(this._commitVoiceMessage(this._voiceMessages[idx]));
|
|
426
494
|
this._currentAssistantMsg = null;
|
|
427
495
|
this._markVoiceMessagesDirty();
|
|
428
496
|
if (notify) this._notifySubscribers();
|
|
@@ -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","_commitVoiceMessage","_message","messages","length","base","baseMessageIds","Set","map","id","filter","has","mostRecentAssistantMessage","this","role","metadata","unstable_state","composer","_contextProvider","constructor","getModelContext","enrichAppendMetadata","anchorId","parentId","parentIndex","findIndex","m","composerMetadata","unstable_composerMetadata","slice","custom","_editComposers","Map","getEditComposer","get","_isVoiceMessage","some","_resolveAppendParent","at","beginEdit","Error","set","delete","getMessage","_notifySubscribers","getMessageById","baseMessages","voiceIdx","index","undefined","getBranches","switchToBranch","branchId","_notifyEventSubscribers","event","E","payload","subscribers","_eventSubscribers","_notifyToolApprovalAnswered","toolCallId","toolName","approved","submitFeedback","type","comment","adapter","entry","trimmed","trim","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","getVoiceVolume","subscribeVoiceVolume","callback","add","_onVoiceConnected","_onVoiceDisconnected","_isRunActive","runtime","isRunning","last","connectVoice","replacing","_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","notify","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 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 protected _commitVoiceMessage(_message: ThreadMessage): void {}\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: ThreadMessage = {\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 } 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 protected _onVoiceConnected(): void {}\n\n protected _onVoiceDisconnected(): void {}\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 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 = {\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 (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 = {\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 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 _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 const message: ThreadMessage = {\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._voiceMessages.push(message);\n this._commitVoiceMessage(message);\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._commitVoiceMessage(this._currentAssistantMsg);\n this._currentAssistantMsg = null;\n }\n\n this._markVoiceMessagesDirty();\n this._notifySubscribers();\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._commitVoiceMessage(this._voiceMessages[idx]!);\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
|
+
{"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,33 +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
|
-
//#region src/runtime/base/default-edit-composer-runtime-core.d.ts
|
|
8
7
|
export declare class DefaultEditComposerRuntimeCore extends BaseComposerRuntimeCore {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
message:
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
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"}
|
|
@@ -6,8 +6,11 @@ var DefaultEditComposerRuntimeCore = class extends BaseComposerRuntimeCore {
|
|
|
6
6
|
get canCancel() {
|
|
7
7
|
return true;
|
|
8
8
|
}
|
|
9
|
+
get detachesDraftOnSend() {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
9
12
|
get canSend() {
|
|
10
|
-
return !this.isEmpty && !this.runtime.voice && !this.
|
|
13
|
+
return !this.isEmpty && !this.runtime.voice && !this.isSubmitting;
|
|
11
14
|
}
|
|
12
15
|
getAttachmentAdapter() {
|
|
13
16
|
return this.runtime.adapters?.attachments;
|
|
@@ -20,6 +23,7 @@ var DefaultEditComposerRuntimeCore = class extends BaseComposerRuntimeCore {
|
|
|
20
23
|
_sourceId;
|
|
21
24
|
runtime;
|
|
22
25
|
endEditCallback;
|
|
26
|
+
_ended = false;
|
|
23
27
|
constructor(runtime, endEditCallback, { parentId, message }) {
|
|
24
28
|
super();
|
|
25
29
|
this.runtime = runtime;
|
|
@@ -68,6 +72,11 @@ var DefaultEditComposerRuntimeCore = class extends BaseComposerRuntimeCore {
|
|
|
68
72
|
return appendTask;
|
|
69
73
|
}
|
|
70
74
|
handleCancel() {
|
|
75
|
+
if (this._ended) return;
|
|
76
|
+
this._ended = true;
|
|
77
|
+
this.reset().catch((error) => {
|
|
78
|
+
console.error("[assistant-ui] Failed to clear cancelled edit", error);
|
|
79
|
+
});
|
|
71
80
|
this.endEditCallback();
|
|
72
81
|
this._notifySubscribers();
|
|
73
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-edit-composer-runtime-core.js","names":["AppendMessage","ThreadMessage","CompleteAttachment","getThreadMessageText","liftNonTextParts","AttachmentAdapter","DictationAdapter","SendOptions","ThreadRuntimeCore","BaseComposerRuntimeCore","DefaultEditComposerRuntimeCore","canCancel","canSend","isEmpty","runtime","voice","
|
|
1
|
+
{"version":3,"file":"default-edit-composer-runtime-core.js","names":["AppendMessage","ThreadMessage","CompleteAttachment","getThreadMessageText","liftNonTextParts","AttachmentAdapter","DictationAdapter","SendOptions","ThreadRuntimeCore","BaseComposerRuntimeCore","DefaultEditComposerRuntimeCore","canCancel","detachesDraftOnSend","canSend","isEmpty","runtime","voice","isSubmitting","getAttachmentAdapter","adapters","attachments","getDictationAdapter","dictation","_nonTextPassthrough","_parentId","_sourceId","endEditCallback","_ended","constructor","parentId","message","lastHasVoice","undefined","unsubscribe","subscribe","hasVoice","_notifySubscribers","id","setText","setRole","role","content","filter","p","type","setAttachments","setRunConfig","composer","runConfig","sourceId","handleSend","Omit","options","length","appendTask","append","startRun","handleCancel","reset","catch","error","console"],"sources":["../../../src/runtime/base/default-edit-composer-runtime-core.ts"],"sourcesContent":["import type { AppendMessage, ThreadMessage } from \"../../types/message\";\nimport type { CompleteAttachment } from \"../../types/attachment\";\nimport { getThreadMessageText } from \"../../utils/text\";\nimport { liftNonTextParts } from \"../../adapters/attachment\";\nimport type { AttachmentAdapter } from \"../../adapters/attachment\";\nimport type { DictationAdapter } from \"../../adapters/speech\";\nimport type { SendOptions } from \"../interfaces/composer-runtime-core\";\nimport type { ThreadRuntimeCore } from \"../interfaces/thread-runtime-core\";\nimport { BaseComposerRuntimeCore } from \"./base-composer-runtime-core\";\n\nexport class DefaultEditComposerRuntimeCore extends BaseComposerRuntimeCore {\n public get canCancel() {\n return true;\n }\n\n // An edit composer is the message it is editing, so its draft stays in place\n // until the edit lands rather than moving into a submission row.\n protected override get detachesDraftOnSend() {\n return false;\n }\n\n public get canSend() {\n return !this.isEmpty && !this.runtime.voice && !this.isSubmitting;\n }\n\n protected getAttachmentAdapter() {\n return this.runtime.adapters?.attachments;\n }\n\n protected getDictationAdapter() {\n return this.runtime.adapters?.dictation;\n }\n\n private _nonTextPassthrough: readonly ThreadMessage[\"content\"][number][];\n private _parentId: string | null;\n private _sourceId: string | null;\n private runtime: ThreadRuntimeCore & {\n adapters?:\n | {\n attachments?: AttachmentAdapter | undefined;\n dictation?: DictationAdapter | undefined;\n }\n | undefined;\n };\n private endEditCallback: () => void;\n private _ended = false;\n\n constructor(\n runtime: ThreadRuntimeCore & {\n adapters?:\n | {\n attachments?: AttachmentAdapter | undefined;\n dictation?: DictationAdapter | undefined;\n }\n | undefined;\n },\n endEditCallback: () => void,\n { parentId, message }: { parentId: string | null; message: ThreadMessage },\n ) {\n super();\n this.runtime = runtime;\n let lastHasVoice = runtime.voice !== undefined;\n const unsubscribe = runtime.subscribe(() => {\n const hasVoice = runtime.voice !== undefined;\n if (hasVoice === lastHasVoice) return;\n lastHasVoice = hasVoice;\n this._notifySubscribers();\n });\n this.endEditCallback = () => {\n unsubscribe();\n endEditCallback();\n };\n this._parentId = parentId;\n this._sourceId = message.id;\n this.setText(getThreadMessageText(message));\n\n this.setRole(message.role);\n\n let attachments: readonly CompleteAttachment[];\n if (message.role === \"user\") {\n attachments = [\n ...(message.attachments ?? []),\n ...liftNonTextParts(message.content),\n ];\n this._nonTextPassthrough = [];\n } else {\n attachments = message.attachments ?? [];\n this._nonTextPassthrough = message.content.filter(\n (p) => p.type !== \"text\",\n );\n }\n this.setAttachments(attachments);\n\n this.setRunConfig({ ...runtime.composer.runConfig });\n }\n\n public get parentId() {\n return this._parentId;\n }\n\n public get sourceId() {\n return this._sourceId;\n }\n\n public async handleSend(\n message: Omit<AppendMessage, \"parentId\" | \"sourceId\">,\n options?: SendOptions,\n ) {\n const content =\n this._nonTextPassthrough.length > 0\n ? ([\n ...message.content,\n ...this._nonTextPassthrough,\n ] as AppendMessage[\"content\"])\n : message.content;\n const appendTask = this.runtime.append({\n ...message,\n content,\n parentId: this._parentId,\n sourceId: this._sourceId,\n startRun: options?.startRun,\n });\n\n this.handleCancel();\n return appendTask;\n }\n\n public handleCancel() {\n if (this._ended) return;\n this._ended = true;\n void this.reset().catch((error: unknown) => {\n console.error(\"[assistant-ui] Failed to clear cancelled edit\", error);\n });\n this.endEditCallback();\n this._notifySubscribers();\n }\n}\n"],"mappings":";;;;AAUA,IAAaU,iCAAb,cAAoDD,wBAAwB;CAC1E,IAAWE,YAAY;EACrB,OAAO;CACT;CAIA,IAAuBC,sBAAsB;EAC3C,OAAO;CACT;CAEA,IAAWC,UAAU;EACnB,OAAO,CAAC,KAAKC,WAAW,CAAC,KAAKC,QAAQC,SAAS,CAAC,KAAKC;CACvD;CAEA,uBAAiC;EAC/B,OAAO,KAAKF,QAAQI,UAAUC;CAChC;CAEA,sBAAgC;EAC9B,OAAO,KAAKL,QAAQI,UAAUG;CAChC;CAEA;CACA;CACA;CACA;CAQA;CACA,SAAiB;CAEjBM,YACEb,SAQAW,iBACA,EAAEG,UAAUC,WACZ;EACA,MAAM;EACN,KAAKf,UAAUA;EACf,IAAIgB,eAAehB,QAAQC,UAAUgB,KAAAA;EACrC,MAAMC,cAAclB,QAAQmB,gBAAgB;GAC1C,MAAMC,WAAWpB,QAAQC,UAAUgB,KAAAA;GACnC,IAAIG,aAAaJ,cAAc;GAC/BA,eAAeI;GACf,KAAKC,mBAAmB;EAC1B,CAAC;EACD,KAAKV,wBAAwB;GAC3BO,YAAY;GACZP,gBAAgB;EAClB;EACA,KAAKF,YAAYK;EACjB,KAAKJ,YAAYK,QAAQO;EACzB,KAAKC,QAAQnC,qBAAqB2B,OAAO,CAAC;EAE1C,KAAKS,QAAQT,QAAQU,IAAI;EAEzB,IAAIpB;EACJ,IAAIU,QAAQU,SAAS,QAAQ;GAC3BpB,cAAc,CACZ,GAAIU,QAAQV,eAAe,CAAA,GAC3B,GAAGhB,iBAAiB0B,QAAQW,OAAO,CAAC;GAEtC,KAAKlB,sBAAsB,CAAA;EAC7B,OAAO;GACLH,cAAcU,QAAQV,eAAe,CAAA;GACrC,KAAKG,sBAAsBO,QAAQW,QAAQC,QACxCC,MAAMA,EAAEC,SAAS,MACpB;EACF;EACA,KAAKC,eAAezB,WAAW;EAE/B,KAAK0B,aAAa,EAAE,GAAG/B,QAAQgC,SAASC,UAAU,CAAC;CACrD;CAEA,IAAWnB,WAAW;EACpB,OAAO,KAAKL;CACd;CAEA,IAAWyB,WAAW;EACpB,OAAO,KAAKxB;CACd;CAEA,MAAayB,WACXpB,SACAsB,SACA;EACA,MAAMX,UACJ,KAAKlB,oBAAoB8B,SAAS,IAC7B,CACC,GAAGvB,QAAQW,SACX,GAAG,KAAKlB,mBAAmB,IAE7BO,QAAQW;EACd,MAAMa,aAAa,KAAKvC,QAAQwC,OAAO;GACrC,GAAGzB;GACHW;GACAZ,UAAU,KAAKL;GACfyB,UAAU,KAAKxB;GACf+B,UAAUJ,SAASI;EACrB,CAAC;EAED,KAAKC,aAAa;EAClB,OAAOH;CACT;CAEA,eAAsB;EACpB,IAAI,KAAK3B,QAAQ;EACjB,KAAKA,SAAS;EACd,KAAU+B,MAAM,CAAC,CAACC,OAAOC,UAAmB;GAC1CC,QAAQD,MAAM,iDAAiDA,KAAK;EACtE,CAAC;EACD,KAAKlC,gBAAgB;EACrB,KAAKU,mBAAmB;CAC1B;AACF"}
|