@assistant-ui/core 0.3.18 → 0.3.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/attachment.d.ts +9 -10
- package/dist/adapters/attachment.d.ts.map +1 -1
- package/dist/adapters/attachment.js +2 -1
- package/dist/adapters/attachment.js.map +1 -1
- package/dist/adapters/directive-formatter.d.ts +1 -2
- package/dist/adapters/directive-formatter.d.ts.map +1 -1
- package/dist/adapters/feedback.d.ts +2 -2
- package/dist/adapters/feedback.d.ts.map +1 -1
- package/dist/adapters/speech.d.ts +6 -7
- package/dist/adapters/speech.d.ts.map +1 -1
- package/dist/adapters/speech.js +13 -3
- package/dist/adapters/speech.js.map +1 -1
- package/dist/adapters/suggestion.d.ts +5 -6
- package/dist/adapters/suggestion.d.ts.map +1 -1
- package/dist/adapters/thread-history.d.ts +10 -7
- package/dist/adapters/thread-history.d.ts.map +1 -1
- package/dist/adapters/trigger.d.ts +1 -2
- package/dist/adapters/trigger.d.ts.map +1 -1
- package/dist/adapters/voice.d.ts +5 -6
- package/dist/adapters/voice.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internal/duplicate-detection.d.ts +1 -2
- package/dist/internal/duplicate-detection.d.ts.map +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/model-context/frame/host.d.ts +1 -2
- package/dist/model-context/frame/host.d.ts.map +1 -1
- package/dist/model-context/frame/host.js +26 -11
- package/dist/model-context/frame/host.js.map +1 -1
- package/dist/model-context/frame/provider.d.ts +1 -2
- package/dist/model-context/frame/provider.d.ts.map +1 -1
- package/dist/model-context/frame/types.d.ts +5 -6
- package/dist/model-context/frame/types.d.ts.map +1 -1
- package/dist/model-context/interactable-composer-metadata.d.ts +9 -10
- package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
- package/dist/model-context/interactable-composer-metadata.js +11 -9
- package/dist/model-context/interactable-composer-metadata.js.map +1 -1
- package/dist/model-context/registry-handles.d.ts +3 -4
- package/dist/model-context/registry-handles.d.ts.map +1 -1
- package/dist/model-context/registry.d.ts +1 -2
- package/dist/model-context/registry.d.ts.map +1 -1
- package/dist/model-context/tool-call-text.d.ts +2 -3
- package/dist/model-context/tool-call-text.d.ts.map +1 -1
- package/dist/model-context/tool.d.ts +2 -3
- package/dist/model-context/tool.d.ts.map +1 -1
- package/dist/model-context/types.d.ts +8 -9
- package/dist/model-context/types.d.ts.map +1 -1
- package/dist/react/AssistantProvider.d.ts +3 -4
- package/dist/react/AssistantProvider.d.ts.map +1 -1
- package/dist/react/AssistantRuntimeProvider.d.ts +1 -2
- package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
- package/dist/react/RuntimeAdapter.d.ts +2 -3
- package/dist/react/RuntimeAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts +4 -5
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js +43 -19
- package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
- package/dist/react/adapters/TitleGenerationAdapter.d.ts +2 -3
- package/dist/react/adapters/TitleGenerationAdapter.d.ts.map +1 -1
- package/dist/react/client/AdaptedRemoteThread.d.ts +1 -2
- package/dist/react/client/AdaptedRemoteThread.d.ts.map +1 -1
- package/dist/react/client/DataRenderers.d.ts +1 -2
- package/dist/react/client/DataRenderers.d.ts.map +1 -1
- package/dist/react/client/DataRenderers.js +20 -15
- package/dist/react/client/DataRenderers.js.map +1 -1
- package/dist/react/client/InMemoryThreadList.d.ts +3 -4
- package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
- package/dist/react/client/Interactables.d.ts +1 -2
- package/dist/react/client/Interactables.d.ts.map +1 -1
- package/dist/react/client/Interactables.js +11 -5
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/RemoteThreadList.d.ts +2 -3
- package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
- package/dist/react/client/RemoteThreadList.js +3 -2
- package/dist/react/client/RemoteThreadList.js.map +1 -1
- package/dist/react/client/Tools.d.ts +2 -2
- package/dist/react/client/Tools.d.ts.map +1 -1
- package/dist/react/client/interactable-model-context.d.ts +2 -3
- package/dist/react/client/interactable-model-context.d.ts.map +1 -1
- package/dist/react/client/interactable-model-context.js +3 -2
- package/dist/react/client/interactable-model-context.js.map +1 -1
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.js +2 -2
- package/dist/react/interactables-legacy/Interactables.d.ts +1 -2
- package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
- package/dist/react/interactables-legacy/interactable-model-context.d.ts +2 -3
- package/dist/react/interactables-legacy/interactable-model-context.d.ts.map +1 -1
- package/dist/react/interactables-legacy/scopes.d.ts +9 -10
- package/dist/react/interactables-legacy/scopes.d.ts.map +1 -1
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts +2 -3
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -1
- package/dist/react/interactables-legacy/useAssistantInteractable.js +3 -0
- package/dist/react/interactables-legacy/useAssistantInteractable.js.map +1 -1
- package/dist/react/interactables-legacy/useInteractableState.d.ts +1 -2
- package/dist/react/interactables-legacy/useInteractableState.d.ts.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts +1 -2
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
- package/dist/react/model-context/define-mcp-toolkit.d.ts +4 -5
- package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -1
- package/dist/react/model-context/define-toolkit.d.ts +2 -3
- package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
- package/dist/react/model-context/external-tool.d.ts +1 -2
- package/dist/react/model-context/external-tool.d.ts.map +1 -1
- package/dist/react/model-context/human-tool.d.ts +3 -4
- package/dist/react/model-context/human-tool.d.ts.map +1 -1
- package/dist/react/model-context/interactableTool.d.ts +3 -4
- package/dist/react/model-context/interactableTool.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantDataUI.d.ts +2 -3
- package/dist/react/model-context/makeAssistantDataUI.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantTool.d.ts +2 -3
- package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantToolUI.d.ts +2 -3
- package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
- package/dist/react/model-context/provider-tool.d.ts +2 -3
- package/dist/react/model-context/provider-tool.d.ts.map +1 -1
- package/dist/react/model-context/stub-tool.d.ts +1 -2
- package/dist/react/model-context/stub-tool.d.ts.map +1 -1
- package/dist/react/model-context/toolbox.d.ts +9 -10
- package/dist/react/model-context/toolbox.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantContext.d.ts +2 -2
- package/dist/react/model-context/useAssistantContext.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantDataUI.d.ts +2 -3
- package/dist/react/model-context/useAssistantDataUI.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantInstructions.d.ts +2 -2
- package/dist/react/model-context/useAssistantInstructions.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantTool.d.ts +2 -3
- package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantToolUI.d.ts +2 -3
- package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
- package/dist/react/model-context/useAuiToolOverrides.d.ts +1 -2
- package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -1
- package/dist/react/model-context/useInlineRender.d.ts +1 -2
- package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
- package/dist/react/model-context/useInteractable.d.ts +4 -5
- package/dist/react/model-context/useInteractable.d.ts.map +1 -1
- package/dist/react/model-context/useInteractable.js +4 -1
- package/dist/react/model-context/useInteractable.js.map +1 -1
- package/dist/react/model-context/useInteractableState.d.ts +1 -2
- package/dist/react/model-context/useInteractableState.d.ts.map +1 -1
- package/dist/react/model-context/useInteractableVersions.d.ts +1 -2
- package/dist/react/model-context/useInteractableVersions.d.ts.map +1 -1
- package/dist/react/model-context/useInteractableVersions.js +1 -1
- package/dist/react/model-context/useToolArgsStatus.d.ts +2 -3
- package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts +2 -3
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarFeedback.d.ts +2 -3
- package/dist/react/primitive-hooks/useActionBarFeedback.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarReload.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarSpeak.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarSpeak.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts +1 -2
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts +1 -2
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts +1 -2
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerCancel.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerDictate.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerDictate.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerSend.d.ts +1 -2
- package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerCancel.d.ts +1 -2
- package/dist/react/primitive-hooks/useEditComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerSend.d.ts +1 -2
- package/dist/react/primitive-hooks/useEditComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageBranching.d.ts +1 -2
- package/dist/react/primitive-hooks/useMessageBranching.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageError.d.ts +1 -2
- package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageReload.d.ts +1 -2
- package/dist/react/primitive-hooks/useMessageReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts +2 -3
- package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListNew.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadListNew.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessages.d.ts +1 -2
- package/dist/react/primitive-hooks/useThreadMessages.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useVoice.d.ts +3 -4
- package/dist/react/primitive-hooks/useVoice.d.ts.map +1 -1
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +2 -3
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.d.ts +4 -5
- package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerIf.d.ts +4 -5
- package/dist/react/primitives/composer/ComposerIf.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerQueue.d.ts +2 -3
- package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.d.ts +4 -5
- package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.js +27 -28
- package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.d.ts +4 -5
- package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.d.ts +13 -5
- package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.js +3 -2
- package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
- package/dist/react/primitives/message/MessageParts.d.ts +10 -10
- package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageQuote.d.ts +2 -3
- package/dist/react/primitives/message/MessageQuote.d.ts.map +1 -1
- package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts +2 -3
- package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
- package/dist/react/primitives/part/PartMessages.d.ts +4 -4
- package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
- package/dist/react/primitives/part/PartMessages.js +1 -0
- package/dist/react/primitives/part/PartMessages.js.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.d.ts +7 -8
- package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.js +6 -5
- package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
- package/dist/react/primitives/thread/ThreadSuggestions.d.ts +5 -6
- package/dist/react/primitives/thread/ThreadSuggestions.d.ts.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.d.ts +4 -5
- package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts +2 -3
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -1
- package/dist/react/providers/AttachmentByIndexProvider.d.ts +2 -3
- package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +1 -2
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +1 -2
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/MessageByIdProvider.d.ts +1 -2
- package/dist/react/providers/MessageByIdProvider.d.ts.map +1 -1
- package/dist/react/providers/MessageByIndexProvider.d.ts +1 -2
- package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/PartByIndexProvider.d.ts +1 -2
- package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/QueueItemByIndexProvider.d.ts +2 -3
- package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ReadonlyThreadProvider.d.ts +2 -3
- package/dist/react/providers/ReadonlyThreadProvider.d.ts.map +1 -1
- package/dist/react/providers/SuggestionByIndexProvider.d.ts +2 -3
- package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.d.ts +1 -2
- package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts +1 -2
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +1 -2
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +3 -2
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +17 -7
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +1 -2
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +2 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.d.ts +4 -5
- package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +3 -3
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts +2 -3
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts +3 -4
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/runManager.d.ts +2 -3
- package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/types.d.ts +17 -18
- package/dist/react/runtimes/assistant-transport/types.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts +4 -5
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts +1 -2
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts +1 -2
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +3 -26
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +152 -378
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +2 -2
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js +22 -2
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.d.ts +51 -18
- package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.js +125 -17
- package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +6 -6
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js +4 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts +1 -2
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/sdkIdentity.d.ts +5 -0
- package/dist/react/runtimes/cloud/sdkIdentity.d.ts.map +1 -0
- package/dist/react/runtimes/cloud/sdkIdentity.js +9 -0
- package/dist/react/runtimes/cloud/sdkIdentity.js.map +1 -0
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +1 -2
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts +1 -2
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/createMessageConverter.d.ts +1 -2
- package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
- package/dist/react/runtimes/createRuntimeExtras.d.ts +3 -4
- package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.d.ts +14 -4
- package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.js +26 -61
- package/dist/react/runtimes/external-message-converter.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.d.ts +1 -2
- package/dist/react/runtimes/useExternalStoreRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts +1 -2
- package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts.map +1 -1
- package/dist/react/runtimes/useLocalRuntime.d.ts +3 -4
- package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts +1 -2
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +3 -3
- package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
- package/dist/react/runtimes/useRuntimeAdapters.d.ts +4 -4
- package/dist/react/runtimes/useRuntimeAdapters.d.ts.map +1 -1
- package/dist/react/runtimes/useStreamingTiming.d.ts +2 -2
- package/dist/react/runtimes/useStreamingTiming.d.ts.map +1 -1
- package/dist/react/types/MessagePartComponentTypes.d.ts +26 -27
- package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
- package/dist/react/types/scopes/dataRenderers.d.ts +3 -4
- package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -1
- package/dist/react/types/scopes/interactables.d.ts +10 -11
- package/dist/react/types/scopes/interactables.d.ts.map +1 -1
- package/dist/react/types/scopes/tools.d.ts +4 -5
- package/dist/react/types/scopes/tools.d.ts.map +1 -1
- package/dist/react/utils/getMessageQuote.d.ts +1 -2
- package/dist/react/utils/getMessageQuote.d.ts.map +1 -1
- package/dist/react/utils/groupParts.d.ts +13 -9
- package/dist/react/utils/groupParts.d.ts.map +1 -1
- package/dist/react/utils/groupParts.js +6 -0
- package/dist/react/utils/groupParts.js.map +1 -1
- package/dist/react/utils/useJSONEqual.d.ts +3 -2
- package/dist/react/utils/useJSONEqual.d.ts.map +1 -1
- package/dist/react/utils/useJSONEqual.js +6 -1
- package/dist/react/utils/useJSONEqual.js.map +1 -1
- package/dist/react/utils/useJSONSchemaDependency.d.ts +6 -0
- package/dist/react/utils/useJSONSchemaDependency.d.ts.map +1 -0
- package/dist/react/utils/useJSONSchemaDependency.js +20 -0
- package/dist/react/utils/useJSONSchemaDependency.js.map +1 -0
- package/dist/runtime/api/assistant-runtime.d.ts +2 -3
- package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
- package/dist/runtime/api/attachment-runtime.d.ts +6 -7
- package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
- package/dist/runtime/api/bindings.d.ts +5 -6
- package/dist/runtime/api/bindings.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.d.ts +10 -10
- package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.d.ts +3 -4
- package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.js +3 -2
- package/dist/runtime/api/message-part-runtime.js.map +1 -1
- package/dist/runtime/api/message-runtime.d.ts +8 -6
- package/dist/runtime/api/message-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-runtime.js +3 -2
- package/dist/runtime/api/message-runtime.js.map +1 -1
- package/dist/runtime/api/paths.d.ts +6 -7
- package/dist/runtime/api/paths.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.d.ts +8 -8
- package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts +4 -5
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +10 -11
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.js +2 -5
- package/dist/runtime/api/thread-runtime.js.map +1 -1
- package/dist/runtime/base/base-assistant-runtime-core.d.ts +1 -2
- package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts +2 -2
- package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.js +46 -10
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts +10 -3
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js +212 -77
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +1 -2
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.js +12 -2
- package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +1 -2
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js +7 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts +1 -2
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -1
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts +1 -2
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/composer-runtime-core.d.ts +10 -11
- package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +4 -5
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +23 -16
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts +2 -3
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.d.ts +10 -4
- package/dist/runtime/queue/message-queue.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.js +70 -7
- package/dist/runtime/queue/message-queue.js.map +1 -1
- package/dist/runtime/queue/queue-item.d.ts +2 -3
- package/dist/runtime/queue/queue-item.d.ts.map +1 -1
- package/dist/runtime/utils/abortable-thread-load.d.ts +2 -3
- package/dist/runtime/utils/abortable-thread-load.d.ts.map +1 -1
- package/dist/runtime/utils/attachment-add-operations.d.ts +3 -4
- package/dist/runtime/utils/attachment-add-operations.d.ts.map +1 -1
- package/dist/runtime/utils/auto-status.d.ts +9 -6
- package/dist/runtime/utils/auto-status.d.ts.map +1 -1
- package/dist/runtime/utils/auto-status.js +12 -4
- package/dist/runtime/utils/auto-status.js.map +1 -1
- package/dist/runtime/utils/chat-model-adapter.d.ts +5 -6
- package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.d.ts +26 -15
- package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.js +51 -14
- package/dist/runtime/utils/external-message-conversion.js.map +1 -1
- package/dist/runtime/utils/external-store-message.d.ts +4 -5
- package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository-session.d.ts +3 -4
- package/dist/runtime/utils/message-repository-session.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.d.ts +4 -5
- package/dist/runtime/utils/message-repository.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.js +3 -3
- package/dist/runtime/utils/message-repository.js.map +1 -1
- package/dist/runtime/utils/pending-tool-calls.d.ts +2 -3
- package/dist/runtime/utils/pending-tool-calls.d.ts.map +1 -1
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +1 -2
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
- package/dist/runtime/utils/runtime-extras-brand.d.ts +2 -3
- package/dist/runtime/utils/runtime-extras-brand.d.ts.map +1 -1
- package/dist/runtime/utils/stored-message-parts.d.ts +21 -0
- package/dist/runtime/utils/stored-message-parts.d.ts.map +1 -0
- package/dist/runtime/utils/stored-message-parts.js +83 -0
- package/dist/runtime/utils/stored-message-parts.js.map +1 -0
- package/dist/runtime/utils/streaming-timing.d.ts +4 -5
- package/dist/runtime/utils/streaming-timing.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.d.ts +7 -6
- package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.js +4 -2
- package/dist/runtime/utils/thread-message-like.js.map +1 -1
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts +3 -4
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts.map +1 -1
- package/dist/runtime/utils/tool-call-tree.d.ts +4 -5
- package/dist/runtime/utils/tool-call-tree.d.ts.map +1 -1
- package/dist/runtimes/assistant-transport/utils.d.ts +1 -2
- package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-adapter.d.ts +9 -6
- package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-runtime-core.d.ts +1 -2
- package/dist/runtimes/external-store/external-store-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-shared-options.d.ts +2 -3
- package/dist/runtimes/external-store/external-store-shared-options.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +2 -3
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +4 -3
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js +36 -6
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/thread-message-converter.d.ts +2 -3
- package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +2 -3
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/internal.d.ts +1 -1
- package/dist/runtimes/local/local-runtime-core.d.ts +1 -2
- package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-runtime-options.d.ts +1 -2
- package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +2 -3
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +10 -5
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +57 -10
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/local/should-continue.d.ts +1 -2
- package/dist/runtimes/local/should-continue.d.ts.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +1 -2
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +1 -2
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +16 -17
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/title-generation.d.ts +7 -8
- package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/title.d.ts +2 -3
- package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/types.d.ts +8 -9
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +4 -5
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +2 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
- package/dist/store/clients/chain-of-thought-client.d.ts +1 -2
- package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
- package/dist/store/clients/external-thread.d.ts +3 -4
- package/dist/store/clients/external-thread.d.ts.map +1 -1
- package/dist/store/clients/external-thread.js +256 -211
- package/dist/store/clients/external-thread.js.map +1 -1
- package/dist/store/clients/model-context-client.d.ts +1 -2
- package/dist/store/clients/model-context-client.d.ts.map +1 -1
- package/dist/store/clients/no-op-composer-client.d.ts +1 -2
- package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
- package/dist/store/clients/runtime-adapter.d.ts +1 -2
- package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
- package/dist/store/clients/single-thread-list.d.ts +1 -2
- package/dist/store/clients/single-thread-list.d.ts.map +1 -1
- package/dist/store/clients/suggestions.d.ts +3 -4
- package/dist/store/clients/suggestions.d.ts.map +1 -1
- package/dist/store/clients/thread-message-client.d.ts +2 -3
- package/dist/store/clients/thread-message-client.d.ts.map +1 -1
- package/dist/store/clients/thread-selection-events.d.ts +1 -2
- package/dist/store/clients/thread-selection-events.d.ts.map +1 -1
- package/dist/store/clients/thread-tasks.d.ts +12 -0
- package/dist/store/clients/thread-tasks.d.ts.map +1 -0
- package/dist/store/clients/thread-tasks.js +69 -0
- package/dist/store/clients/thread-tasks.js.map +1 -0
- package/dist/store/env.d.ts +1 -2
- package/dist/store/env.d.ts.map +1 -1
- package/dist/store/index.d.ts +3 -2
- package/dist/store/index.js +3 -3
- package/dist/store/primitive-predicates.d.ts +11 -12
- package/dist/store/primitive-predicates.d.ts.map +1 -1
- package/dist/store/primitive-predicates.js +4 -4
- package/dist/store/primitive-predicates.js.map +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/handle-runtime-action.d.ts +1 -2
- package/dist/store/runtime-clients/handle-runtime-action.d.ts.map +1 -1
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts +1 -2
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts.map +1 -1
- package/dist/store/runtime-clients/liveRef.d.ts +1 -2
- package/dist/store/runtime-clients/liveRef.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts +1 -2
- package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +176 -128
- package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/useSubscribable.d.ts +1 -2
- package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
- package/dist/store/scope-registration.d.ts +2 -0
- package/dist/store/scope-registration.d.ts.map +1 -1
- package/dist/store/scopes/attachment.d.ts +4 -5
- package/dist/store/scopes/attachment.d.ts.map +1 -1
- package/dist/store/scopes/chain-of-thought.d.ts +5 -6
- package/dist/store/scopes/chain-of-thought.d.ts.map +1 -1
- package/dist/store/scopes/composer.d.ts +6 -7
- package/dist/store/scopes/composer.d.ts.map +1 -1
- package/dist/store/scopes/message.d.ts +6 -6
- package/dist/store/scopes/message.d.ts.map +1 -1
- package/dist/store/scopes/model-context.d.ts +3 -4
- package/dist/store/scopes/model-context.d.ts.map +1 -1
- package/dist/store/scopes/part.d.ts +4 -5
- package/dist/store/scopes/part.d.ts.map +1 -1
- package/dist/store/scopes/queue-item.d.ts +4 -4
- package/dist/store/scopes/queue-item.d.ts.map +1 -1
- package/dist/store/scopes/suggestion.d.ts +4 -5
- package/dist/store/scopes/suggestion.d.ts.map +1 -1
- package/dist/store/scopes/suggestions.d.ts +5 -6
- package/dist/store/scopes/suggestions.d.ts.map +1 -1
- package/dist/store/scopes/task.d.ts +35 -0
- package/dist/store/scopes/task.d.ts.map +1 -0
- package/dist/store/scopes/task.js +0 -0
- package/dist/store/scopes/thread-list-item.d.ts +5 -6
- package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
- package/dist/store/scopes/thread.d.ts +25 -6
- package/dist/store/scopes/thread.d.ts.map +1 -1
- package/dist/store/scopes/threads.d.ts +4 -5
- package/dist/store/scopes/threads.d.ts.map +1 -1
- package/dist/subscribable/subscribable.d.ts +15 -15
- package/dist/subscribable/subscribable.d.ts.map +1 -1
- package/dist/subscribable/subscribable.js +23 -15
- package/dist/subscribable/subscribable.js.map +1 -1
- package/dist/tests/remote-thread-list-test-helpers.d.ts +5 -6
- package/dist/tests/remote-thread-list-test-helpers.d.ts.map +1 -1
- package/dist/types/attachment.d.ts +9 -10
- package/dist/types/attachment.d.ts.map +1 -1
- package/dist/types/augmentations.d.ts +3 -4
- package/dist/types/augmentations.d.ts.map +1 -1
- package/dist/types/directive.d.ts +2 -3
- package/dist/types/directive.d.ts.map +1 -1
- package/dist/types/error.d.ts +8 -9
- package/dist/types/error.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/message.d.ts +53 -44
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js.map +1 -1
- package/dist/types/quote.d.ts +1 -2
- package/dist/types/quote.d.ts.map +1 -1
- package/dist/types/trigger.d.ts +2 -3
- package/dist/types/trigger.d.ts.map +1 -1
- package/dist/types/unsubscribe.d.ts +1 -2
- package/dist/types/unsubscribe.d.ts.map +1 -1
- package/dist/utils/abortable-iterable.d.ts +2 -3
- package/dist/utils/abortable-iterable.d.ts.map +1 -1
- package/dist/utils/abortable-iterable.js +30 -14
- package/dist/utils/abortable-iterable.js.map +1 -1
- package/dist/utils/composite-context-provider.d.ts +1 -2
- package/dist/utils/composite-context-provider.d.ts.map +1 -1
- package/dist/utils/data-url.d.ts +6 -7
- package/dist/utils/data-url.d.ts.map +1 -1
- package/dist/utils/getGroupStatus.d.ts +17 -2
- package/dist/utils/getGroupStatus.d.ts.map +1 -1
- package/dist/utils/getGroupStatus.js +32 -7
- package/dist/utils/getGroupStatus.js.map +1 -1
- package/dist/utils/id.d.ts +3 -4
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/image-media-type.d.ts +1 -2
- package/dist/utils/image-media-type.d.ts.map +1 -1
- package/dist/utils/invoke-user-callback.d.ts +1 -2
- package/dist/utils/invoke-user-callback.d.ts.map +1 -1
- package/dist/utils/json/is-json-equal.d.ts +1 -2
- package/dist/utils/json/is-json-equal.d.ts.map +1 -1
- package/dist/utils/json/is-json.d.ts +4 -5
- package/dist/utils/json/is-json.d.ts.map +1 -1
- package/dist/utils/json/stable-stringify-tool-args.d.ts +2 -3
- package/dist/utils/json/stable-stringify-tool-args.d.ts.map +1 -1
- package/dist/utils/normalizePartStatus.d.ts +4 -5
- package/dist/utils/normalizePartStatus.d.ts.map +1 -1
- package/dist/utils/notify-event-listeners.d.ts +1 -2
- package/dist/utils/notify-event-listeners.d.ts.map +1 -1
- package/dist/utils/record.d.ts +1 -2
- package/dist/utils/record.d.ts.map +1 -1
- package/dist/utils/silent-runtime-action.d.ts +2 -3
- package/dist/utils/silent-runtime-action.d.ts.map +1 -1
- package/dist/utils/text.d.ts +1 -2
- package/dist/utils/text.d.ts.map +1 -1
- package/dist/utils/wire-media.d.ts +3 -4
- package/dist/utils/wire-media.d.ts.map +1 -1
- package/dist/utils/wire-media.js +2 -2
- package/dist/utils/wire-media.js.map +1 -1
- package/package.json +15 -14
- package/src/adapters/attachment.ts +8 -1
- package/src/adapters/feedback.ts +1 -0
- package/src/adapters/speech.test.ts +236 -0
- package/src/adapters/speech.ts +17 -10
- package/src/adapters/thread-history.ts +3 -0
- package/src/index.ts +1 -0
- package/src/model-context/frame/host.test.ts +113 -1
- package/src/model-context/frame/host.ts +39 -12
- package/src/model-context/frame/provider.test.ts +45 -20
- package/src/model-context/interactable-composer-metadata.test.ts +30 -0
- package/src/model-context/interactable-composer-metadata.ts +10 -10
- package/src/react/RuntimeAdapter.test.ts +4 -1
- package/src/react/adapters/LocalStorageThreadListAdapter.test.ts +361 -0
- package/src/react/adapters/LocalStorageThreadListAdapter.tsx +69 -19
- package/src/react/client/DataRenderers.test.tsx +45 -0
- package/src/react/client/DataRenderers.ts +13 -9
- package/src/react/client/Interactables.test.ts +52 -4
- package/src/react/client/Interactables.ts +7 -1
- package/src/react/client/RemoteThreadList.concurrent.test.tsx +9 -3
- package/src/react/client/RemoteThreadList.test.ts +46 -7
- package/src/react/client/RemoteThreadList.ts +15 -2
- package/src/react/client/interactable-model-context.test.ts +44 -0
- package/src/react/client/interactable-model-context.ts +3 -2
- package/src/react/index.ts +5 -1
- package/src/react/interactables-legacy/Interactables.test.ts +9 -3
- package/src/react/interactables-legacy/useAssistantInteractable.test.tsx +150 -0
- package/src/react/interactables-legacy/useAssistantInteractable.ts +10 -1
- package/src/react/model-context/useInteractable.test.tsx +204 -0
- package/src/react/model-context/useInteractable.ts +3 -0
- package/src/react/primitive-hooks/useActionBarCopy.test.ts +5 -6
- package/src/react/primitive-hooks/useSuggestionTrigger.test.ts +0 -1
- package/src/react/primitives/generativeUI/GenerativeUI.test.tsx +54 -0
- package/src/react/primitives/generativeUI/GenerativeUI.tsx +13 -18
- package/src/react/primitives/message/MessageGroupedParts.test.tsx +99 -0
- package/src/react/primitives/message/MessageGroupedParts.tsx +15 -4
- package/src/react/primitives/part/PartMessages.test.tsx +104 -1
- package/src/react/primitives/part/PartMessages.tsx +1 -0
- package/src/react/primitives/thread/ThreadMessages.test.tsx +160 -0
- package/src/react/primitives/thread/ThreadMessages.tsx +8 -5
- package/src/react/providers/ReadonlyThreadProvider.test.tsx +56 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.layout.test.tsx +62 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.retry.test.tsx +2 -2
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +23 -20
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.title.test.tsx +24 -17
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +39 -24
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +7 -1
- package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +73 -46
- package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.test.tsx +66 -1
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.ts +20 -14
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +323 -1
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +190 -523
- package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +81 -0
- package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +27 -1
- package/src/react/runtimes/cloud/auiV0.ts +281 -26
- package/src/react/runtimes/cloud/auiV0DecodeSafely.test.ts +522 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.test.ts +21 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.ts +7 -1
- package/src/react/runtimes/cloud/sdkIdentity.ts +9 -0
- package/src/react/runtimes/cloud/useCloudThreadListAdapter.test.tsx +18 -4
- package/src/react/runtimes/external-message-converter.test.ts +143 -4
- package/src/react/runtimes/external-message-converter.ts +39 -93
- package/src/react/runtimes/remote-thread-hook-on-tap.test.ts +2 -1
- package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +8 -2
- package/src/react/runtimes/useExternalStoreRuntime.suggestions.test.tsx +6 -2
- package/src/react/runtimes/useRemoteThreadListRuntime.concurrent.test.tsx +84 -4
- package/src/react/runtimes/useRemoteThreadListRuntime.ts +6 -2
- package/src/react/utils/groupParts.ts +12 -1
- package/src/react/utils/useJSONEqual.ts +9 -0
- package/src/react/utils/useJSONSchemaDependency.ts +22 -0
- package/src/runtime/api/message-part-runtime.ts +4 -1
- package/src/runtime/api/message-runtime.ts +15 -2
- package/src/runtime/api/thread-runtime.test.ts +58 -0
- package/src/runtime/api/thread-runtime.ts +2 -4
- package/src/runtime/base/base-composer-runtime-core.ts +69 -16
- package/src/runtime/base/base-thread-runtime-core.test.ts +1799 -49
- package/src/runtime/base/base-thread-runtime-core.ts +296 -94
- package/src/runtime/base/default-edit-composer-runtime-core.ts +12 -2
- package/src/runtime/base/default-thread-composer-runtime-core.ts +12 -1
- package/src/runtime/interfaces/thread-runtime-core.ts +8 -0
- package/src/runtime/queue/message-queue.ts +79 -7
- package/src/runtime/utils/auto-status.test.ts +112 -1
- package/src/runtime/utils/auto-status.ts +31 -5
- package/src/runtime/utils/external-message-conversion.test.ts +177 -0
- package/src/runtime/utils/external-message-conversion.ts +128 -33
- package/src/runtime/utils/message-repository.test.ts +49 -0
- package/src/runtime/utils/message-repository.ts +3 -3
- package/src/runtime/utils/stored-message-parts.ts +174 -0
- package/src/runtime/utils/thread-message-like.test.ts +52 -0
- package/src/runtime/utils/thread-message-like.ts +11 -2
- package/src/runtimes/external-store/external-store-adapter.ts +4 -0
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +74 -9
- package/src/runtimes/local/local-thread-runtime-core.test.ts +189 -12
- package/src/runtimes/local/local-thread-runtime-core.ts +91 -10
- package/src/runtimes/tool-invocations/EDGE_CASES.md +2 -6
- package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +133 -0
- package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +10 -6
- package/src/store/clients/external-thread.ts +53 -14
- package/src/store/clients/thread-tasks.test.ts +274 -0
- package/src/store/clients/thread-tasks.ts +138 -0
- package/src/store/index.ts +8 -0
- package/src/store/primitive-predicates.test.ts +64 -5
- package/src/store/primitive-predicates.ts +10 -2
- package/src/store/runtime-clients/thread-runtime-client.test.tsx +110 -0
- package/src/store/runtime-clients/thread-runtime-client.ts +31 -1
- package/src/store/scope-registration.ts +2 -0
- package/src/store/scopes/message.ts +4 -1
- package/src/store/scopes/task.ts +34 -0
- package/src/store/scopes/thread.ts +16 -0
- package/src/store/thread-tasks.test.tsx +209 -0
- package/src/subscribable/subscribable.test.ts +161 -1
- package/src/subscribable/subscribable.ts +25 -15
- package/src/tests/MessageRepository.test.ts +1 -5
- package/src/tests/attachment-adapters.test.ts +16 -1
- package/src/tests/auiV0Encode.test.ts +304 -0
- package/src/tests/base-composer-runtime-core-addAttachment.test.ts +6 -6
- package/src/tests/base-composer-runtime-core-send.test.ts +51 -0
- package/src/tests/base-composer-runtime-core.test.ts +329 -6
- package/src/tests/composer-can-cancel.test.ts +35 -6
- package/src/tests/composer-can-send.test.ts +22 -0
- package/src/tests/default-edit-composer-runtime-core.test.ts +47 -0
- package/src/tests/external-store-thread-runtime-core-adapter.test.ts +369 -16
- package/src/tests/external-store-thread-runtime-core.test.ts +31 -0
- package/src/tests/external-thread-attachments.test.tsx +91 -23
- package/src/tests/external-thread-feedback.test.tsx +20 -7
- package/src/tests/external-thread-parity.test.tsx +35 -1
- package/src/tests/groupParts.test.ts +71 -0
- package/src/tests/message-queue.test.ts +290 -2
- package/src/tests/remote-thread-list-reactive-threadId.test.ts +51 -0
- package/src/tests/thread-switch-events.test.tsx +11 -7
- package/src/tests/useRemoteThreadListRuntime-controlled.test.tsx +45 -1
- package/src/types/index.ts +1 -0
- package/src/types/message.test.ts +19 -0
- package/src/types/message.ts +23 -7
- package/src/utils/abortable-iterable.test.ts +115 -0
- package/src/utils/abortable-iterable.ts +34 -23
- package/src/utils/getGroupStatus.test.ts +70 -4
- package/src/utils/getGroupStatus.ts +35 -12
- package/src/utils/wire-media.test.ts +10 -0
- package/src/utils/wire-media.ts +6 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { gateInteractableComposerMetadata } from "../../model-context/interactable-composer-metadata.js";
|
|
2
2
|
import { notifyEventListeners } from "../../utils/notify-event-listeners.js";
|
|
3
|
-
import { BaseSubscribable } from "../../subscribable/subscribable.js";
|
|
3
|
+
import { BaseSubscribable, notifySubscribers } from "../../subscribable/subscribable.js";
|
|
4
4
|
import { generateId } from "../../utils/id.js";
|
|
5
5
|
import { getThreadMessageText } from "../../utils/text.js";
|
|
6
6
|
import { ExportedMessageRepository, MessageRepository } from "../utils/message-repository.js";
|
|
@@ -22,11 +22,13 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
22
22
|
_getBaseMessages() {
|
|
23
23
|
return this.repository.getMessages();
|
|
24
24
|
}
|
|
25
|
+
_commitVoiceMessage(_message) {}
|
|
25
26
|
get messages() {
|
|
26
27
|
if (this._voiceMessages.length === 0) return this._getBaseMessages();
|
|
27
28
|
const base = this._getBaseMessages();
|
|
28
29
|
if (this._cachedVoiceGeneration !== this._voiceGeneration || this._cachedMergedBase !== base) {
|
|
29
|
-
|
|
30
|
+
const baseMessageIds = new Set(base.map((message) => message.id));
|
|
31
|
+
this._cachedMergedMessages = [...base, ...this._voiceMessages.filter((message) => !baseMessageIds.has(message.id))];
|
|
30
32
|
this._cachedVoiceGeneration = this._voiceGeneration;
|
|
31
33
|
this._cachedMergedBase = base;
|
|
32
34
|
}
|
|
@@ -80,7 +82,15 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
80
82
|
getEditComposer(messageId) {
|
|
81
83
|
return this._editComposers.get(messageId);
|
|
82
84
|
}
|
|
85
|
+
_isVoiceMessage(messageId) {
|
|
86
|
+
return messageId !== null && this._voiceMessages.some((m) => m.id === messageId);
|
|
87
|
+
}
|
|
88
|
+
_resolveAppendParent(parentId) {
|
|
89
|
+
return this._isVoiceMessage(parentId) ? this._getBaseMessages().at(-1)?.id ?? null : parentId;
|
|
90
|
+
}
|
|
83
91
|
beginEdit(messageId) {
|
|
92
|
+
if (this.voice) throw new Error("Cannot edit a message while a voice session is connected");
|
|
93
|
+
if (this._isVoiceMessage(messageId)) throw new Error("Voice transcript messages cannot be edited");
|
|
84
94
|
if (this._editComposers.has(messageId)) throw new Error("Edit already in progress");
|
|
85
95
|
this._editComposers.set(messageId, new DefaultEditComposerRuntimeCore(this, () => this._editComposers.delete(messageId), this.repository.getMessage(messageId)));
|
|
86
96
|
this._notifySubscribers();
|
|
@@ -112,23 +122,43 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
112
122
|
if (!subscribers) return;
|
|
113
123
|
notifyEventListeners(subscribers, payload, `Thread runtime "${event}"`);
|
|
114
124
|
}
|
|
115
|
-
|
|
125
|
+
_notifyToolApprovalAnswered(messageId, toolCallId, toolName, approved) {
|
|
126
|
+
this._notifyEventSubscribers("toolApprovalAnswered", {
|
|
127
|
+
messageId,
|
|
128
|
+
toolCallId,
|
|
129
|
+
toolName,
|
|
130
|
+
approved
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
submitFeedback({ messageId, type, comment }) {
|
|
116
134
|
const adapter = this.adapters?.feedback;
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
135
|
+
const entry = this.getMessageById(messageId);
|
|
136
|
+
if (!entry) throw new Error(`Message not found: ${messageId}`);
|
|
137
|
+
const { message, parentId } = entry;
|
|
138
|
+
const trimmed = comment?.trim();
|
|
139
|
+
const feedback = {
|
|
140
|
+
type,
|
|
141
|
+
...trimmed ? { comment: trimmed } : void 0
|
|
142
|
+
};
|
|
143
|
+
adapter?.submit({
|
|
120
144
|
message,
|
|
121
|
-
|
|
145
|
+
...feedback
|
|
122
146
|
});
|
|
123
147
|
if (message.role === "assistant") {
|
|
124
148
|
const updatedMessage = {
|
|
125
149
|
...message,
|
|
126
150
|
metadata: {
|
|
127
151
|
...message.metadata,
|
|
128
|
-
submittedFeedback:
|
|
152
|
+
submittedFeedback: feedback
|
|
129
153
|
}
|
|
130
154
|
};
|
|
131
|
-
this.
|
|
155
|
+
const voiceIdx = this._voiceMessages.findIndex((voiceMessage) => voiceMessage.id === messageId);
|
|
156
|
+
if (voiceIdx === -1) this.repository.addOrUpdateMessage(parentId, updatedMessage);
|
|
157
|
+
else {
|
|
158
|
+
this._voiceMessages[voiceIdx] = updatedMessage;
|
|
159
|
+
if (this._currentAssistantMsg === message) this._currentAssistantMsg = updatedMessage;
|
|
160
|
+
this._markVoiceMessagesDirty();
|
|
161
|
+
}
|
|
132
162
|
}
|
|
133
163
|
this._notifySubscribers();
|
|
134
164
|
}
|
|
@@ -137,35 +167,69 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
137
167
|
speak(messageId) {
|
|
138
168
|
const adapter = this.adapters?.speech;
|
|
139
169
|
if (!adapter) throw new Error("Speech adapter not configured");
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
const
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
this._stopSpeaking = () => {
|
|
159
|
-
utterance.cancel();
|
|
160
|
-
unsub();
|
|
161
|
-
this.speech = void 0;
|
|
170
|
+
const entry = this.getMessageById(messageId);
|
|
171
|
+
if (!entry) throw new Error(`Message not found: ${messageId}`);
|
|
172
|
+
const { message } = entry;
|
|
173
|
+
const previousStop = this._stopSpeaking;
|
|
174
|
+
let utterance;
|
|
175
|
+
try {
|
|
176
|
+
previousStop?.();
|
|
177
|
+
utterance = adapter.speak(getThreadMessageText(message));
|
|
178
|
+
} catch (error) {
|
|
179
|
+
if (previousStop && !this._stopSpeaking) try {
|
|
180
|
+
this._notifySubscribers();
|
|
181
|
+
} catch (notificationError) {
|
|
182
|
+
console.error("[assistant-ui] Speech rollback notification threw", notificationError);
|
|
183
|
+
}
|
|
184
|
+
throw error;
|
|
185
|
+
}
|
|
186
|
+
let unsub;
|
|
187
|
+
const clear = () => {
|
|
162
188
|
this._stopSpeaking = void 0;
|
|
189
|
+
this.speech = void 0;
|
|
190
|
+
const cleanup = unsub;
|
|
191
|
+
unsub = void 0;
|
|
192
|
+
cleanup?.();
|
|
193
|
+
};
|
|
194
|
+
const stop = () => {
|
|
195
|
+
if (this._stopSpeaking !== stop) return;
|
|
196
|
+
try {
|
|
197
|
+
clear();
|
|
198
|
+
} finally {
|
|
199
|
+
utterance.cancel();
|
|
200
|
+
}
|
|
163
201
|
};
|
|
202
|
+
const update = () => {
|
|
203
|
+
if (this._stopSpeaking !== stop) return;
|
|
204
|
+
if (utterance.status.type === "ended") notifySubscribers([clear, () => this._notifySubscribers()]);
|
|
205
|
+
else {
|
|
206
|
+
this.speech = {
|
|
207
|
+
messageId,
|
|
208
|
+
status: utterance.status
|
|
209
|
+
};
|
|
210
|
+
this._notifySubscribers();
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
this._stopSpeaking = stop;
|
|
214
|
+
try {
|
|
215
|
+
unsub = utterance.subscribe(update);
|
|
216
|
+
if (this._stopSpeaking !== stop) {
|
|
217
|
+
unsub();
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
update();
|
|
221
|
+
} catch (error) {
|
|
222
|
+
if (this._stopSpeaking === stop) try {
|
|
223
|
+
notifySubscribers([stop, () => this._notifySubscribers()]);
|
|
224
|
+
} catch (cleanupError) {
|
|
225
|
+
console.error("[assistant-ui] Speech rollback cleanup threw", cleanupError);
|
|
226
|
+
}
|
|
227
|
+
throw error;
|
|
228
|
+
}
|
|
164
229
|
}
|
|
165
230
|
stopSpeaking() {
|
|
166
231
|
if (!this._stopSpeaking) throw new Error("No message is being spoken");
|
|
167
|
-
this._stopSpeaking();
|
|
168
|
-
this._notifySubscribers();
|
|
232
|
+
notifySubscribers([this._stopSpeaking, () => this._notifySubscribers()]);
|
|
169
233
|
}
|
|
170
234
|
_voiceSession;
|
|
171
235
|
_voiceUnsubs = [];
|
|
@@ -177,51 +241,98 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
177
241
|
this._voiceVolumeSubscribers.add(callback);
|
|
178
242
|
return () => this._voiceVolumeSubscribers.delete(callback);
|
|
179
243
|
};
|
|
244
|
+
_onVoiceConnected() {}
|
|
245
|
+
_onVoiceDisconnected() {}
|
|
246
|
+
_isRunActive() {
|
|
247
|
+
if (this.isRunning) return true;
|
|
248
|
+
const last = this._getBaseMessages().at(-1);
|
|
249
|
+
return last?.role === "assistant" && (last.status.type === "running" || last.status.type === "requires-action");
|
|
250
|
+
}
|
|
180
251
|
connectVoice() {
|
|
181
252
|
const adapter = this.adapters?.voice;
|
|
182
253
|
if (!adapter) throw new Error("Voice adapter not configured");
|
|
183
|
-
this.
|
|
184
|
-
const
|
|
254
|
+
if (this._isRunActive()) throw new Error("Cannot start a voice session while a run is in progress or paused on a pending tool action");
|
|
255
|
+
const replacing = this._voiceSession !== void 0;
|
|
256
|
+
try {
|
|
257
|
+
this._disconnectVoice(false);
|
|
258
|
+
} catch (error) {
|
|
259
|
+
console.error("[assistant-ui] Voice cleanup threw before reconnect", error);
|
|
260
|
+
}
|
|
261
|
+
let session;
|
|
262
|
+
try {
|
|
263
|
+
session = adapter.connect({});
|
|
264
|
+
} catch (error) {
|
|
265
|
+
if (replacing && this._voiceSession === void 0) this._onVoiceDisconnected();
|
|
266
|
+
throw error;
|
|
267
|
+
}
|
|
185
268
|
this._voiceSession = session;
|
|
186
269
|
const unsubs = [];
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
270
|
+
this._voiceUnsubs = unsubs;
|
|
271
|
+
const finishDetachedSetup = () => {
|
|
272
|
+
if (this._voiceSession === session && this._voiceUnsubs === unsubs) return false;
|
|
273
|
+
try {
|
|
274
|
+
notifySubscribers(unsubs.splice(0));
|
|
275
|
+
} catch (error) {
|
|
276
|
+
console.error("[assistant-ui] Detached voice setup cleanup threw", error);
|
|
277
|
+
}
|
|
278
|
+
return true;
|
|
192
279
|
};
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
this._finishVoiceAssistantMessage();
|
|
198
|
-
this._voiceSession = void 0;
|
|
199
|
-
this.voice = void 0;
|
|
200
|
-
} else this.voice = {
|
|
201
|
-
status,
|
|
280
|
+
try {
|
|
281
|
+
let currentMode = "listening";
|
|
282
|
+
this.voice = {
|
|
283
|
+
status: session.status,
|
|
202
284
|
isMuted: session.isMuted,
|
|
203
285
|
mode: currentMode
|
|
204
286
|
};
|
|
287
|
+
this._voiceVolume = 0;
|
|
205
288
|
this._notifySubscribers();
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
289
|
+
if (finishDetachedSetup()) return;
|
|
290
|
+
unsubs.push(session.onStatusChange((status) => {
|
|
291
|
+
if (this._voiceSession !== session) return;
|
|
292
|
+
if (status.type === "ended") {
|
|
293
|
+
this._finishVoiceAssistantMessage();
|
|
294
|
+
this._voiceSession = void 0;
|
|
295
|
+
this.voice = void 0;
|
|
296
|
+
this._onVoiceDisconnected();
|
|
297
|
+
} else this.voice = {
|
|
298
|
+
status,
|
|
299
|
+
isMuted: session.isMuted,
|
|
300
|
+
mode: currentMode
|
|
213
301
|
};
|
|
214
302
|
this._notifySubscribers();
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
303
|
+
}));
|
|
304
|
+
if (finishDetachedSetup()) return;
|
|
305
|
+
unsubs.push(session.onModeChange((mode) => {
|
|
306
|
+
currentMode = mode;
|
|
307
|
+
if (this.voice) {
|
|
308
|
+
this.voice = {
|
|
309
|
+
...this.voice,
|
|
310
|
+
mode
|
|
311
|
+
};
|
|
312
|
+
this._notifySubscribers();
|
|
313
|
+
}
|
|
314
|
+
}));
|
|
315
|
+
if (finishDetachedSetup()) return;
|
|
316
|
+
unsubs.push(session.onVolumeChange((volume) => {
|
|
317
|
+
this._voiceVolume = volume;
|
|
318
|
+
notifyEventListeners(this._voiceVolumeSubscribers, void 0, "Voice volume");
|
|
319
|
+
}));
|
|
320
|
+
if (finishDetachedSetup()) return;
|
|
321
|
+
unsubs.push(session.onTranscript((transcript) => {
|
|
322
|
+
this._handleVoiceTranscript(transcript);
|
|
323
|
+
}));
|
|
324
|
+
if (!finishDetachedSetup()) this._onVoiceConnected();
|
|
325
|
+
} catch (error) {
|
|
326
|
+
if (this._voiceSession === session && this._voiceUnsubs === unsubs) {
|
|
327
|
+
try {
|
|
328
|
+
this._disconnectVoice(false);
|
|
329
|
+
} catch (cleanupError) {
|
|
330
|
+
console.error("[assistant-ui] Voice rollback cleanup threw", cleanupError);
|
|
331
|
+
}
|
|
332
|
+
if (replacing && this._voiceSession === void 0) this._onVoiceDisconnected();
|
|
333
|
+
} else finishDetachedSetup();
|
|
334
|
+
throw error;
|
|
335
|
+
}
|
|
225
336
|
}
|
|
226
337
|
_currentAssistantMsg = null;
|
|
227
338
|
_handleVoiceTranscript(transcript) {
|
|
@@ -230,21 +341,26 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
230
341
|
this._finishVoiceAssistantMessage();
|
|
231
342
|
this._currentAssistantMsg = null;
|
|
232
343
|
if (transcript.isFinal) {
|
|
233
|
-
|
|
344
|
+
const message = {
|
|
234
345
|
id: generateId(),
|
|
235
346
|
role: "user",
|
|
236
347
|
content: [{
|
|
237
348
|
type: "text",
|
|
238
349
|
text: transcript.text
|
|
239
350
|
}],
|
|
240
|
-
metadata: {
|
|
351
|
+
metadata: {
|
|
352
|
+
modality: "voice",
|
|
353
|
+
custom: {}
|
|
354
|
+
},
|
|
241
355
|
createdAt: /* @__PURE__ */ new Date(),
|
|
242
356
|
status: {
|
|
243
357
|
type: "complete",
|
|
244
358
|
reason: "unknown"
|
|
245
359
|
},
|
|
246
360
|
attachments: []
|
|
247
|
-
}
|
|
361
|
+
};
|
|
362
|
+
this._voiceMessages.push(message);
|
|
363
|
+
this._commitVoiceMessage(message);
|
|
248
364
|
this._markVoiceMessagesDirty();
|
|
249
365
|
this._notifySubscribers();
|
|
250
366
|
}
|
|
@@ -266,6 +382,7 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
266
382
|
unstable_annotations: [],
|
|
267
383
|
unstable_data: [],
|
|
268
384
|
steps: [],
|
|
385
|
+
modality: "voice",
|
|
269
386
|
custom: {}
|
|
270
387
|
},
|
|
271
388
|
status,
|
|
@@ -286,12 +403,15 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
286
403
|
this._voiceMessages[idx] = updated;
|
|
287
404
|
this._currentAssistantMsg = updated;
|
|
288
405
|
}
|
|
289
|
-
if (transcript.isFinal)
|
|
406
|
+
if (transcript.isFinal) {
|
|
407
|
+
this._commitVoiceMessage(this._currentAssistantMsg);
|
|
408
|
+
this._currentAssistantMsg = null;
|
|
409
|
+
}
|
|
290
410
|
this._markVoiceMessagesDirty();
|
|
291
411
|
this._notifySubscribers();
|
|
292
412
|
}
|
|
293
413
|
}
|
|
294
|
-
_finishVoiceAssistantMessage() {
|
|
414
|
+
_finishVoiceAssistantMessage(notify = true) {
|
|
295
415
|
const last = this._voiceMessages.at(-1);
|
|
296
416
|
if (last?.role === "assistant" && last.status.type === "running") {
|
|
297
417
|
const idx = this._voiceMessages.length - 1;
|
|
@@ -302,23 +422,38 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
|
|
|
302
422
|
reason: "stop"
|
|
303
423
|
}
|
|
304
424
|
};
|
|
425
|
+
this._commitVoiceMessage(this._voiceMessages[idx]);
|
|
426
|
+
this._currentAssistantMsg = null;
|
|
305
427
|
this._markVoiceMessagesDirty();
|
|
306
|
-
this._notifySubscribers();
|
|
428
|
+
if (notify) this._notifySubscribers();
|
|
307
429
|
}
|
|
308
430
|
}
|
|
309
431
|
disconnectVoice() {
|
|
310
|
-
this.
|
|
432
|
+
this._disconnectVoice(true);
|
|
433
|
+
}
|
|
434
|
+
_disconnectVoice(fireHook) {
|
|
435
|
+
this._finishVoiceAssistantMessage(false);
|
|
311
436
|
this._currentAssistantMsg = null;
|
|
312
|
-
|
|
437
|
+
const unsubs = this._voiceUnsubs.splice(0);
|
|
313
438
|
this._voiceUnsubs = [];
|
|
314
|
-
this._voiceSession
|
|
439
|
+
const session = this._voiceSession;
|
|
315
440
|
this._voiceSession = void 0;
|
|
316
441
|
this.voice = void 0;
|
|
317
442
|
this._voiceVolume = 0;
|
|
318
|
-
|
|
443
|
+
const stopSpeaking = this.speech && this._isVoiceMessage(this.speech.messageId) ? this._stopSpeaking : void 0;
|
|
319
444
|
this._voiceMessages = [];
|
|
320
445
|
this._markVoiceMessagesDirty();
|
|
321
|
-
|
|
446
|
+
try {
|
|
447
|
+
notifySubscribers([
|
|
448
|
+
...unsubs,
|
|
449
|
+
...stopSpeaking ? [stopSpeaking] : [],
|
|
450
|
+
...session ? [() => session.disconnect()] : [],
|
|
451
|
+
() => notifyEventListeners(this._voiceVolumeSubscribers, void 0, "Voice volume"),
|
|
452
|
+
() => this._notifySubscribers()
|
|
453
|
+
]);
|
|
454
|
+
} finally {
|
|
455
|
+
if (fireHook && session && this._voiceSession === void 0) this._onVoiceDisconnected();
|
|
456
|
+
}
|
|
322
457
|
}
|
|
323
458
|
muteVoice() {
|
|
324
459
|
if (!this._voiceSession) throw new Error("No active voice session");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-thread-runtime-core.js","names":["AppendMessage","ThreadAssistantMessage","ThreadMessage","Unsubscribe","ModelContextProvider","getThreadMessageText","generateId","ExportedMessageRepository","MessageRepository","DefaultThreadComposerRuntimeCore","AddToolResultOptions","ResumeToolCallOptions","RespondToToolApprovalOptions","ThreadSuggestion","SubmitFeedbackOptions","ThreadRuntimeCore","SpeechState","VoiceSessionState","RuntimeCapabilities","ThreadRuntimeEventCallback","ThreadRuntimeEventPayload","ThreadRuntimeEventType","StartRunConfig","ResumeRunConfig","DefaultEditComposerRuntimeCore","SpeechSynthesisAdapter","FeedbackAdapter","AttachmentAdapter","RealtimeVoiceAdapter","ThreadMessageLike","notifyEventListeners","gateInteractableComposerMetadata","BaseSubscribable","BaseThreadAdapters","speech","feedback","attachments","voice","BaseThreadRuntimeCore","_isInitialized","repository","adapters","isDisabled","isSendDisabled","isLoading","suggestions","extras","capabilities","append","message","deleteMessage","messageId","Promise","startRun","config","resumeRun","addToolResult","options","resumeToolCall","respondToToolApproval","cancelRun","exportExternalState","importExternalState","state","unstable_notifySessionReset","_voiceMessages","_voiceGeneration","_cachedMergedMessages","_cachedVoiceGeneration","_cachedMergedBase","_markVoiceMessagesDirty","_getBaseMessages","getMessages","messages","length","base","mostRecentAssistantMessage","this","role","metadata","unstable_state","composer","_contextProvider","constructor","getModelContext","enrichAppendMetadata","anchorId","parentId","parentIndex","findIndex","m","id","composerMetadata","unstable_composerMetadata","slice","custom","_editComposers","Map","getEditComposer","get","beginEdit","has","Error","set","delete","getMessage","_notifySubscribers","getMessageById","baseMessages","voiceIdx","at","index","undefined","getBranches","some","switchToBranch","branchId","_notifyEventSubscribers","event","E","payload","subscribers","_eventSubscribers","submitFeedback","type","adapter","submit","updatedMessage","submittedFeedback","addOrUpdateMessage","_stopSpeaking","speak","utterance","unsub","subscribe","status","cancel","stopSpeaking","_voiceSession","Session","_voiceUnsubs","Array","_voiceVolume","_voiceVolumeSubscribers","Set","getVoiceVolume","subscribeVoiceVolume","callback","add","connectVoice","disconnectVoice","session","connect","unsubs","currentMode","Mode","isMuted","mode","push","onStatusChange","_finishVoiceAssistantMessage","onModeChange","onVolumeChange","volume","onTranscript","transcript","_handleVoiceTranscript","_currentAssistantMsg","TranscriptItem","ensureInitialized","isFinal","content","text","createdAt","Date","reason","unstable_annotations","unstable_data","steps","idx","indexOf","updated","last","disconnect","muteVoice","mute","unmuteVoice","unmute","export","import","data","clear","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 { BaseSubscribable } from \"../../subscribable/subscribable\";\n\ntype BaseThreadAdapters = {\n speech?: SpeechSynthesisAdapter | undefined;\n feedback?: FeedbackAdapter | undefined;\n attachments?: AttachmentAdapter | undefined;\n voice?: RealtimeVoiceAdapter | undefined;\n};\n\nexport abstract class BaseThreadRuntimeCore\n extends BaseSubscribable\n implements ThreadRuntimeCore\n{\n private _isInitialized = false;\n\n protected repository = new MessageRepository();\n public abstract get adapters(): BaseThreadAdapters | undefined;\n public abstract get isDisabled(): boolean;\n public abstract get isSendDisabled(): boolean;\n public abstract get isLoading(): boolean;\n public abstract get suggestions(): readonly ThreadSuggestion[];\n public abstract get extras(): unknown;\n\n public abstract get capabilities(): RuntimeCapabilities;\n public abstract append(message: AppendMessage): void;\n public abstract deleteMessage(messageId: string): void | Promise<void>;\n public abstract startRun(config: StartRunConfig): void;\n public abstract resumeRun(config: ResumeRunConfig): void;\n public abstract addToolResult(options: AddToolResultOptions): void;\n public abstract resumeToolCall(options: ResumeToolCallOptions): void;\n public abstract respondToToolApproval(\n options: RespondToToolApprovalOptions,\n ): Promise<void>;\n public abstract cancelRun(): void;\n public abstract exportExternalState(): any;\n public abstract importExternalState(state: any): void;\n public abstract unstable_notifySessionReset(): void;\n\n protected _voiceMessages: ThreadMessage[] = [];\n protected _voiceGeneration = 0;\n private _cachedMergedMessages: readonly ThreadMessage[] | null = null;\n private _cachedVoiceGeneration = -1;\n private _cachedMergedBase: readonly ThreadMessage[] | null = null;\n\n protected _markVoiceMessagesDirty() {\n this._voiceGeneration++;\n this._cachedMergedMessages = null;\n }\n\n protected _getBaseMessages(): readonly ThreadMessage[] {\n return this.repository.getMessages();\n }\n\n public get messages(): readonly ThreadMessage[] {\n if (this._voiceMessages.length === 0) {\n return this._getBaseMessages();\n }\n const base = this._getBaseMessages();\n if (\n this._cachedVoiceGeneration !== this._voiceGeneration ||\n this._cachedMergedBase !== base\n ) {\n this._cachedMergedMessages = [...base, ...this._voiceMessages];\n this._cachedVoiceGeneration = this._voiceGeneration;\n this._cachedMergedBase = base;\n }\n return this._cachedMergedMessages!;\n }\n\n public get state() {\n let mostRecentAssistantMessage: (typeof this.messages)[number] | undefined;\n for (const message of this.messages) {\n if (message.role === \"assistant\") {\n mostRecentAssistantMessage = message;\n }\n }\n\n return mostRecentAssistantMessage?.metadata.unstable_state ?? null;\n }\n\n public readonly composer = new DefaultThreadComposerRuntimeCore(this);\n\n private readonly _contextProvider: ModelContextProvider;\n\n constructor(_contextProvider: ModelContextProvider) {\n super();\n this._contextProvider = _contextProvider;\n }\n\n public getModelContext() {\n return this._contextProvider.getModelContext();\n }\n\n /**\n * Stamps provider-contributed composer metadata onto an outgoing message.\n * Called at dispatch rather than in the composer, so programmatic sends are\n * covered too, and exactly once per message: a queued send is stamped when\n * it leaves the lane, never when it enters.\n *\n * Only user messages are stamped, matching the readers: both the version\n * fold and the model injection skip every other role.\n *\n * @param anchorId Message the gated branch prefix ends at. A queued send\n * passes the current tail, having waited through a run that grew the prefix\n * past the parent it was created with.\n */\n protected enrichAppendMetadata(\n message: AppendMessage,\n anchorId: string | null = message.parentId,\n ): AppendMessage {\n if (message.role !== \"user\") return message;\n const messages = this.messages;\n const parentIndex =\n anchorId === null ? -1 : messages.findIndex((m) => m.id === anchorId);\n const composerMetadata = gateInteractableComposerMetadata(\n this.getModelContext().unstable_composerMetadata,\n messages.slice(0, parentIndex + 1),\n );\n if (!composerMetadata) return message;\n return {\n ...message,\n metadata: {\n ...message.metadata,\n custom: { ...message.metadata?.custom, ...composerMetadata },\n },\n };\n }\n\n private _editComposers = new Map<string, DefaultEditComposerRuntimeCore>();\n public getEditComposer(messageId: string) {\n return this._editComposers.get(messageId);\n }\n public beginEdit(messageId: string) {\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 public submitFeedback({ messageId, type }: SubmitFeedbackOptions) {\n const adapter = this.adapters?.feedback;\n if (!adapter) throw new Error(\"Feedback adapter not configured\");\n\n const { message, parentId } = this.repository.getMessage(messageId);\n adapter.submit({ message, type });\n\n if (message.role === \"assistant\") {\n const updatedMessage: ThreadMessage = {\n ...message,\n metadata: {\n ...message.metadata,\n submittedFeedback: { type },\n },\n };\n this.repository.addOrUpdateMessage(parentId, updatedMessage);\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 { message } = this.repository.getMessage(messageId);\n\n this._stopSpeaking?.();\n\n const utterance = adapter.speak(getThreadMessageText(message));\n const unsub = utterance.subscribe(() => {\n if (utterance.status.type === \"ended\") {\n this._stopSpeaking = undefined;\n this.speech = undefined;\n } else {\n this.speech = { messageId, status: utterance.status };\n }\n this._notifySubscribers();\n });\n\n this.speech = { messageId, status: utterance.status };\n this._notifySubscribers();\n\n this._stopSpeaking = () => {\n utterance.cancel();\n unsub();\n this.speech = undefined;\n this._stopSpeaking = undefined;\n };\n }\n\n public stopSpeaking() {\n if (!this._stopSpeaking) throw new Error(\"No message is being spoken\");\n this._stopSpeaking();\n this._notifySubscribers();\n }\n\n private _voiceSession: RealtimeVoiceAdapter.Session | undefined;\n private _voiceUnsubs: Array<() => void> = [];\n public voice: VoiceSessionState | undefined;\n\n private _voiceVolume = 0;\n private _voiceVolumeSubscribers = new Set<() => void>();\n\n public getVoiceVolume = () => this._voiceVolume;\n\n public subscribeVoiceVolume = (callback: () => void): Unsubscribe => {\n this._voiceVolumeSubscribers.add(callback);\n return () => this._voiceVolumeSubscribers.delete(callback);\n };\n\n public connectVoice() {\n const adapter = this.adapters?.voice;\n if (!adapter) throw new Error(\"Voice adapter not configured\");\n\n this.disconnectVoice();\n\n const session = adapter.connect({});\n this._voiceSession = session;\n const unsubs: Array<() => void> = [];\n\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\n unsubs.push(\n session.onStatusChange((status) => {\n if (status.type === \"ended\") {\n this._finishVoiceAssistantMessage();\n this._voiceSession = undefined;\n this.voice = undefined;\n } else {\n this.voice = {\n status,\n isMuted: session.isMuted,\n mode: currentMode,\n };\n }\n this._notifySubscribers();\n }),\n );\n\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\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\n unsubs.push(\n session.onTranscript((transcript) => {\n this._handleVoiceTranscript(transcript);\n }),\n );\n\n this._voiceUnsubs = unsubs;\n }\n\n private _currentAssistantMsg: ThreadAssistantMessage | null = null;\n\n private _handleVoiceTranscript(\n transcript: RealtimeVoiceAdapter.TranscriptItem,\n ) {\n this.ensureInitialized();\n\n if (transcript.role === \"user\") {\n this._finishVoiceAssistantMessage();\n this._currentAssistantMsg = null;\n\n if (transcript.isFinal) {\n this._voiceMessages.push({\n id: generateId(),\n role: \"user\",\n content: [{ type: \"text\", text: transcript.text }],\n metadata: { custom: {} },\n createdAt: new Date(),\n status: { type: \"complete\", reason: \"unknown\" },\n attachments: [],\n });\n this._markVoiceMessagesDirty();\n this._notifySubscribers();\n }\n } else {\n const status: ThreadAssistantMessage[\"status\"] = transcript.isFinal\n ? { type: \"complete\", reason: \"stop\" }\n : { type: \"running\" };\n\n if (!this._currentAssistantMsg) {\n this._currentAssistantMsg = {\n id: generateId(),\n role: \"assistant\",\n content: [{ type: \"text\", text: transcript.text }],\n metadata: {\n unstable_state: this.state,\n unstable_annotations: [],\n unstable_data: [],\n steps: [],\n custom: {},\n },\n status,\n createdAt: new Date(),\n };\n this._voiceMessages.push(this._currentAssistantMsg);\n } else {\n const idx = this._voiceMessages.indexOf(this._currentAssistantMsg);\n if (idx === -1) return;\n const updated: ThreadAssistantMessage = {\n ...this._currentAssistantMsg,\n content: [{ type: \"text\", text: transcript.text }],\n status,\n };\n this._voiceMessages[idx] = updated;\n this._currentAssistantMsg = updated;\n }\n\n if (transcript.isFinal) {\n this._currentAssistantMsg = null;\n }\n\n this._markVoiceMessagesDirty();\n this._notifySubscribers();\n }\n }\n\n private _finishVoiceAssistantMessage() {\n const last = this._voiceMessages.at(-1);\n if (last?.role === \"assistant\" && last.status.type === \"running\") {\n const idx = this._voiceMessages.length - 1;\n this._voiceMessages[idx] = {\n ...(last as ThreadAssistantMessage),\n status: { type: \"complete\", reason: \"stop\" },\n };\n this._markVoiceMessagesDirty();\n this._notifySubscribers();\n }\n }\n\n public disconnectVoice() {\n this._finishVoiceAssistantMessage();\n this._currentAssistantMsg = null;\n for (const unsub of this._voiceUnsubs) unsub();\n this._voiceUnsubs = [];\n this._voiceSession?.disconnect();\n this._voiceSession = undefined;\n this.voice = undefined;\n this._voiceVolume = 0;\n notifyEventListeners(\n this._voiceVolumeSubscribers,\n undefined,\n \"Voice volume\",\n );\n this._voiceMessages = [];\n this._markVoiceMessagesDirty();\n this._notifySubscribers();\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","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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"}
|
|
@@ -5,7 +5,7 @@ import { SendOptions } from "../interfaces/composer-runtime-core.js";
|
|
|
5
5
|
import { ThreadRuntimeCore } from "../interfaces/thread-runtime-core.js";
|
|
6
6
|
import { BaseComposerRuntimeCore } from "./base-composer-runtime-core.js";
|
|
7
7
|
//#region src/runtime/base/default-edit-composer-runtime-core.d.ts
|
|
8
|
-
declare class DefaultEditComposerRuntimeCore extends BaseComposerRuntimeCore {
|
|
8
|
+
export declare class DefaultEditComposerRuntimeCore extends BaseComposerRuntimeCore {
|
|
9
9
|
get canCancel(): boolean;
|
|
10
10
|
get canSend(): boolean;
|
|
11
11
|
protected getAttachmentAdapter(): AttachmentAdapter | undefined;
|
|
@@ -30,5 +30,4 @@ declare class DefaultEditComposerRuntimeCore extends BaseComposerRuntimeCore {
|
|
|
30
30
|
handleCancel(): void;
|
|
31
31
|
}
|
|
32
32
|
//#endregion
|
|
33
|
-
export { DefaultEditComposerRuntimeCore };
|
|
34
33
|
//# sourceMappingURL=default-edit-composer-runtime-core.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-edit-composer-runtime-core.d.ts","names":[],"sources":["../../../src/runtime/base/default-edit-composer-runtime-core.ts"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"default-edit-composer-runtime-core.d.ts","names":[],"sources":["../../../src/runtime/base/default-edit-composer-runtime-core.ts"],"mappings":";;;;;;;qBAUa,uCAAuC;MACvC;MAIA;YAID,wBAAoB;YAIpB,uBAAmB;UAIrB;UACA;UACA;UACA;UAQA;EAGN,YAAA,SAAS;IACP;MAEM,cAAc;MACd,YAAY;;KAIpB,+BACE,UAAU;IAAa;IAAyB,SAAS;;MAuClD;MAIA;EAIE,WACX,SAAS,KAAK,yCACd,UAAU,cAAW;EAqBhB"}
|
|
@@ -7,7 +7,7 @@ var DefaultEditComposerRuntimeCore = class extends BaseComposerRuntimeCore {
|
|
|
7
7
|
return true;
|
|
8
8
|
}
|
|
9
9
|
get canSend() {
|
|
10
|
-
return !this.isEmpty && !this._isSending;
|
|
10
|
+
return !this.isEmpty && !this.runtime.voice && !this._isSending;
|
|
11
11
|
}
|
|
12
12
|
getAttachmentAdapter() {
|
|
13
13
|
return this.runtime.adapters?.attachments;
|
|
@@ -23,7 +23,17 @@ var DefaultEditComposerRuntimeCore = class extends BaseComposerRuntimeCore {
|
|
|
23
23
|
constructor(runtime, endEditCallback, { parentId, message }) {
|
|
24
24
|
super();
|
|
25
25
|
this.runtime = runtime;
|
|
26
|
-
|
|
26
|
+
let lastHasVoice = runtime.voice !== void 0;
|
|
27
|
+
const unsubscribe = runtime.subscribe(() => {
|
|
28
|
+
const hasVoice = runtime.voice !== void 0;
|
|
29
|
+
if (hasVoice === lastHasVoice) return;
|
|
30
|
+
lastHasVoice = hasVoice;
|
|
31
|
+
this._notifySubscribers();
|
|
32
|
+
});
|
|
33
|
+
this.endEditCallback = () => {
|
|
34
|
+
unsubscribe();
|
|
35
|
+
endEditCallback();
|
|
36
|
+
};
|
|
27
37
|
this._parentId = parentId;
|
|
28
38
|
this._sourceId = message.id;
|
|
29
39
|
this.setText(getThreadMessageText(message));
|