@assistant-ui/core 0.3.19 → 0.3.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/attachment.d.ts +50 -43
- package/dist/adapters/attachment.d.ts.map +1 -1
- package/dist/adapters/attachment.js +52 -21
- package/dist/adapters/attachment.js.map +1 -1
- package/dist/adapters/directive-formatter.d.ts +2 -5
- package/dist/adapters/directive-formatter.d.ts.map +1 -1
- package/dist/adapters/feedback.d.ts +7 -8
- package/dist/adapters/feedback.d.ts.map +1 -1
- package/dist/adapters/index.d.ts +14 -9
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +1 -1
- package/dist/adapters/speech.d.ts +63 -65
- package/dist/adapters/speech.d.ts.map +1 -1
- package/dist/adapters/speech.js +16 -2
- package/dist/adapters/speech.js.map +1 -1
- package/dist/adapters/suggestion.d.ts +19 -22
- package/dist/adapters/suggestion.d.ts.map +1 -1
- package/dist/adapters/thread-history.d.ts +60 -58
- package/dist/adapters/thread-history.d.ts.map +1 -1
- package/dist/adapters/trigger.d.ts +8 -11
- package/dist/adapters/trigger.d.ts.map +1 -1
- package/dist/adapters/voice.d.ts +50 -45
- package/dist/adapters/voice.d.ts.map +1 -1
- package/dist/adapters/voice.js +17 -3
- package/dist/adapters/voice.js.map +1 -1
- package/dist/index.d.ts +70 -56
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/internal/duplicate-detection.d.ts +1 -4
- package/dist/internal/duplicate-detection.d.ts.map +1 -1
- package/dist/internal.d.ts +27 -58
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +8 -6
- package/dist/model-context/frame/host.d.ts +20 -23
- package/dist/model-context/frame/host.d.ts.map +1 -1
- package/dist/model-context/frame/host.js +3 -1
- package/dist/model-context/frame/host.js.map +1 -1
- package/dist/model-context/frame/provider.d.ts +28 -30
- package/dist/model-context/frame/provider.d.ts.map +1 -1
- package/dist/model-context/frame/provider.js +6 -0
- package/dist/model-context/frame/provider.js.map +1 -1
- package/dist/model-context/frame/types.d.ts +24 -27
- package/dist/model-context/frame/types.d.ts.map +1 -1
- package/dist/model-context/frame/validate.d.ts +3 -0
- package/dist/model-context/frame/validate.d.ts.map +1 -0
- package/dist/model-context/frame/validate.js +26 -0
- package/dist/model-context/frame/validate.js.map +1 -0
- package/dist/model-context/interactable-composer-metadata.d.ts +51 -39
- package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
- package/dist/model-context/interactable-composer-metadata.js +30 -6
- package/dist/model-context/interactable-composer-metadata.js.map +1 -1
- package/dist/model-context/registry-handles.d.ts +9 -12
- package/dist/model-context/registry-handles.d.ts.map +1 -1
- package/dist/model-context/registry.d.ts +15 -18
- package/dist/model-context/registry.d.ts.map +1 -1
- package/dist/model-context/tool-call-text.d.ts +15 -17
- package/dist/model-context/tool-call-text.d.ts.map +1 -1
- package/dist/model-context/tool.d.ts +12 -14
- package/dist/model-context/tool.d.ts.map +1 -1
- package/dist/model-context/types.d.ts +40 -43
- package/dist/model-context/types.d.ts.map +1 -1
- package/dist/react/AssistantProvider.d.ts +9 -12
- package/dist/react/AssistantProvider.d.ts.map +1 -1
- package/dist/react/AssistantRuntimeProvider.d.ts +23 -26
- package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
- package/dist/react/RuntimeAdapter.d.ts +4 -8
- package/dist/react/RuntimeAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts +28 -23
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js +77 -58
- package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
- package/dist/react/adapters/TitleGenerationAdapter.d.ts +4 -7
- package/dist/react/adapters/TitleGenerationAdapter.d.ts.map +1 -1
- package/dist/react/client/AdaptedRemoteThread.d.ts +6 -9
- package/dist/react/client/AdaptedRemoteThread.d.ts.map +1 -1
- package/dist/react/client/DataRenderers.d.ts +2 -5
- package/dist/react/client/DataRenderers.d.ts.map +1 -1
- package/dist/react/client/InMemoryThreadList.d.ts +9 -12
- package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
- package/dist/react/client/Interactables.d.ts +3 -6
- package/dist/react/client/Interactables.d.ts.map +1 -1
- package/dist/react/client/Interactables.js +306 -101
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/RemoteThreadList.d.ts +34 -37
- package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
- package/dist/react/client/RemoteThreadList.js +2 -1
- package/dist/react/client/RemoteThreadList.js.map +1 -1
- package/dist/react/client/Tools.d.ts +10 -12
- package/dist/react/client/Tools.d.ts.map +1 -1
- package/dist/react/client/Tools.js +4 -8
- package/dist/react/client/Tools.js.map +1 -1
- package/dist/react/client/interactable-model-context.d.ts +9 -11
- package/dist/react/client/interactable-model-context.d.ts.map +1 -1
- package/dist/react/client/interactable-model-context.js +32 -22
- package/dist/react/client/interactable-model-context.js.map +1 -1
- package/dist/react/index.d.ts +160 -122
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +5 -5
- package/dist/react/interactables-legacy/Interactables.d.ts +2 -5
- package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
- package/dist/react/interactables-legacy/Interactables.js +15 -8
- package/dist/react/interactables-legacy/Interactables.js.map +1 -1
- package/dist/react/interactables-legacy/interactable-model-context.d.ts +6 -9
- package/dist/react/interactables-legacy/interactable-model-context.d.ts.map +1 -1
- package/dist/react/interactables-legacy/interactable-model-context.js +13 -14
- package/dist/react/interactables-legacy/interactable-model-context.js.map +1 -1
- package/dist/react/interactables-legacy/scopes.d.ts +42 -46
- package/dist/react/interactables-legacy/scopes.d.ts.map +1 -1
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts +8 -11
- package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -1
- package/dist/react/interactables-legacy/useInteractableState.d.ts +7 -9
- package/dist/react/interactables-legacy/useInteractableState.d.ts.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts +23 -14
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.js +54 -25
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.js.map +1 -1
- package/dist/react/model-context/define-mcp-toolkit.d.ts +15 -18
- package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -1
- package/dist/react/model-context/define-toolkit.d.ts +13 -6
- package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
- package/dist/react/model-context/external-tool.d.ts +1 -4
- package/dist/react/model-context/external-tool.d.ts.map +1 -1
- package/dist/react/model-context/human-tool.d.ts +3 -6
- package/dist/react/model-context/human-tool.d.ts.map +1 -1
- package/dist/react/model-context/interactableTool.d.ts +26 -29
- package/dist/react/model-context/interactableTool.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantDataUI.d.ts +6 -9
- package/dist/react/model-context/makeAssistantDataUI.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantTool.d.ts +6 -9
- package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
- package/dist/react/model-context/makeAssistantToolUI.d.ts +6 -9
- package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
- package/dist/react/model-context/provider-tool.d.ts +5 -7
- package/dist/react/model-context/provider-tool.d.ts.map +1 -1
- package/dist/react/model-context/stub-tool.d.ts +1 -4
- package/dist/react/model-context/stub-tool.d.ts.map +1 -1
- package/dist/react/model-context/toolbox.d.ts +44 -32
- package/dist/react/model-context/toolbox.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantContext.d.ts +3 -6
- package/dist/react/model-context/useAssistantContext.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantDataUI.d.ts +7 -10
- package/dist/react/model-context/useAssistantDataUI.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantInstructions.d.ts +3 -6
- package/dist/react/model-context/useAssistantInstructions.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantTool.d.ts +9 -13
- package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
- package/dist/react/model-context/useAssistantToolUI.d.ts +13 -16
- package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
- package/dist/react/model-context/useAuiToolOverrides.d.ts +3 -5
- package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -1
- package/dist/react/model-context/useInlineRender.d.ts +3 -6
- package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
- package/dist/react/model-context/useInteractable.d.ts +40 -40
- package/dist/react/model-context/useInteractable.d.ts.map +1 -1
- package/dist/react/model-context/useInteractableState.d.ts +10 -9
- package/dist/react/model-context/useInteractableState.d.ts.map +1 -1
- package/dist/react/model-context/useInteractableVersions.d.ts +4 -7
- package/dist/react/model-context/useInteractableVersions.d.ts.map +1 -1
- package/dist/react/model-context/useToolArgsStatus.d.ts +7 -9
- package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts +7 -10
- package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts +3 -6
- package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarFeedback.d.ts +6 -9
- package/dist/react/primitive-hooks/useActionBarFeedback.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarReload.d.ts +3 -6
- package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarSpeak.d.ts +3 -6
- package/dist/react/primitive-hooks/useActionBarSpeak.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts +3 -6
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts +3 -6
- package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts +3 -6
- package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts +4 -7
- package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerCancel.d.ts +3 -6
- package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerDictate.d.ts +3 -6
- package/dist/react/primitive-hooks/useComposerDictate.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useComposerSend.d.ts +4 -7
- package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerCancel.d.ts +2 -5
- package/dist/react/primitive-hooks/useEditComposerCancel.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerSend.d.ts +3 -6
- package/dist/react/primitive-hooks/useEditComposerSend.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageBranching.d.ts +5 -8
- package/dist/react/primitive-hooks/useMessageBranching.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageError.d.ts +1 -4
- package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageReload.d.ts +3 -6
- package/dist/react/primitive-hooks/useMessageReload.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts +7 -10
- package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.js +4 -4
- package/dist/react/primitive-hooks/useSuggestionTrigger.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts +1 -4
- package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +1 -4
- package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts +2 -5
- package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts +2 -5
- package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts +2 -5
- package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts +2 -5
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts +3 -6
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListNew.d.ts +2 -5
- package/dist/react/primitive-hooks/useThreadListNew.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts +1 -4
- package/dist/react/primitive-hooks/useThreadMessageIds.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessages.d.ts +2 -5
- package/dist/react/primitive-hooks/useThreadMessages.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useVoice.d.ts +8 -11
- package/dist/react/primitive-hooks/useVoice.d.ts.map +1 -1
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +27 -29
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.d.ts +26 -28
- package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerIf.d.ts +13 -13
- package/dist/react/primitives/composer/ComposerIf.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerQueue.d.ts +13 -17
- package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.d.ts +30 -33
- package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.js +42 -33
- package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.d.ts +30 -28
- package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.js +14 -15
- package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.d.ts +122 -120
- package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.js +3 -3
- package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
- package/dist/react/primitives/message/MessageParts.d.ts +208 -194
- package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageParts.js +124 -82
- package/dist/react/primitives/message/MessageParts.js.map +1 -1
- package/dist/react/primitives/message/MessageQuote.d.ts +8 -11
- package/dist/react/primitives/message/MessageQuote.d.ts.map +1 -1
- package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts +4 -7
- package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
- package/dist/react/primitives/part/PartMessages.d.ts +16 -19
- package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.d.ts +61 -64
- package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadSuggestions.d.ts +25 -27
- package/dist/react/primitives/thread/ThreadSuggestions.d.ts.map +1 -1
- package/dist/react/primitives/thread/ThreadSuggestions.js +24 -5
- package/dist/react/primitives/thread/ThreadSuggestions.js.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.d.ts +26 -28
- package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts +6 -9
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -1
- package/dist/react/providers/AttachmentByIndexProvider.d.ts +5 -8
- package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +4 -7
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +3 -6
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/MessageByIdProvider.d.ts +3 -6
- package/dist/react/providers/MessageByIdProvider.d.ts.map +1 -1
- package/dist/react/providers/MessageByIndexProvider.d.ts +3 -6
- package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/PartByIndexProvider.d.ts +3 -6
- package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/QueueItemByIndexProvider.d.ts +4 -7
- package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ReadonlyThreadProvider.d.ts +7 -10
- package/dist/react/providers/ReadonlyThreadProvider.d.ts.map +1 -1
- package/dist/react/providers/ReadonlyThreadProvider.js.map +1 -1
- package/dist/react/providers/SuggestionByIndexProvider.d.ts +4 -7
- package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.d.ts +4 -7
- package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.js +5 -1
- package/dist/react/providers/TextMessagePartProvider.js.map +1 -1
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts +4 -7
- package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -1
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +4 -8
- package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +210 -219
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +70 -46
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +186 -198
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +13 -4
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.d.ts +17 -23
- package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.js +3 -1
- package/dist/react/runtimes/RemoteThreadResource.js.map +1 -1
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +10 -11
- package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts +11 -14
- package/dist/react/runtimes/assistant-transport/commandQueue.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts +6 -8
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.js +9 -2
- package/dist/react/runtimes/assistant-transport/replayBoundaryStream.js.map +1 -1
- package/dist/react/runtimes/assistant-transport/runManager.d.ts +9 -12
- package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/runManager.js +4 -1
- package/dist/react/runtimes/assistant-transport/runManager.js.map +1 -1
- package/dist/react/runtimes/assistant-transport/types.d.ts +123 -118
- package/dist/react/runtimes/assistant-transport/types.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts +7 -10
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js +17 -6
- package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js.map +1 -1
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts +3 -6
- package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts.map +1 -1
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts +2 -5
- package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +7 -10
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +426 -216
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +15 -18
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js +8 -4
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.d.ts +146 -125
- package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.js +120 -8
- package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +13 -15
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts +5 -7
- package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/sdkIdentity.d.ts +2 -5
- package/dist/react/runtimes/cloud/sdkIdentity.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/sdkIdentity.js +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +3 -6
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts +9 -11
- package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/createMessageConverter.d.ts +15 -19
- package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
- package/dist/react/runtimes/createMessageConverter.js.map +1 -1
- package/dist/react/runtimes/createRuntimeExtras.d.ts +14 -17
- package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.d.ts +17 -21
- package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
- package/dist/react/runtimes/external-store-history-copy.d.ts +25 -0
- package/dist/react/runtimes/external-store-history-copy.d.ts.map +1 -0
- package/dist/react/runtimes/external-store-history-copy.js +148 -0
- package/dist/react/runtimes/external-store-history-copy.js.map +1 -0
- package/dist/react/runtimes/useExternalStoreRuntime.d.ts +3 -6
- package/dist/react/runtimes/useExternalStoreRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.js +72 -35
- package/dist/react/runtimes/useExternalStoreRuntime.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts +2 -5
- package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts.map +1 -1
- package/dist/react/runtimes/useLocalRuntime.d.ts +29 -41
- package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useLocalRuntime.js +142 -34
- package/dist/react/runtimes/useLocalRuntime.js.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts +3 -6
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +2 -2
- package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
- package/dist/react/runtimes/useRuntimeAdapters.d.ts +5 -7
- package/dist/react/runtimes/useRuntimeAdapters.d.ts.map +1 -1
- package/dist/react/runtimes/useStreamingTiming.d.ts +4 -6
- package/dist/react/runtimes/useStreamingTiming.d.ts.map +1 -1
- package/dist/react/types/MessagePartComponentTypes.d.ts +72 -70
- package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
- package/dist/react/types/scopes/dataRenderers.d.ts +11 -15
- package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -1
- package/dist/react/types/scopes/interactables.d.ts +60 -60
- package/dist/react/types/scopes/interactables.d.ts.map +1 -1
- package/dist/react/types/scopes/tools.d.ts +21 -24
- package/dist/react/types/scopes/tools.d.ts.map +1 -1
- package/dist/react/types/store-augmentation.d.ts +10 -11
- package/dist/react/types/store-augmentation.d.ts.map +1 -1
- package/dist/react/utils/getMessageQuote.d.ts +6 -8
- package/dist/react/utils/getMessageQuote.d.ts.map +1 -1
- package/dist/react/utils/groupParts.d.ts +35 -37
- package/dist/react/utils/groupParts.d.ts.map +1 -1
- package/dist/react/utils/useJSONEqual.d.ts +3 -6
- package/dist/react/utils/useJSONEqual.d.ts.map +1 -1
- package/dist/react/utils/useJSONSchemaDependency.d.ts +3 -6
- package/dist/react/utils/useJSONSchemaDependency.d.ts.map +1 -1
- package/dist/runtime/api/assistant-runtime.d.ts +28 -31
- package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
- package/dist/runtime/api/attachment-runtime.d.ts +51 -49
- package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
- package/dist/runtime/api/attachment-runtime.js.map +1 -1
- package/dist/runtime/api/bindings.d.ts +35 -35
- package/dist/runtime/api/bindings.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.d.ts +215 -201
- package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
- package/dist/runtime/api/composer-runtime.js +4 -0
- package/dist/runtime/api/composer-runtime.js.map +1 -1
- package/dist/runtime/api/message-part-runtime.d.ts +31 -30
- package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.js +25 -2
- package/dist/runtime/api/message-part-runtime.js.map +1 -1
- package/dist/runtime/api/message-runtime.d.ts +87 -82
- package/dist/runtime/api/message-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-runtime.js +4 -3
- package/dist/runtime/api/message-runtime.js.map +1 -1
- package/dist/runtime/api/paths.d.ts +54 -57
- package/dist/runtime/api/paths.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.d.ts +70 -72
- package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts +77 -81
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +306 -308
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.js +2 -1
- package/dist/runtime/api/thread-runtime.js.map +1 -1
- package/dist/runtime/base/base-assistant-runtime-core.d.ts +9 -12
- package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts +150 -101
- package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.js +400 -122
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts +121 -104
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js +174 -62
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +30 -31
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.js +21 -2
- package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +28 -31
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js +23 -2
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts +15 -18
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -1
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts +8 -11
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/composer-runtime-core.d.ts +98 -83
- package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +67 -70
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +225 -211
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/internal.d.ts +25 -20
- package/dist/runtime/internal.d.ts.map +1 -0
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts +37 -40
- package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.d.ts +32 -33
- package/dist/runtime/queue/message-queue.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.js +10 -2
- package/dist/runtime/queue/message-queue.js.map +1 -1
- package/dist/runtime/queue/queue-item.d.ts +7 -10
- package/dist/runtime/queue/queue-item.d.ts.map +1 -1
- package/dist/runtime/utils/abortable-thread-load.d.ts +9 -11
- package/dist/runtime/utils/abortable-thread-load.d.ts.map +1 -1
- package/dist/runtime/utils/attachment-add-operations.d.ts +16 -15
- package/dist/runtime/utils/attachment-add-operations.d.ts.map +1 -1
- package/dist/runtime/utils/attachment-add-operations.js +24 -2
- package/dist/runtime/utils/attachment-add-operations.js.map +1 -1
- package/dist/runtime/utils/attachment-send-operations.d.ts +12 -0
- package/dist/runtime/utils/attachment-send-operations.d.ts.map +1 -0
- package/dist/runtime/utils/attachment-send-operations.js +34 -0
- package/dist/runtime/utils/attachment-send-operations.js.map +1 -0
- package/dist/runtime/utils/auto-status.d.ts +11 -13
- package/dist/runtime/utils/auto-status.d.ts.map +1 -1
- package/dist/runtime/utils/auto-status.js +3 -5
- package/dist/runtime/utils/auto-status.js.map +1 -1
- package/dist/runtime/utils/chat-model-adapter.d.ts +31 -33
- package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.d.ts +47 -48
- package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.js +6 -5
- package/dist/runtime/utils/external-message-conversion.js.map +1 -1
- package/dist/runtime/utils/external-store-message.d.ts +6 -9
- package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository-session.d.ts +24 -27
- package/dist/runtime/utils/message-repository-session.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.d.ts +52 -54
- package/dist/runtime/utils/message-repository.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.js +8 -7
- package/dist/runtime/utils/message-repository.js.map +1 -1
- package/dist/runtime/utils/pending-tool-calls.d.ts +12 -14
- package/dist/runtime/utils/pending-tool-calls.d.ts.map +1 -1
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +7 -10
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
- package/dist/runtime/utils/runtime-extras-brand.d.ts +6 -9
- package/dist/runtime/utils/runtime-extras-brand.d.ts.map +1 -1
- package/dist/runtime/utils/stored-message-parts.d.ts +21 -0
- package/dist/runtime/utils/stored-message-parts.d.ts.map +1 -0
- package/dist/runtime/utils/stored-message-parts.js +103 -0
- package/dist/runtime/utils/stored-message-parts.js.map +1 -0
- package/dist/runtime/utils/streaming-timing.d.ts +23 -26
- package/dist/runtime/utils/streaming-timing.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.d.ts +38 -34
- package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.js +16 -6
- package/dist/runtime/utils/thread-message-like.js.map +1 -1
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts +5 -7
- package/dist/runtime/utils/thread-runtime-lifecycle.d.ts.map +1 -1
- package/dist/runtime/utils/thread-runtime-lifecycle.js +31 -4
- package/dist/runtime/utils/thread-runtime-lifecycle.js.map +1 -1
- package/dist/runtime/utils/tool-call-tree.d.ts +10 -13
- package/dist/runtime/utils/tool-call-tree.d.ts.map +1 -1
- package/dist/runtime/utils/tool-interactions.d.ts +10 -0
- package/dist/runtime/utils/tool-interactions.d.ts.map +1 -0
- package/dist/runtime/utils/tool-interactions.js +92 -0
- package/dist/runtime/utils/tool-interactions.js.map +1 -0
- package/dist/runtimes/assistant-transport/utils.d.ts +1 -4
- package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-adapter.d.ts +220 -200
- package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-runtime-core.d.ts +6 -8
- package/dist/runtimes/external-store/external-store-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-runtime-core.js +4 -1
- package/dist/runtimes/external-store/external-store-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/external-store-shared-options.d.ts +3 -6
- package/dist/runtimes/external-store/external-store-shared-options.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +40 -43
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +2 -2
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +119 -125
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js +71 -18
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/thread-message-converter.d.ts +5 -8
- package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +96 -98
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.js +3 -0
- package/dist/runtimes/inert/InertThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/internal.d.ts +20 -16
- package/dist/runtimes/internal.d.ts.map +1 -0
- package/dist/runtimes/local/local-runtime-core.d.ts +7 -10
- package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-runtime-options.d.ts +41 -44
- package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +42 -45
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +94 -93
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +220 -29
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/local/should-continue.d.ts +2 -5
- package/dist/runtimes/local/should-continue.d.ts.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +77 -55
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +28 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +12 -15
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts +3 -6
- package/dist/runtimes/remote-thread-list/adapter-changed.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts +2 -5
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +34 -31
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/optimistic-state.js +8 -3
- package/dist/runtimes/remote-thread-list/optimistic-state.js.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +60 -63
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.js +1 -1
- package/dist/runtimes/remote-thread-list/title-generation.d.ts +31 -33
- package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/title.d.ts +5 -8
- package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/types.d.ts +119 -121
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +147 -149
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +22 -7
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
- package/dist/store/clients/chain-of-thought-client.d.ts +8 -11
- package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
- package/dist/store/clients/external-thread.d.ts +56 -58
- package/dist/store/clients/external-thread.d.ts.map +1 -1
- package/dist/store/clients/external-thread.js +1270 -741
- package/dist/store/clients/external-thread.js.map +1 -1
- package/dist/store/clients/model-context-client.d.ts +2 -5
- package/dist/store/clients/model-context-client.d.ts.map +1 -1
- package/dist/store/clients/no-op-composer-client.d.ts +3 -6
- package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
- package/dist/store/clients/no-op-composer-client.js +3 -1
- package/dist/store/clients/no-op-composer-client.js.map +1 -1
- package/dist/store/clients/runtime-adapter.d.ts +2 -5
- package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
- package/dist/store/clients/single-thread-list.d.ts +4 -6
- package/dist/store/clients/single-thread-list.d.ts.map +1 -1
- package/dist/store/clients/submission-message.d.ts +8 -0
- package/dist/store/clients/submission-message.d.ts.map +1 -0
- package/dist/store/clients/submission-message.js +22 -0
- package/dist/store/clients/submission-message.js.map +1 -0
- package/dist/store/clients/suggestions.d.ts +8 -11
- package/dist/store/clients/suggestions.d.ts.map +1 -1
- package/dist/store/clients/thread-message-client.d.ts +12 -12
- package/dist/store/clients/thread-message-client.d.ts.map +1 -1
- package/dist/store/clients/thread-message-client.js +81 -82
- package/dist/store/clients/thread-message-client.js.map +1 -1
- package/dist/store/clients/thread-selection-events.d.ts +1 -4
- package/dist/store/clients/thread-selection-events.d.ts.map +1 -1
- package/dist/store/clients/thread-tasks.d.ts +7 -10
- package/dist/store/clients/thread-tasks.d.ts.map +1 -1
- package/dist/store/env.d.ts +1 -4
- package/dist/store/env.d.ts.map +1 -1
- package/dist/store/index.d.ts +33 -36
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +5 -5
- package/dist/store/internal.d.ts +12 -12
- package/dist/store/internal.d.ts.map +1 -0
- package/dist/store/internal.js +2 -2
- package/dist/store/primitive-predicates.d.ts +14 -16
- package/dist/store/primitive-predicates.d.ts.map +1 -1
- package/dist/store/primitive-predicates.js +10 -5
- package/dist/store/primitive-predicates.js.map +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts +4 -7
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts +11 -14
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.js +65 -62
- package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/handle-runtime-action.d.ts +1 -4
- package/dist/store/runtime-clients/handle-runtime-action.d.ts.map +1 -1
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts +1 -4
- package/dist/store/runtime-clients/handle-thread-list-action.d.ts.map +1 -1
- package/dist/store/runtime-clients/liveRef.d.ts +2 -5
- package/dist/store/runtime-clients/liveRef.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts +4 -7
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.js +26 -16
- package/dist/store/runtime-clients/message-part-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts +10 -11
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.js +121 -113
- package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +5 -8
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +6 -9
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts +4 -7
- package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +221 -158
- package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/useSubscribable.d.ts +3 -6
- package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
- package/dist/store/scope-registration.d.ts +28 -29
- package/dist/store/scope-registration.d.ts.map +1 -1
- package/dist/store/scopes/attachment.d.ts +19 -22
- package/dist/store/scopes/attachment.d.ts.map +1 -1
- package/dist/store/scopes/chain-of-thought.d.ts +33 -35
- package/dist/store/scopes/chain-of-thought.d.ts.map +1 -1
- package/dist/store/scopes/composer.d.ts +147 -135
- package/dist/store/scopes/composer.d.ts.map +1 -1
- package/dist/store/scopes/message.d.ts +119 -112
- package/dist/store/scopes/message.d.ts.map +1 -1
- package/dist/store/scopes/model-context.d.ts +10 -13
- package/dist/store/scopes/model-context.d.ts.map +1 -1
- package/dist/store/scopes/part.d.ts +53 -50
- package/dist/store/scopes/part.d.ts.map +1 -1
- package/dist/store/scopes/queue-item.d.ts +21 -23
- package/dist/store/scopes/queue-item.d.ts.map +1 -1
- package/dist/store/scopes/suggestion.d.ts +14 -17
- package/dist/store/scopes/suggestion.d.ts.map +1 -1
- package/dist/store/scopes/suggestions.d.ts +18 -21
- package/dist/store/scopes/suggestions.d.ts.map +1 -1
- package/dist/store/scopes/task.d.ts +27 -30
- package/dist/store/scopes/task.d.ts.map +1 -1
- package/dist/store/scopes/thread-list-item.d.ts +68 -71
- package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
- package/dist/store/scopes/thread.d.ts +197 -200
- package/dist/store/scopes/thread.d.ts.map +1 -1
- package/dist/store/scopes/threads.d.ts +49 -52
- package/dist/store/scopes/threads.d.ts.map +1 -1
- package/dist/subscribable/subscribable.d.ts +73 -69
- package/dist/subscribable/subscribable.d.ts.map +1 -1
- package/dist/subscribable/subscribable.js +35 -7
- package/dist/subscribable/subscribable.js.map +1 -1
- package/dist/types/attachment.d.ts +35 -37
- package/dist/types/attachment.d.ts.map +1 -1
- package/dist/types/augmentations.d.ts +7 -8
- package/dist/types/augmentations.d.ts.map +1 -1
- package/dist/types/directive.d.ts +13 -16
- package/dist/types/directive.d.ts.map +1 -1
- package/dist/types/error.d.ts +15 -17
- package/dist/types/error.d.ts.map +1 -1
- package/dist/types/index.d.ts +7 -7
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/message.d.ts +358 -318
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js.map +1 -1
- package/dist/types/quote.d.ts +3 -6
- package/dist/types/quote.d.ts.map +1 -1
- package/dist/types/trigger.d.ts +10 -13
- package/dist/types/trigger.d.ts.map +1 -1
- package/dist/types/unsubscribe.d.ts +1 -4
- package/dist/types/unsubscribe.d.ts.map +1 -1
- package/dist/utils/abortable-iterable.d.ts +2 -5
- package/dist/utils/abortable-iterable.d.ts.map +1 -1
- package/dist/utils/composite-context-provider.d.ts +9 -13
- package/dist/utils/composite-context-provider.d.ts.map +1 -1
- package/dist/utils/data-url.d.ts +16 -19
- package/dist/utils/data-url.d.ts.map +1 -1
- package/dist/utils/getGroupStatus.d.ts +19 -21
- package/dist/utils/getGroupStatus.d.ts.map +1 -1
- package/dist/utils/id.d.ts +3 -6
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/image-media-type.d.ts +1 -4
- package/dist/utils/image-media-type.d.ts.map +1 -1
- package/dist/utils/invoke-user-callback.d.ts +1 -4
- package/dist/utils/invoke-user-callback.d.ts.map +1 -1
- package/dist/utils/json/is-json-equal.d.ts +1 -4
- package/dist/utils/json/is-json-equal.d.ts.map +1 -1
- package/dist/utils/json/is-json.d.ts +5 -8
- package/dist/utils/json/is-json.d.ts.map +1 -1
- package/dist/utils/json/stable-stringify-tool-args.d.ts +3 -6
- package/dist/utils/json/stable-stringify-tool-args.d.ts.map +1 -1
- package/dist/utils/normalizePartStatus.d.ts +6 -8
- package/dist/utils/normalizePartStatus.d.ts.map +1 -1
- package/dist/utils/normalizePartStatus.js +3 -2
- package/dist/utils/normalizePartStatus.js.map +1 -1
- package/dist/utils/notify-event-listeners.d.ts +2 -4
- package/dist/utils/notify-event-listeners.d.ts.map +1 -1
- package/dist/utils/record.d.ts +1 -4
- package/dist/utils/record.d.ts.map +1 -1
- package/dist/utils/silent-runtime-action.d.ts +2 -5
- package/dist/utils/silent-runtime-action.d.ts.map +1 -1
- package/dist/utils/text.d.ts +2 -5
- package/dist/utils/text.d.ts.map +1 -1
- package/dist/utils/wire-media.d.ts +3 -6
- package/dist/utils/wire-media.d.ts.map +1 -1
- package/package.json +15 -13
- package/src/adapters/attachment.test.ts +98 -1
- package/src/adapters/attachment.ts +77 -20
- package/src/adapters/feedback.ts +1 -0
- package/src/adapters/speech.test.ts +94 -0
- package/src/adapters/speech.ts +16 -2
- package/src/adapters/thread-history.ts +16 -5
- package/src/adapters/voice.test.ts +169 -0
- package/src/adapters/voice.ts +25 -4
- package/src/index.ts +14 -2
- package/src/internal.ts +7 -0
- package/src/model-context/frame/host.test.ts +51 -1
- package/src/model-context/frame/host.ts +3 -1
- package/src/model-context/frame/provider.test.ts +106 -20
- package/src/model-context/frame/provider.ts +8 -1
- package/src/model-context/frame/validate.ts +57 -0
- package/src/model-context/interactable-composer-metadata.test.ts +82 -0
- package/src/model-context/interactable-composer-metadata.ts +45 -2
- package/src/react/RuntimeAdapter.test.ts +4 -1
- package/src/react/adapters/LocalStorageThreadListAdapter.test.ts +711 -0
- package/src/react/adapters/LocalStorageThreadListAdapter.tsx +125 -109
- package/src/react/client/Interactables.test.ts +865 -8
- package/src/react/client/Interactables.ts +325 -45
- package/src/react/client/RemoteThreadList.concurrent.test.tsx +9 -3
- package/src/react/client/RemoteThreadList.initialize-failure.test.ts +124 -0
- package/src/react/client/RemoteThreadList.test.ts +5 -6
- package/src/react/client/RemoteThreadList.ts +6 -0
- package/src/react/client/Tools.ts +2 -3
- package/src/react/client/interactable-model-context.test.ts +56 -13
- package/src/react/client/interactable-model-context.ts +48 -23
- package/src/react/index.ts +2 -2
- package/src/react/interactables-legacy/Interactables.test.ts +221 -4
- package/src/react/interactables-legacy/Interactables.ts +25 -14
- package/src/react/interactables-legacy/interactable-model-context.ts +26 -24
- package/src/react/interactables-legacy/useAssistantInteractable.test.tsx +40 -22
- package/src/react/interactables-shared/useInteractablePersistenceQueue.test.tsx +22 -2
- package/src/react/interactables-shared/useInteractablePersistenceQueue.ts +63 -11
- package/src/react/model-context/useInteractable.test.tsx +56 -29
- package/src/react/primitive-hooks/useActionBarCopy.test.ts +5 -5
- package/src/react/primitive-hooks/useSuggestionTrigger.test.ts +33 -0
- package/src/react/primitive-hooks/useSuggestionTrigger.ts +7 -4
- package/src/react/primitives/generativeUI/GenerativeUI.test.tsx +170 -0
- package/src/react/primitives/generativeUI/GenerativeUI.tsx +43 -28
- package/src/react/primitives/message/MessageAttachments.test.tsx +2 -6
- package/src/react/primitives/message/MessageAttachments.tsx +14 -8
- package/src/react/primitives/message/MessageGroupedParts.test.tsx +155 -8
- package/src/react/primitives/message/MessageGroupedParts.tsx +19 -6
- package/src/react/primitives/message/MessageParts.test.tsx +84 -0
- package/src/react/primitives/message/MessageParts.tool-interaction.test.tsx +69 -0
- package/src/react/primitives/message/MessageParts.tsx +29 -8
- package/src/react/primitives/thread/ThreadMessages.test.tsx +25 -7
- package/src/react/primitives/thread/ThreadSuggestions.test.tsx +97 -0
- package/src/react/primitives/thread/ThreadSuggestions.tsx +29 -6
- package/src/react/providers/ReadonlyThreadProvider.tsx +2 -2
- package/src/react/providers/TextMessagePartProvider.tsx +3 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.layout.test.tsx +62 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.retry.test.tsx +2 -2
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +93 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +181 -21
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.title.test.tsx +62 -17
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +112 -77
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +19 -3
- package/src/react/runtimes/RemoteThreadResource.ts +5 -2
- package/src/react/runtimes/assistant-transport/replayBoundaryStream.test.ts +3 -1
- package/src/react/runtimes/assistant-transport/replayBoundaryStream.ts +10 -2
- package/src/react/runtimes/assistant-transport/runManager.ts +3 -0
- package/src/react/runtimes/assistant-transport/transport-parentid.test.tsx +57 -0
- package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +73 -46
- package/src/react/runtimes/assistant-transport/transport-thread-id.test.tsx +571 -0
- package/src/react/runtimes/assistant-transport/types.ts +9 -1
- package/src/react/runtimes/assistant-transport/useAssistantTransport.spec.md +10 -0
- package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.test.tsx +108 -1
- package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.ts +33 -9
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.copy.integration.test.tsx +289 -0
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.copy.test.tsx +471 -0
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.engagement.test.tsx +330 -0
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.ts +78 -2
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +463 -2
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +595 -227
- package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +33 -4
- package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +7 -3
- package/src/react/runtimes/cloud/auiV0.ts +275 -6
- package/src/react/runtimes/cloud/auiV0DecodeSafely.test.ts +873 -0
- package/src/react/runtimes/createMessageConverter.ts +9 -3
- package/src/react/runtimes/external-message-converter.test.ts +7 -3
- package/src/react/runtimes/external-store-history-copy.ts +223 -0
- package/src/react/runtimes/remote-thread-hook-on-tap.test.ts +2 -1
- package/src/react/runtimes/useExternalStoreRuntime.history-copy.test.tsx +483 -0
- package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +84 -3
- package/src/react/runtimes/useExternalStoreRuntime.suggestions.test.tsx +6 -2
- package/src/react/runtimes/useExternalStoreRuntime.ts +25 -5
- package/src/react/runtimes/useLocalRuntime.test.tsx +145 -1
- package/src/react/runtimes/useLocalRuntime.ts +8 -5
- package/src/react/runtimes/useRemoteThreadListRuntime.concurrent.test.tsx +84 -4
- package/src/react/runtimes/useRemoteThreadListRuntime.ts +5 -1
- package/src/react/types/MessagePartComponentTypes.ts +10 -0
- package/src/react/types/scopes/interactables.ts +3 -0
- package/src/runtime/api/attachment-runtime.ts +10 -5
- package/src/runtime/api/bindings.ts +6 -1
- package/src/runtime/api/composer-runtime.ts +29 -6
- package/src/runtime/api/message-part-runtime.test.ts +215 -0
- package/src/runtime/api/message-part-runtime.ts +44 -1
- package/src/runtime/api/message-runtime.test.ts +112 -2
- package/src/runtime/api/message-runtime.ts +25 -7
- package/src/runtime/api/thread-list-item-runtime.ts +5 -5
- package/src/runtime/api/thread-list-runtime.ts +3 -3
- package/src/runtime/api/thread-runtime.test.ts +59 -0
- package/src/runtime/api/thread-runtime.ts +21 -11
- package/src/runtime/base/base-composer-runtime-core.ts +548 -153
- package/src/runtime/base/base-thread-runtime-core.test.ts +1614 -136
- package/src/runtime/base/base-thread-runtime-core.ts +236 -46
- package/src/runtime/base/default-edit-composer-runtime-core.ts +24 -2
- package/src/runtime/base/default-thread-composer-runtime-core.ts +33 -3
- package/src/runtime/interfaces/composer-runtime-core.ts +19 -0
- package/src/runtime/interfaces/thread-runtime-core.ts +24 -1
- package/src/runtime/queue/message-queue.ts +11 -1
- package/src/runtime/utils/attachment-add-operations.ts +45 -2
- package/src/runtime/utils/attachment-send-operations.ts +54 -0
- package/src/runtime/utils/auto-status.test.ts +54 -0
- package/src/runtime/utils/auto-status.ts +3 -10
- package/src/runtime/utils/external-message-conversion.test.ts +91 -0
- package/src/runtime/utils/external-message-conversion.ts +9 -6
- package/src/runtime/utils/message-repository.test.ts +69 -1
- package/src/runtime/utils/message-repository.ts +14 -7
- package/src/runtime/utils/stored-message-parts.ts +216 -0
- package/src/runtime/utils/thread-message-like.test.ts +58 -0
- package/src/runtime/utils/thread-message-like.ts +79 -48
- package/src/runtime/utils/thread-runtime-lifecycle.test.ts +67 -0
- package/src/runtime/utils/thread-runtime-lifecycle.ts +42 -8
- package/src/runtime/utils/tool-interactions.test.ts +193 -0
- package/src/runtime/utils/tool-interactions.ts +147 -0
- package/src/runtimes/external-store/external-store-adapter.ts +25 -0
- package/src/runtimes/external-store/external-store-runtime-core.ts +10 -2
- package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +2 -2
- package/src/runtimes/external-store/external-store-thread-runtime-core.test.ts +49 -0
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +114 -32
- package/src/runtimes/inert/InertThreadRuntimeCore.test.ts +127 -56
- package/src/runtimes/inert/InertThreadRuntimeCore.ts +10 -1
- package/src/runtimes/local/local-thread-runtime-core.edit-cancellation.test.ts +70 -0
- package/src/runtimes/local/local-thread-runtime-core.test.ts +1866 -169
- package/src/runtimes/local/local-thread-runtime-core.ts +365 -40
- package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +53 -1
- package/src/runtimes/remote-thread-list/optimistic-state.ts +8 -3
- package/src/runtimes/tool-invocations/EDGE_CASES.md +19 -4
- package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +392 -39
- package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +31 -8
- package/src/store/clients/external-thread.test.ts +145 -0
- package/src/store/clients/external-thread.ts +669 -144
- package/src/store/clients/model-context-client.test.ts +8 -8
- package/src/store/clients/no-op-composer-client.ts +2 -0
- package/src/store/clients/submission-message.ts +27 -0
- package/src/store/clients/thread-message-client.test.ts +39 -0
- package/src/store/clients/thread-message-client.ts +13 -6
- package/src/store/index.ts +2 -2
- package/src/store/internal.ts +1 -0
- package/src/store/primitive-predicates.test.ts +119 -0
- package/src/store/primitive-predicates.ts +19 -4
- package/src/store/runtime-clients/composer-runtime-client.ts +4 -3
- package/src/store/runtime-clients/message-part-runtime-client.test.ts +42 -0
- package/src/store/runtime-clients/message-part-runtime-client.ts +4 -0
- package/src/store/runtime-clients/message-runtime-client.ts +5 -0
- package/src/store/runtime-clients/thread-runtime-client.test.tsx +243 -0
- package/src/store/runtime-clients/thread-runtime-client.ts +46 -9
- package/src/store/scopes/composer.ts +22 -4
- package/src/store/scopes/message.ts +12 -1
- package/src/store/scopes/part.ts +8 -0
- package/src/subscribable/subscribable.test.ts +205 -3
- package/src/subscribable/subscribable.ts +49 -7
- package/src/tests/RemoteThreadListThreadListRuntimeCore-errors.test.ts +95 -1
- package/src/tests/attachment-adapters.test.ts +16 -1
- package/src/tests/auiV0Encode.test.ts +412 -1
- package/src/tests/base-composer-runtime-core-addAttachment.test.ts +6 -6
- package/src/tests/base-composer-runtime-core-send.test.ts +722 -29
- package/src/tests/base-composer-runtime-core.test.ts +212 -5
- package/src/tests/composer-can-cancel.test.ts +35 -6
- package/src/tests/composer-can-send.test.ts +120 -1
- package/src/tests/composer-submission.test.tsx +796 -0
- package/src/tests/default-edit-composer-runtime-core.test.ts +149 -2
- package/src/tests/external-store-thread-list-runtime-core.test.ts +111 -0
- package/src/tests/external-store-thread-runtime-core-adapter.test.ts +810 -28
- package/src/tests/external-store-thread-runtime-core.test.ts +217 -0
- package/src/tests/external-thread-attachments.test.tsx +763 -26
- package/src/tests/external-thread-feedback.test.tsx +20 -7
- package/src/tests/external-thread-isLast.test.tsx +69 -0
- package/src/tests/external-thread-parity.test.tsx +1 -1
- package/src/tests/get-thread-state-isRunning.test.ts +2 -2
- package/src/tests/message-queue.test.ts +45 -10
- package/src/tests/remote-thread-list-adapter-switch.test.ts +45 -1
- package/src/tests/thread-switch-events.test.tsx +11 -7
- package/src/tests/useRemoteThreadListRuntime-controlled.test.tsx +2 -1
- package/src/types/message.test.ts +19 -0
- package/src/types/message.ts +65 -10
- package/src/utils/normalizePartStatus.ts +14 -1
- package/dist/tests/remote-thread-list-test-helpers.d.ts +0 -16
- package/dist/tests/remote-thread-list-test-helpers.d.ts.map +0 -1
- package/dist/tests/remote-thread-list-test-helpers.js +0 -59
- package/dist/tests/remote-thread-list-test-helpers.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteThreadListThreadListRuntimeCore.js","names":["ThreadListRuntimeCore","ThreadListRuntimeEvent","BaseSubscribable","WritableSubscribable","useSubscribable","nullProtoRecord","OptimisticState","EMPTY_THREAD_CORE","ClassifyAccumulator","RemoteThreadData","RemoteThreadState","classifyThreads","createEmptyRemoteThreadState","createThreadMappingId","getThreadData","normalizeCursor","reconcileInitializedThread","promoteNewThreadReducer","updateStatusReducer","preserveMidLoadTransitions","seedNewThread","statusSnapshot","RemoteThreadListAdapter","RemoteThreadListOptions","RemoteThreadMetadata","ThreadListAdapterChangedError","RemoteThreadListHookInstanceManager","applyTitleStream","isTitleSourceMessage","clearThreadTitleState","finishThreadTitleRename","runThreadTitleGeneration","startThreadTitleRename","ThreadTitleState","ComponentType","FC","Fragment","PropsWithChildren","useEffect","useId","useAui","ModelContextProvider","RuntimeAdapterProvider","useStableRuntimeAdapters","invokeUserCallback","threadNotFoundError","threadIdOrRemoteId","action","Error","threadStatusError","status","EMPTY_REMOTE_STATE","RemoteThreadListThreadListRuntimeCore","_options","_hookManager","_runtimeAdapters","modelContext","_loadThreadsPromise","Promise","_loadMorePromise","_loadGeneration","_adapterGeneration","_replaceListOnNextLoad","_staleThreadIdsOnReplace","ReadonlySet","_switchGeneration","_switchTask","_titleStates","Map","_mainThreadId","_state","_useAdaptersProvider","children","useAdapters","adapter","unstable_useAdapters","undefined","_SynthesizedAdapters","NonNullable","adapters","resolveProvider","unstable_Provider","threadItems","value","threadData","getLoadThreadsPromise","generation","replacedList","statusAtRequest","baseValue","optimisticUpdate","execute","list","loading","state","isLoading","loadError","then","l","replaceList","_replaceWithThreads","threads","nextCursor","fresh","threadIds","archivedThreadIds","threadIdMap","merged","cursor","catch","error","console","update","threadId","getItemById","id","_switchToThreadFromProp","loadMore","initialState","resolve","dedup","after","isLoadingMore","appended","constructor","options","contextProvider","subscribe","_notifySubscribers","_notifyThreadIdChange","runtimeHook","__internal_setDefaultAdapters","__internal_subscribeRunningChanged","__internal_subscribeRuntimeReplaced","queueMicrotask","providerStore","__internal_setOptions","switchToNewThread","_initialThreadLoaded","adapterChanged","controlledThreadIdChanged","setState","setRuntimeHook","Set","Object","values","filter","item","map","clear","_requireAdapterGeneration","_requireAdapterSettled","carried","newThreadId","mappingId","hasOwn","draft","push","stale","has","remoteId","seed","currentMappingId","current","includes","nextState","preservedDraft","seeded","_lastNotifiedThreadId","nextIds","stopThreadRuntime","startThreadRuntime","__internal_load","startThreadId","initialThreadId","switchTask","switchToThread","reloadMainThread","runtimeCore","getThreadRuntimeCore","unstable_refetchThread","__internal_restartThreadRuntime","reload","hasMore","mainThreadId","_mainThreadRemoteId","emit","onThreadIdChange","getMainThreadRuntimeCore","result","data","unstable_isThreadRunning","__internal_isThreadRunning","unstable_subscribeThreadEvents","callback","event","__internal_subscribeThreadEvents","unarchive","_startSwitchToThread","emitThreadIdChange","task","_switchToThread","remoteMetadata","fetch","newThreadData","initializeTask","externalId","title","lastMessageAt","custom","newThreadIdMap","wasInTarget","threadIdsWithoutRemote","archivedThreadIdsWithoutRemote","newThreadIds","newArchivedThreadIds","_startSwitchToNewThread","_switchToNewThread","waitForUpdate","next","initialize","adapterGeneration","removedMappingId","optimistic","reconciliation","survivorMappingId","generateTitle","automatic","messages","states","generate","onTitle","stream","rename","applyTitle","currentData","newTitle","claim","updateCustom","Record","_ensureThreadIsNotMain","lastAwaitedTask","startedFallback","archive","delete","__internal_dispose","detach","boundIdsStore","__internal_RenderComponent","getState","i","boundIds","Provider","aui","enabled","length"],"sources":["../../../src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx"],"sourcesContent":["import type {\n ThreadListRuntimeCore,\n ThreadListRuntimeEvent,\n} from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport {\n BaseSubscribable,\n WritableSubscribable,\n} from \"../../subscribable/subscribable\";\nimport { useSubscribable } from \"../../store/runtime-clients/useSubscribable\";\nimport { nullProtoRecord } from \"../../utils/record\";\nimport { OptimisticState } from \"../../runtimes/remote-thread-list/optimistic-state\";\nimport { EMPTY_THREAD_CORE } from \"../../runtimes/remote-thread-list/empty-thread-core\";\nimport type {\n ClassifyAccumulator,\n RemoteThreadData,\n RemoteThreadState,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport {\n classifyThreads,\n createEmptyRemoteThreadState,\n createThreadMappingId,\n getThreadData,\n normalizeCursor,\n reconcileInitializedThread,\n promoteNewThreadReducer,\n updateStatusReducer,\n preserveMidLoadTransitions,\n seedNewThread,\n statusSnapshot,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport type {\n RemoteThreadListAdapter,\n RemoteThreadListOptions,\n RemoteThreadMetadata,\n} from \"../../runtimes/remote-thread-list/types\";\nimport { ThreadListAdapterChangedError } from \"../../runtimes/remote-thread-list/adapter-changed\";\nimport { RemoteThreadListHookInstanceManager } from \"./RemoteThreadListHookInstanceManager\";\nimport {\n applyTitleStream,\n isTitleSourceMessage,\n} from \"../../runtimes/remote-thread-list/title\";\nimport {\n clearThreadTitleState,\n finishThreadTitleRename,\n runThreadTitleGeneration,\n startThreadTitleRename,\n type ThreadTitleState,\n} from \"../../runtimes/remote-thread-list/title-generation\";\nimport {\n type ComponentType,\n type FC,\n Fragment,\n type PropsWithChildren,\n useEffect,\n useId,\n} from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport { RuntimeAdapterProvider } from \"./RuntimeAdapterProvider\";\nimport { useStableRuntimeAdapters } from \"./useRuntimeAdapters\";\nimport { invokeUserCallback } from \"../../utils/invoke-user-callback\";\n\nconst threadNotFoundError = (threadIdOrRemoteId: string, action: string) =>\n new Error(`Thread \"${threadIdOrRemoteId}\" not found while ${action}.`);\n\nconst threadStatusError = (\n threadIdOrRemoteId: string,\n status: RemoteThreadData[\"status\"],\n action: string,\n) =>\n new Error(\n `Thread \"${threadIdOrRemoteId}\" has status \"${status}\", so it cannot ${action}.`,\n );\n\nconst EMPTY_REMOTE_STATE = createEmptyRemoteThreadState();\n\nexport class RemoteThreadListThreadListRuntimeCore\n extends BaseSubscribable\n implements ThreadListRuntimeCore\n{\n private _options!: RemoteThreadListOptions;\n private readonly _hookManager: RemoteThreadListHookInstanceManager;\n private readonly _runtimeAdapters: { modelContext: ModelContextProvider };\n\n private _loadThreadsPromise: Promise<void> | undefined;\n private _loadMorePromise: Promise<void> | undefined;\n private _loadGeneration = 0;\n private _adapterGeneration = 0;\n private _replaceListOnNextLoad = false;\n private _staleThreadIdsOnReplace: ReadonlySet<string> | undefined;\n private _switchGeneration = 0;\n private _switchTask: Promise<void> | undefined;\n private readonly _titleStates = new Map<string, ThreadTitleState>();\n\n private _mainThreadId!: string;\n private readonly _state = new OptimisticState<RemoteThreadState>(\n EMPTY_REMOTE_STATE,\n );\n\n private readonly _useAdaptersProvider: FC<PropsWithChildren> = ({\n children,\n }) => {\n const useAdapters = this._options.adapter.unstable_useAdapters;\n if (useAdapters === undefined) return children;\n return (\n <this._SynthesizedAdapters useAdapters={useAdapters}>\n {children}\n </this._SynthesizedAdapters>\n );\n };\n\n private readonly _SynthesizedAdapters: FC<\n PropsWithChildren<{\n useAdapters: NonNullable<RemoteThreadListAdapter[\"unstable_useAdapters\"]>;\n }>\n > = ({ useAdapters, children }) => {\n const adapters = useStableRuntimeAdapters(useAdapters());\n if (adapters == null) return children;\n return (\n <RuntimeAdapterProvider adapters={adapters}>\n {children}\n </RuntimeAdapterProvider>\n );\n };\n\n private resolveProvider(\n adapter: RemoteThreadListAdapter,\n ): ComponentType<PropsWithChildren> {\n if (adapter.unstable_Provider !== undefined) {\n return adapter.unstable_Provider as ComponentType<PropsWithChildren>;\n }\n if (adapter.unstable_useAdapters === undefined) return Fragment;\n return this._useAdaptersProvider;\n }\n\n public get threadItems() {\n return this._state.value.threadData;\n }\n\n public getLoadThreadsPromise() {\n // TODO this needs to be cached in case this promise is loaded during suspense\n if (!this._loadThreadsPromise) {\n const generation = this._loadGeneration;\n let replacedList = false;\n const statusAtRequest = statusSnapshot(this._state.baseValue);\n this._loadThreadsPromise = this._state\n .optimisticUpdate({\n execute: () => this._options.adapter.list(),\n loading: (state) => {\n if (generation !== this._loadGeneration) return state;\n return {\n ...state,\n isLoading: true,\n loadError: undefined,\n };\n },\n then: (state, l) => {\n if (generation !== this._loadGeneration) return state;\n const replaceList = this._replaceListOnNextLoad;\n if (replaceList) {\n this._replaceListOnNextLoad = false;\n replacedList = true;\n return this._replaceWithThreads(\n { ...state, loadError: undefined },\n l.threads,\n normalizeCursor(l.nextCursor),\n );\n }\n\n const fresh = classifyThreads(l.threads, {\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n const merged = {\n ...state,\n isLoading: false,\n loadError: undefined,\n cursor: normalizeCursor(l.nextCursor),\n threadIds: fresh.threadIds,\n archivedThreadIds: fresh.archivedThreadIds,\n threadIdMap: fresh.threadIdMap,\n threadData: fresh.threadData,\n };\n return preserveMidLoadTransitions(merged, state, statusAtRequest);\n },\n })\n .catch((error: unknown) => {\n if (generation !== this._loadGeneration) return;\n console.error(\"[assistant-ui] thread list load failed:\", error);\n this._loadThreadsPromise = undefined;\n if (!this._replaceListOnNextLoad) {\n this._state.update({\n ...this._state.baseValue,\n isLoading: false,\n loadError: error,\n });\n return;\n }\n this._replaceListOnNextLoad = false;\n replacedList = true;\n this._state.update(\n this._replaceWithThreads(\n { ...this._state.baseValue, loadError: error },\n [],\n undefined,\n ),\n );\n })\n .then(() => {\n if (!replacedList) return;\n const threadId = this._options.threadId;\n if (threadId === undefined) return;\n if (this.getItemById(threadId)?.id === this._mainThreadId) return;\n this._switchToThreadFromProp(threadId).catch(() => {});\n });\n }\n\n return this._loadThreadsPromise;\n }\n\n public loadMore(): Promise<void> {\n if (this._loadMorePromise) return this._loadMorePromise;\n\n const initialState = this._state.value;\n if (initialState.cursor === undefined || initialState.isLoading) {\n return Promise.resolve();\n }\n\n const generation = this._loadGeneration;\n const adapter = this._options.adapter;\n const cursor = initialState.cursor;\n\n const dedup = this._state\n .optimisticUpdate({\n execute: () => adapter.list({ after: cursor }),\n loading: (state) => {\n if (generation !== this._loadGeneration) return state;\n return { ...state, isLoadingMore: true };\n },\n then: (state, l) => {\n if (generation !== this._loadGeneration) return state;\n if (adapter !== this._options.adapter) return state;\n\n const appended = classifyThreads(l.threads, {\n threadIds: [...state.threadIds],\n archivedThreadIds: [...state.archivedThreadIds],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n\n return {\n ...state,\n isLoadingMore: false,\n cursor: normalizeCursor(l.nextCursor),\n threadIds: appended.threadIds,\n archivedThreadIds: appended.archivedThreadIds,\n threadIdMap: appended.threadIdMap,\n threadData: appended.threadData,\n };\n },\n })\n .catch((error: unknown) => {\n if (generation !== this._loadGeneration) return;\n console.error(\"[assistant-ui] thread list loadMore failed:\", error);\n })\n .then(() => {\n if (this._loadMorePromise === dedup) {\n this._loadMorePromise = undefined;\n }\n });\n\n this._loadMorePromise = dedup;\n return dedup;\n }\n\n constructor(\n options: RemoteThreadListOptions,\n contextProvider: ModelContextProvider,\n ) {\n super();\n\n this._state.subscribe(() => {\n this._notifySubscribers();\n this._notifyThreadIdChange();\n });\n this._runtimeAdapters = { modelContext: contextProvider };\n this._hookManager = new RemoteThreadListHookInstanceManager(\n options.runtimeHook,\n this,\n );\n this._hookManager.__internal_setDefaultAdapters(this._runtimeAdapters);\n this._hookManager.__internal_subscribeRunningChanged(() =>\n this._notifySubscribers(),\n );\n this._hookManager.__internal_subscribeRuntimeReplaced(() => {\n // A republish can land during the thread resource's render, where a\n // synchronous notify would re-enter store consumers mid-render.\n queueMicrotask(() => this._notifySubscribers());\n });\n this.providerStore = new WritableSubscribable(\n this.resolveProvider(options.adapter),\n );\n this.__internal_setOptions(options);\n this.switchToNewThread();\n }\n\n private _initialThreadLoaded = false;\n private providerStore;\n\n public __internal_setOptions(options: RemoteThreadListOptions) {\n if (this._options === options) return;\n\n const adapterChanged =\n this._options !== undefined && this._options.adapter !== options.adapter;\n const controlledThreadIdChanged =\n this._initialThreadLoaded &&\n this._options !== undefined &&\n this._options.threadId !== options.threadId;\n\n this._options = options;\n\n this.providerStore.setState(this.resolveProvider(options.adapter));\n\n this._hookManager.setRuntimeHook(options.runtimeHook);\n\n if (adapterChanged) {\n this._loadGeneration++;\n this._adapterGeneration++;\n this._switchGeneration++;\n this._switchTask = undefined;\n this._loadThreadsPromise = undefined;\n this._loadMorePromise = undefined;\n this._replaceListOnNextLoad = true;\n this._staleThreadIdsOnReplace = new Set(\n Object.values(this._state.baseValue.threadData)\n .filter((item) => item.status !== \"new\")\n .map((item) => item.id),\n );\n this._state.update({\n ...this._state.baseValue,\n cursor: undefined,\n loadError: undefined,\n });\n this._titleStates.clear();\n }\n\n if (controlledThreadIdChanged) {\n this._switchToThreadFromProp(options.threadId).catch(() => {});\n }\n }\n\n private _requireAdapterGeneration(generation: number) {\n if (generation !== this._adapterGeneration) {\n throw new ThreadListAdapterChangedError();\n }\n }\n\n private _requireAdapterSettled() {\n if (this._replaceListOnNextLoad) {\n throw new ThreadListAdapterChangedError();\n }\n }\n\n private _replaceWithThreads(\n state: RemoteThreadState,\n threads: readonly RemoteThreadMetadata[],\n cursor: string | undefined,\n ): RemoteThreadState {\n const carried: RemoteThreadData[] = [];\n if (state.newThreadId) {\n const mappingId = Object.hasOwn(state.threadIdMap, state.newThreadId)\n ? state.threadIdMap[state.newThreadId]\n : undefined;\n const draft =\n mappingId && Object.hasOwn(state.threadData, mappingId)\n ? state.threadData[mappingId]\n : undefined;\n if (draft?.status === \"new\") carried.push(draft);\n }\n\n const stale = this._staleThreadIdsOnReplace;\n if (stale) {\n for (const item of Object.values(state.threadData)) {\n if (stale.has(item.id)) continue;\n if (item.status !== \"new\" && item.remoteId === undefined) continue;\n carried.push(item);\n }\n }\n this._staleThreadIdsOnReplace = undefined;\n\n const seed: ClassifyAccumulator = {\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: nullProtoRecord(),\n threadData: nullProtoRecord(),\n };\n for (const item of carried) {\n const mappingId = createThreadMappingId(item.id);\n if (Object.hasOwn(seed.threadData, mappingId)) continue;\n seed.threadIdMap[item.id] = mappingId;\n if (item.remoteId !== undefined) {\n seed.threadIdMap[item.remoteId] = mappingId;\n }\n seed.threadData[mappingId] = item;\n }\n\n const { threadIds, archivedThreadIds, threadIdMap, threadData } =\n classifyThreads(threads, seed);\n\n for (const item of carried) {\n if (item.remoteId === undefined) continue;\n const currentMappingId = createThreadMappingId(item.id);\n const current = Object.hasOwn(threadData, currentMappingId)\n ? threadData[currentMappingId]\n : undefined;\n if (current === undefined) continue;\n if (current.status === \"regular\" && !threadIds.includes(current.id)) {\n threadIds.push(current.id);\n } else if (\n current.status === \"archived\" &&\n !archivedThreadIds.includes(current.id)\n ) {\n archivedThreadIds.push(current.id);\n }\n }\n\n let nextState: RemoteThreadState = {\n ...state,\n isLoading: false,\n cursor,\n threadIds,\n archivedThreadIds,\n threadIdMap,\n threadData,\n newThreadId:\n state.newThreadId !== undefined &&\n !Object.hasOwn(threadIdMap, state.newThreadId)\n ? undefined\n : state.newThreadId,\n };\n\n if (getThreadData(nextState, this._mainThreadId) === undefined) {\n const preservedDraft = nextState.newThreadId;\n if (preservedDraft !== undefined) {\n this._mainThreadId = preservedDraft;\n } else {\n const seeded = seedNewThread(nextState);\n this._mainThreadId = seeded.id;\n nextState = seeded.state;\n }\n if (this._options.threadId === undefined) {\n this._notifyThreadIdChange();\n } else {\n this._lastNotifiedThreadId = undefined;\n }\n }\n\n const nextIds = new Set(\n Object.values(nextState.threadData).map((item) => item.id),\n );\n for (const item of Object.values(state.threadData)) {\n if (!nextIds.has(item.id)) {\n this._hookManager.stopThreadRuntime(item.id);\n }\n }\n void this._hookManager.startThreadRuntime(this._mainThreadId).then(\n () => this._notifySubscribers(),\n () => undefined,\n );\n\n return nextState;\n }\n\n public __internal_load() {\n this.getLoadThreadsPromise(); // begin loading on initial bind\n if (this._initialThreadLoaded) return;\n this._initialThreadLoaded = true;\n\n const startThreadId =\n this._options.threadId ?? this._options.initialThreadId;\n if (startThreadId !== undefined) {\n const switchTask =\n this._options.threadId !== undefined\n ? this._switchToThreadFromProp(startThreadId)\n : this.switchToThread(startThreadId);\n switchTask.catch(() => {});\n }\n }\n\n public async reloadMainThread(): Promise<void> {\n const threadId = this._mainThreadId;\n if (threadId === undefined) return;\n\n // An unsent thread holds no remote state, so a refetch would only discard\n // what the user has typed.\n if (this.getItemById(threadId)?.status === \"new\") return;\n\n const runtimeCore = this._hookManager.getThreadRuntimeCore(threadId);\n\n try {\n if (runtimeCore?.unstable_refetchThread) {\n // Called on the core so class-method implementations keep `this`.\n await runtimeCore.unstable_refetchThread();\n } else {\n await this._hookManager.__internal_restartThreadRuntime(threadId);\n }\n } catch (error) {\n // delete and detach switch the main thread away before stopping the\n // runtime, so a rejection once that has happened belongs to them.\n if (threadId !== this._mainThreadId) return;\n throw error;\n }\n\n if (threadId !== this._mainThreadId) return;\n this._notifySubscribers();\n }\n\n public reload() {\n this._loadGeneration++;\n this._loadThreadsPromise = undefined;\n this._loadMorePromise = undefined;\n this._state.update({\n ...this._state.baseValue,\n cursor: undefined,\n });\n return this.getLoadThreadsPromise();\n }\n\n public get isLoading() {\n return this._state.value.isLoading;\n }\n\n public get loadError() {\n return this._state.value.loadError;\n }\n\n public get isLoadingMore() {\n return this._state.value.isLoadingMore;\n }\n\n public get hasMore() {\n return this._state.value.cursor !== undefined;\n }\n\n public get threadIds() {\n return this._state.value.threadIds;\n }\n\n public get archivedThreadIds() {\n return this._state.value.archivedThreadIds;\n }\n\n public get newThreadId() {\n return this._state.value.newThreadId;\n }\n\n public get mainThreadId(): string {\n return this._mainThreadId;\n }\n\n // The settled remote ID of the active thread, or undefined while it is still\n // a new/optimistic thread. This is the value surfaced to `onThreadIdChange`.\n private get _mainThreadRemoteId(): string | undefined {\n if (this._mainThreadId === undefined) return undefined;\n return getThreadData(this._state.value, this._mainThreadId)?.remoteId;\n }\n\n private _lastNotifiedThreadId: string | undefined = undefined;\n\n private _notifyThreadIdChange(emit = true) {\n const threadId = this._mainThreadRemoteId;\n if (this._lastNotifiedThreadId === threadId) return;\n this._lastNotifiedThreadId = threadId;\n if (emit) {\n invokeUserCallback(\n \"assistant-ui\",\n \"onThreadIdChange\",\n this._options.onThreadIdChange,\n threadId,\n );\n }\n }\n\n public getMainThreadRuntimeCore() {\n const result = this._hookManager.getThreadRuntimeCore(this._mainThreadId);\n if (!result) return EMPTY_THREAD_CORE;\n return result;\n }\n\n public getThreadRuntimeCore(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data)\n throw threadNotFoundError(threadIdOrRemoteId, \"getting its runtime\");\n\n const result = this._hookManager.getThreadRuntimeCore(data.id);\n if (!result)\n throw new Error(\n `Runtime for thread \"${threadIdOrRemoteId}\" not found while getting its runtime.`,\n );\n return result;\n }\n\n public unstable_isThreadRunning(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) return false;\n return this._hookManager.__internal_isThreadRunning(data.id);\n }\n\n public unstable_subscribeThreadEvents(\n callback: (event: ThreadListRuntimeEvent) => void,\n ) {\n return this._hookManager.__internal_subscribeThreadEvents(callback);\n }\n\n public getItemById(threadIdOrRemoteId: string) {\n return getThreadData(this._state.value, threadIdOrRemoteId);\n }\n\n public switchToThread(\n threadIdOrRemoteId: string,\n options?: { unarchive?: boolean },\n ): Promise<void> {\n return this._startSwitchToThread(threadIdOrRemoteId, options, true);\n }\n\n private _startSwitchToThread(\n threadIdOrRemoteId: string,\n options: { unarchive?: boolean } | undefined,\n emitThreadIdChange: boolean,\n ): Promise<void> {\n const generation = ++this._switchGeneration;\n const task = this._switchToThread(\n threadIdOrRemoteId,\n options,\n generation,\n emitThreadIdChange,\n );\n this._switchTask = task;\n return task;\n }\n\n private async _switchToThread(\n threadIdOrRemoteId: string,\n options: { unarchive?: boolean } | undefined,\n generation: number,\n emitThreadIdChange: boolean,\n ): Promise<void> {\n if (\n this._replaceListOnNextLoad &&\n threadIdOrRemoteId !== this._state.value.newThreadId\n ) {\n throw new ThreadListAdapterChangedError();\n }\n let data = this.getItemById(threadIdOrRemoteId);\n\n if (!data) {\n const remoteMetadata =\n await this._options.adapter.fetch(threadIdOrRemoteId);\n if (generation !== this._switchGeneration) return;\n\n const state = this._state.value;\n const mappingId = createThreadMappingId(remoteMetadata.remoteId);\n\n const newThreadData = {\n ...state.threadData,\n [mappingId]: {\n id: mappingId,\n initializeTask: Promise.resolve({\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n }),\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n status: remoteMetadata.status,\n title: remoteMetadata.title,\n lastMessageAt: remoteMetadata.lastMessageAt,\n custom: remoteMetadata.custom,\n } as RemoteThreadData,\n };\n\n const newThreadIdMap = {\n ...state.threadIdMap,\n [remoteMetadata.remoteId]: mappingId,\n };\n\n // A concurrent `list()` may already have placed this thread; keep that\n // position and only merge metadata. A genuinely absent thread stays\n // appended: it may live on an unloaded page, and a prepend would pin it\n // above newer threads permanently. Filtering both arrays first still\n // prevents duplication or a wrong-status entry from `list()`.\n const remoteId = remoteMetadata.remoteId;\n const wasInTarget =\n remoteMetadata.status === \"regular\"\n ? state.threadIds.includes(remoteId)\n : state.archivedThreadIds.includes(remoteId);\n\n const threadIdsWithoutRemote = state.threadIds.filter(\n (id) => id !== remoteId,\n );\n const archivedThreadIdsWithoutRemote = state.archivedThreadIds.filter(\n (id) => id !== remoteId,\n );\n\n const newThreadIds =\n remoteMetadata.status === \"regular\"\n ? wasInTarget\n ? state.threadIds\n : [...threadIdsWithoutRemote, remoteId]\n : threadIdsWithoutRemote;\n const newArchivedThreadIds =\n remoteMetadata.status === \"archived\"\n ? wasInTarget\n ? state.archivedThreadIds\n : [...archivedThreadIdsWithoutRemote, remoteId]\n : archivedThreadIdsWithoutRemote;\n\n this._state.update({\n ...state,\n threadIds: newThreadIds,\n archivedThreadIds: newArchivedThreadIds,\n threadIdMap: newThreadIdMap,\n threadData: newThreadData,\n });\n\n data = this.getItemById(threadIdOrRemoteId);\n }\n\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"switching to it\");\n if (this._mainThreadId === data.id) return;\n\n const task = this._hookManager.startThreadRuntime(data.id);\n if (this.mainThreadId !== undefined) {\n await task;\n } else {\n void task.then(\n () => this._notifySubscribers(),\n () => undefined,\n );\n }\n\n if (generation !== this._switchGeneration) return;\n\n let current = this.getItemById(data.id);\n if (current?.id !== data.id) return;\n\n if (current.status === \"archived\" && options?.unarchive !== false) {\n await current.initializeTask;\n if (generation !== this._switchGeneration) return;\n current = this.getItemById(data.id);\n if (current?.id !== data.id) return;\n if (current.status === \"archived\") {\n await this.unarchive(current.id);\n if (generation !== this._switchGeneration) return;\n current = this.getItemById(data.id);\n if (current?.id !== data.id) return;\n }\n }\n this._mainThreadId = current.id;\n\n this._notifySubscribers();\n this._notifyThreadIdChange(emitThreadIdChange);\n }\n\n public switchToNewThread(): Promise<void> {\n return this._startSwitchToNewThread(true);\n }\n\n private _switchToThreadFromProp(threadId: string | undefined): Promise<void> {\n return threadId !== undefined\n ? this._startSwitchToThread(threadId, undefined, false)\n : this._startSwitchToNewThread(false);\n }\n\n private _startSwitchToNewThread(emitThreadIdChange: boolean): Promise<void> {\n const generation = ++this._switchGeneration;\n const task = this._switchToNewThread(generation, emitThreadIdChange);\n this._switchTask = task;\n return task;\n }\n\n private async _switchToNewThread(\n generation: number,\n emitThreadIdChange: boolean,\n ): Promise<void> {\n // an initialization transaction is in progress, wait for it to settle\n while (\n this._state.baseValue.newThreadId !== undefined &&\n this._state.value.newThreadId === undefined\n ) {\n await this._state.waitForUpdate();\n if (generation !== this._switchGeneration) return;\n }\n\n const state = this._state.baseValue;\n let id: string | undefined = this._state.value.newThreadId;\n if (id === undefined) {\n const next = seedNewThread(state);\n id = next.id;\n this._state.update(next.state);\n }\n\n return this._switchToThread(id, undefined, generation, emitThreadIdChange);\n }\n\n public initialize = async (threadId: string) => {\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n if (this._state.value.newThreadId !== threadId) {\n this._requireAdapterSettled();\n const data = this.getItemById(threadId);\n if (!data) throw threadNotFoundError(threadId, \"initializing it\");\n if (data.status === \"new\")\n throw threadStatusError(threadId, data.status, \"be initialized here\");\n const { remoteId, externalId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return { remoteId, externalId };\n }\n\n this._requireAdapterGeneration(adapterGeneration);\n const initializeTask = adapter.initialize(threadId);\n let removedMappingId: string | undefined;\n const { remoteId, externalId } = await this._state.optimisticUpdate({\n execute: () => initializeTask,\n optimistic: (state) =>\n promoteNewThreadReducer(state, threadId, initializeTask),\n then: (state, { remoteId, externalId }) => {\n if (adapterGeneration !== this._adapterGeneration) return state;\n const reconciliation = reconcileInitializedThread(\n state,\n threadId,\n remoteId,\n externalId,\n threadId,\n );\n removedMappingId = reconciliation.removedMappingId;\n if (removedMappingId === this._mainThreadId) {\n this._mainThreadId = reconciliation.survivorMappingId;\n }\n return reconciliation.state;\n },\n });\n this._requireAdapterGeneration(adapterGeneration);\n if (removedMappingId !== undefined) {\n this._hookManager.stopThreadRuntime(removedMappingId);\n }\n return { remoteId, externalId };\n };\n\n public generateTitle = async (\n threadId: string,\n options?: { automatic?: boolean },\n ) => {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadId);\n if (!data) throw threadNotFoundError(threadId, \"generating its title\");\n if (data.status === \"new\")\n throw threadStatusError(threadId, data.status, \"generate a title\");\n\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n\n const runtimeCore = this._hookManager.getThreadRuntimeCore(data.id);\n if (!runtimeCore) return; // thread is no longer running\n\n // Incomplete assistant turns (running status, possibly empty content)\n // would make the payload race-dependent; the title reads settled\n // messages only, matching the trigger's readiness gate.\n const messages = runtimeCore.messages.filter(isTitleSourceMessage);\n await runThreadTitleGeneration({\n states: this._titleStates,\n threadId: data.id,\n automatic: options?.automatic === true,\n generate: async (onTitle) => {\n const stream = await adapter.generateTitle(remoteId, messages);\n this._requireAdapterGeneration(adapterGeneration);\n await applyTitleStream(stream, onTitle);\n },\n rename: async (title) => {\n this._requireAdapterGeneration(adapterGeneration);\n await adapter.rename(remoteId, title);\n },\n applyTitle: async (title) => {\n await this._state.optimisticUpdate({\n execute: async () => {},\n optimistic: (state) => {\n if (adapterGeneration !== this._adapterGeneration) return state;\n const currentData = getThreadData(state, data.id);\n if (!currentData) return state;\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [currentData.id]: {\n ...currentData,\n title,\n },\n },\n };\n },\n });\n },\n });\n };\n\n public async rename(\n threadIdOrRemoteId: string,\n newTitle: string,\n ): Promise<void> {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"renaming it\");\n if (data.status === \"new\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be renamed\");\n\n const claim = startThreadTitleRename(this._titleStates, data.id, newTitle);\n try {\n const result = await this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return adapter.rename(remoteId, newTitle);\n },\n optimistic: (state) => {\n const currentData = getThreadData(state, threadIdOrRemoteId);\n if (!currentData) return state;\n\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [currentData.id]: {\n ...currentData,\n title: newTitle,\n },\n },\n };\n },\n });\n finishThreadTitleRename(this._titleStates, data.id, claim, true);\n return result;\n } catch (error) {\n finishThreadTitleRename(this._titleStates, data.id, claim, false);\n throw error;\n }\n }\n\n public async updateCustom(\n threadIdOrRemoteId: string,\n custom: Record<string, unknown> | undefined,\n ): Promise<void> {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data)\n throw threadNotFoundError(\n threadIdOrRemoteId,\n \"updating its custom metadata\",\n );\n if (data.status === \"new\")\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"update custom metadata\",\n );\n\n if (!adapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n if (!adapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n return adapter.updateCustom(remoteId, custom);\n },\n optimistic: (state) => {\n const data = getThreadData(state, threadIdOrRemoteId);\n if (!data) return state;\n\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [data.id]: {\n ...data,\n custom,\n },\n },\n };\n },\n });\n }\n\n private async _ensureThreadIsNotMain(threadId: string) {\n if (threadId === this.newThreadId)\n throw new Error(\"Cannot ensure new thread is not main\");\n\n let lastAwaitedTask: Promise<void> | undefined;\n\n while (threadId === this._mainThreadId) {\n let switchTask = this._switchTask;\n const startedFallback = !switchTask || switchTask === lastAwaitedTask;\n if (startedFallback) switchTask = this.switchToNewThread();\n lastAwaitedTask = switchTask;\n\n try {\n await switchTask;\n } catch (error) {\n if (startedFallback && this._switchTask === switchTask) {\n throw error;\n }\n }\n }\n }\n\n public async archive(threadIdOrRemoteId: string) {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"archiving it\");\n if (data.status !== \"regular\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be archived\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._requireAdapterGeneration(adapterGeneration);\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return adapter.archive(remoteId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"archived\");\n },\n });\n }\n\n public async unarchive(threadIdOrRemoteId: string): Promise<void> {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"unarchiving it\");\n if (data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be unarchived\");\n\n return this._state.optimisticUpdate({\n execute: async () => {\n try {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return await adapter.unarchive(remoteId);\n } catch (error) {\n if (adapterGeneration === this._adapterGeneration) {\n await this._ensureThreadIsNotMain(data.id);\n }\n throw error;\n }\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"regular\");\n },\n });\n }\n\n public async delete(threadIdOrRemoteId: string) {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"deleting it\");\n if (data.status !== \"regular\" && data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be deleted\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._requireAdapterGeneration(adapterGeneration);\n const result = await this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return await adapter.delete(remoteId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"deleted\");\n },\n });\n // The optimistic layer survives an adapter swap, so a resolved deletion has\n // dropped the slot from `threadData`, where `_replaceWithThreads` would\n // otherwise have found it to stop.\n this._hookManager.stopThreadRuntime(data.id);\n clearThreadTitleState(this._titleStates, data.id);\n return result;\n }\n\n public __internal_dispose() {\n this._hookManager.__internal_dispose();\n }\n\n public async detach(threadIdOrRemoteId: string): Promise<void> {\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"detaching it\");\n if (data.status !== \"regular\" && data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be detached\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._requireAdapterGeneration(adapterGeneration);\n this._hookManager.stopThreadRuntime(data.id);\n }\n\n private boundIdsStore = new WritableSubscribable<readonly string[]>([]);\n\n public __internal_RenderComponent: FC = () => {\n const id = useId();\n useEffect(() => {\n this.boundIdsStore.setState([...this.boundIdsStore.getState(), id]);\n return () => {\n this.boundIdsStore.setState(\n this.boundIdsStore.getState().filter((i) => i !== id),\n );\n };\n }, [id]);\n\n const boundIds = useSubscribable(this.boundIdsStore);\n const Provider = useSubscribable(this.providerStore);\n const aui = useAui();\n const enabled = boundIds.length === 0 || boundIds[0] === id;\n\n return (\n enabled && (\n <RuntimeAdapterProvider adapters={this._runtimeAdapters}>\n <this._hookManager.__internal_RenderThreadRuntimes\n provider={Provider}\n />\n <this._hookManager.__internal_Host parentClient={aui} />\n </RuntimeAdapterProvider>\n )\n );\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RemoteThreadListThreadListRuntimeCore.js","names":["ThreadListRuntimeCore","ThreadListRuntimeEvent","BaseSubscribable","WritableSubscribable","useSubscribable","handleThreadListAction","nullProtoRecord","OptimisticState","EMPTY_THREAD_CORE","ClassifyAccumulator","RemoteThreadData","RemoteThreadState","classifyThreads","createEmptyRemoteThreadState","createThreadMappingId","getThreadData","normalizeCursor","reconcileInitializedThread","promoteNewThreadReducer","updateStatusReducer","preserveMidLoadTransitions","seedNewThread","statusSnapshot","RemoteThreadListAdapter","RemoteThreadListOptions","RemoteThreadMetadata","ThreadListAdapterChangedError","RemoteThreadListHookInstanceManager","applyTitleStream","isTitleSourceMessage","clearThreadTitleState","finishThreadTitleRename","runThreadTitleGeneration","startThreadTitleRename","ThreadTitleState","ComponentType","FC","Fragment","PropsWithChildren","useEffect","useId","useAui","ModelContextProvider","RuntimeAdapterProvider","useStableRuntimeAdapters","invokeUserCallback","threadNotFoundError","threadIdOrRemoteId","action","Error","threadStatusError","status","EMPTY_REMOTE_STATE","RemoteThreadListThreadListRuntimeCore","_options","_hookManager","_runtimeAdapters","modelContext","_loadThreadsPromise","Promise","_loadMorePromise","_loadGeneration","_adapterGeneration","_replaceListOnNextLoad","_staleThreadIdsOnReplace","ReadonlySet","_switchGeneration","_switchTask","_titleStates","Map","_mainThreadId","_state","_useAdaptersProvider","children","useAdapters","adapter","unstable_useAdapters","undefined","_SynthesizedAdapters","NonNullable","adapters","resolveProvider","unstable_Provider","threadItems","value","threadData","getLoadThreadsPromise","generation","replacedList","statusAtRequest","baseValue","optimisticUpdate","execute","list","loading","state","isLoading","loadError","then","l","replaceList","_replaceWithThreads","threads","nextCursor","fresh","threadIds","archivedThreadIds","threadIdMap","merged","cursor","catch","error","console","update","threadId","getItemById","id","_switchToThreadFromProp","loadMore","initialState","resolve","dedup","after","isLoadingMore","appended","constructor","options","contextProvider","subscribe","_notifySubscribers","_notifyThreadIdChange","runtimeHook","__internal_setDefaultAdapters","__internal_subscribeRunningChanged","__internal_subscribeRuntimeReplaced","queueMicrotask","providerStore","__internal_setOptions","switchToNewThread","_initialThreadLoaded","adapterChanged","controlledThreadIdChanged","setState","setRuntimeHook","Set","Object","values","filter","item","map","clear","_requireAdapterGeneration","_requireAdapterSettled","carried","newThreadId","mappingId","hasOwn","draft","push","stale","has","remoteId","seed","currentMappingId","current","includes","nextState","preservedDraft","seeded","_lastNotifiedThreadId","nextIds","stopThreadRuntime","startThreadRuntime","__internal_load","startThreadId","initialThreadId","switchTask","switchToThread","reloadMainThread","runtimeCore","getThreadRuntimeCore","unstable_refetchThread","__internal_restartThreadRuntime","reload","hasMore","mainThreadId","_mainThreadRemoteId","emit","onThreadIdChange","getMainThreadRuntimeCore","result","data","unstable_isThreadRunning","__internal_isThreadRunning","unstable_subscribeThreadEvents","callback","event","__internal_subscribeThreadEvents","unarchive","_startSwitchToThread","emitThreadIdChange","task","_switchToThread","remoteMetadata","fetch","newThreadData","initializeTask","externalId","title","lastMessageAt","custom","newThreadIdMap","wasInTarget","threadIdsWithoutRemote","archivedThreadIdsWithoutRemote","newThreadIds","newArchivedThreadIds","_startSwitchToNewThread","_switchToNewThread","waitForUpdate","next","initialize","adapterGeneration","removedMappingId","optimistic","reconciliation","survivorMappingId","generateTitle","automatic","messages","states","generate","onTitle","stream","rename","applyTitle","currentData","newTitle","claim","updateCustom","Record","_ensureThreadIsNotMain","lastAwaitedTask","startedFallback","archive","delete","__internal_dispose","detach","boundIdsStore","__internal_RenderComponent","getState","i","boundIds","Provider","aui","enabled","length"],"sources":["../../../src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx"],"sourcesContent":["import type {\n ThreadListRuntimeCore,\n ThreadListRuntimeEvent,\n} from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport {\n BaseSubscribable,\n WritableSubscribable,\n} from \"../../subscribable/subscribable\";\nimport { useSubscribable } from \"../../store/runtime-clients/useSubscribable\";\nimport { handleThreadListAction } from \"../../store/runtime-clients/handle-thread-list-action\";\nimport { nullProtoRecord } from \"../../utils/record\";\nimport { OptimisticState } from \"../../runtimes/remote-thread-list/optimistic-state\";\nimport { EMPTY_THREAD_CORE } from \"../../runtimes/remote-thread-list/empty-thread-core\";\nimport type {\n ClassifyAccumulator,\n RemoteThreadData,\n RemoteThreadState,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport {\n classifyThreads,\n createEmptyRemoteThreadState,\n createThreadMappingId,\n getThreadData,\n normalizeCursor,\n reconcileInitializedThread,\n promoteNewThreadReducer,\n updateStatusReducer,\n preserveMidLoadTransitions,\n seedNewThread,\n statusSnapshot,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport type {\n RemoteThreadListAdapter,\n RemoteThreadListOptions,\n RemoteThreadMetadata,\n} from \"../../runtimes/remote-thread-list/types\";\nimport { ThreadListAdapterChangedError } from \"../../runtimes/remote-thread-list/adapter-changed\";\nimport { RemoteThreadListHookInstanceManager } from \"./RemoteThreadListHookInstanceManager\";\nimport {\n applyTitleStream,\n isTitleSourceMessage,\n} from \"../../runtimes/remote-thread-list/title\";\nimport {\n clearThreadTitleState,\n finishThreadTitleRename,\n runThreadTitleGeneration,\n startThreadTitleRename,\n type ThreadTitleState,\n} from \"../../runtimes/remote-thread-list/title-generation\";\nimport {\n type ComponentType,\n type FC,\n Fragment,\n type PropsWithChildren,\n useEffect,\n useId,\n} from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport { RuntimeAdapterProvider } from \"./RuntimeAdapterProvider\";\nimport { useStableRuntimeAdapters } from \"./useRuntimeAdapters\";\nimport { invokeUserCallback } from \"../../utils/invoke-user-callback\";\n\nconst threadNotFoundError = (threadIdOrRemoteId: string, action: string) =>\n new Error(`Thread \"${threadIdOrRemoteId}\" not found while ${action}.`);\n\nconst threadStatusError = (\n threadIdOrRemoteId: string,\n status: RemoteThreadData[\"status\"],\n action: string,\n) =>\n new Error(\n `Thread \"${threadIdOrRemoteId}\" has status \"${status}\", so it cannot ${action}.`,\n );\n\nconst EMPTY_REMOTE_STATE = createEmptyRemoteThreadState();\n\nexport class RemoteThreadListThreadListRuntimeCore\n extends BaseSubscribable\n implements ThreadListRuntimeCore\n{\n private _options!: RemoteThreadListOptions;\n private readonly _hookManager: RemoteThreadListHookInstanceManager;\n private readonly _runtimeAdapters: { modelContext: ModelContextProvider };\n\n private _loadThreadsPromise: Promise<void> | undefined;\n private _loadMorePromise: Promise<void> | undefined;\n private _loadGeneration = 0;\n private _adapterGeneration = 0;\n private _replaceListOnNextLoad = false;\n private _staleThreadIdsOnReplace: ReadonlySet<string> | undefined;\n private _switchGeneration = 0;\n private _switchTask: Promise<void> | undefined;\n private readonly _titleStates = new Map<string, ThreadTitleState>();\n\n private _mainThreadId!: string;\n private readonly _state = new OptimisticState<RemoteThreadState>(\n EMPTY_REMOTE_STATE,\n );\n\n private readonly _useAdaptersProvider: FC<PropsWithChildren> = ({\n children,\n }) => {\n const useAdapters = this._options.adapter.unstable_useAdapters;\n if (useAdapters === undefined) return children;\n return (\n <this._SynthesizedAdapters useAdapters={useAdapters}>\n {children}\n </this._SynthesizedAdapters>\n );\n };\n\n private readonly _SynthesizedAdapters: FC<\n PropsWithChildren<{\n useAdapters: NonNullable<RemoteThreadListAdapter[\"unstable_useAdapters\"]>;\n }>\n > = ({ useAdapters, children }) => {\n const adapters = useStableRuntimeAdapters(useAdapters());\n if (adapters == null) return children;\n return (\n <RuntimeAdapterProvider adapters={adapters}>\n {children}\n </RuntimeAdapterProvider>\n );\n };\n\n private resolveProvider(\n adapter: RemoteThreadListAdapter,\n ): ComponentType<PropsWithChildren> {\n if (adapter.unstable_Provider !== undefined) {\n return adapter.unstable_Provider as ComponentType<PropsWithChildren>;\n }\n if (adapter.unstable_useAdapters === undefined) return Fragment;\n return this._useAdaptersProvider;\n }\n\n public get threadItems() {\n return this._state.value.threadData;\n }\n\n public getLoadThreadsPromise() {\n // TODO this needs to be cached in case this promise is loaded during suspense\n if (!this._loadThreadsPromise) {\n const generation = this._loadGeneration;\n let replacedList = false;\n const statusAtRequest = statusSnapshot(this._state.baseValue);\n this._loadThreadsPromise = this._state\n .optimisticUpdate({\n execute: () => this._options.adapter.list(),\n loading: (state) => {\n if (generation !== this._loadGeneration) return state;\n return {\n ...state,\n isLoading: true,\n loadError: undefined,\n };\n },\n then: (state, l) => {\n if (generation !== this._loadGeneration) return state;\n const replaceList = this._replaceListOnNextLoad;\n if (replaceList) {\n this._replaceListOnNextLoad = false;\n replacedList = true;\n return this._replaceWithThreads(\n { ...state, loadError: undefined },\n l.threads,\n normalizeCursor(l.nextCursor),\n );\n }\n\n const fresh = classifyThreads(l.threads, {\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n const merged = {\n ...state,\n isLoading: false,\n loadError: undefined,\n cursor: normalizeCursor(l.nextCursor),\n threadIds: fresh.threadIds,\n archivedThreadIds: fresh.archivedThreadIds,\n threadIdMap: fresh.threadIdMap,\n threadData: fresh.threadData,\n };\n return preserveMidLoadTransitions(merged, state, statusAtRequest);\n },\n })\n .catch((error: unknown) => {\n if (generation !== this._loadGeneration) return;\n console.error(\"[assistant-ui] thread list load failed:\", error);\n this._loadThreadsPromise = undefined;\n if (!this._replaceListOnNextLoad) {\n this._state.update({\n ...this._state.baseValue,\n isLoading: false,\n loadError: error,\n });\n return;\n }\n this._replaceListOnNextLoad = false;\n replacedList = true;\n this._state.update(\n this._replaceWithThreads(\n { ...this._state.baseValue, loadError: error },\n [],\n undefined,\n ),\n );\n })\n .then(() => {\n if (!replacedList) return;\n const threadId = this._options.threadId;\n if (threadId === undefined) return;\n if (this.getItemById(threadId)?.id === this._mainThreadId) return;\n this._switchToThreadFromProp(threadId).catch(() => {});\n });\n }\n\n return this._loadThreadsPromise;\n }\n\n public loadMore(): Promise<void> {\n if (this._loadMorePromise) return this._loadMorePromise;\n\n const initialState = this._state.value;\n if (initialState.cursor === undefined || initialState.isLoading) {\n return Promise.resolve();\n }\n\n const generation = this._loadGeneration;\n const adapter = this._options.adapter;\n const cursor = initialState.cursor;\n\n const dedup = this._state\n .optimisticUpdate({\n execute: () => adapter.list({ after: cursor }),\n loading: (state) => {\n if (generation !== this._loadGeneration) return state;\n return { ...state, isLoadingMore: true };\n },\n then: (state, l) => {\n if (generation !== this._loadGeneration) return state;\n if (adapter !== this._options.adapter) return state;\n\n const appended = classifyThreads(l.threads, {\n threadIds: [...state.threadIds],\n archivedThreadIds: [...state.archivedThreadIds],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n\n return {\n ...state,\n isLoadingMore: false,\n cursor: normalizeCursor(l.nextCursor),\n threadIds: appended.threadIds,\n archivedThreadIds: appended.archivedThreadIds,\n threadIdMap: appended.threadIdMap,\n threadData: appended.threadData,\n };\n },\n })\n .catch((error: unknown) => {\n if (generation !== this._loadGeneration) return;\n console.error(\"[assistant-ui] thread list loadMore failed:\", error);\n })\n .then(() => {\n if (this._loadMorePromise === dedup) {\n this._loadMorePromise = undefined;\n }\n });\n\n this._loadMorePromise = dedup;\n return dedup;\n }\n\n constructor(\n options: RemoteThreadListOptions,\n contextProvider: ModelContextProvider,\n ) {\n super();\n\n this._state.subscribe(() => {\n this._notifySubscribers();\n this._notifyThreadIdChange();\n });\n this._runtimeAdapters = { modelContext: contextProvider };\n this._hookManager = new RemoteThreadListHookInstanceManager(\n options.runtimeHook,\n this,\n );\n this._hookManager.__internal_setDefaultAdapters(this._runtimeAdapters);\n this._hookManager.__internal_subscribeRunningChanged(() =>\n this._notifySubscribers(),\n );\n this._hookManager.__internal_subscribeRuntimeReplaced(() => {\n // A republish can land during the thread resource's render, where a\n // synchronous notify would re-enter store consumers mid-render.\n queueMicrotask(() => this._notifySubscribers());\n });\n this.providerStore = new WritableSubscribable(\n this.resolveProvider(options.adapter),\n );\n this.__internal_setOptions(options);\n this.switchToNewThread();\n }\n\n private _initialThreadLoaded = false;\n private providerStore;\n\n public __internal_setOptions(options: RemoteThreadListOptions) {\n if (this._options === options) return;\n\n const adapterChanged =\n this._options !== undefined && this._options.adapter !== options.adapter;\n const controlledThreadIdChanged =\n this._initialThreadLoaded &&\n this._options !== undefined &&\n this._options.threadId !== options.threadId;\n\n this._options = options;\n\n this.providerStore.setState(this.resolveProvider(options.adapter));\n\n this._hookManager.setRuntimeHook(options.runtimeHook);\n\n if (adapterChanged) {\n this._loadGeneration++;\n this._adapterGeneration++;\n this._switchGeneration++;\n this._switchTask = undefined;\n this._loadThreadsPromise = undefined;\n this._loadMorePromise = undefined;\n this._replaceListOnNextLoad = true;\n this._staleThreadIdsOnReplace = new Set(\n Object.values(this._state.baseValue.threadData)\n .filter((item) => item.status !== \"new\")\n .map((item) => item.id),\n );\n this._state.update({\n ...this._state.baseValue,\n cursor: undefined,\n loadError: undefined,\n });\n this._titleStates.clear();\n }\n\n if (controlledThreadIdChanged) {\n this._switchToThreadFromProp(options.threadId).catch(() => {});\n }\n }\n\n private _requireAdapterGeneration(generation: number) {\n if (generation !== this._adapterGeneration) {\n throw new ThreadListAdapterChangedError();\n }\n }\n\n private _requireAdapterSettled() {\n if (this._replaceListOnNextLoad) {\n throw new ThreadListAdapterChangedError();\n }\n }\n\n private _replaceWithThreads(\n state: RemoteThreadState,\n threads: readonly RemoteThreadMetadata[],\n cursor: string | undefined,\n ): RemoteThreadState {\n const carried: RemoteThreadData[] = [];\n if (state.newThreadId) {\n const mappingId = Object.hasOwn(state.threadIdMap, state.newThreadId)\n ? state.threadIdMap[state.newThreadId]\n : undefined;\n const draft =\n mappingId && Object.hasOwn(state.threadData, mappingId)\n ? state.threadData[mappingId]\n : undefined;\n if (draft?.status === \"new\") carried.push(draft);\n }\n\n const stale = this._staleThreadIdsOnReplace;\n if (stale) {\n for (const item of Object.values(state.threadData)) {\n if (stale.has(item.id)) continue;\n if (item.status !== \"new\" && item.remoteId === undefined) continue;\n carried.push(item);\n }\n }\n this._staleThreadIdsOnReplace = undefined;\n\n const seed: ClassifyAccumulator = {\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: nullProtoRecord(),\n threadData: nullProtoRecord(),\n };\n for (const item of carried) {\n const mappingId = createThreadMappingId(item.id);\n if (Object.hasOwn(seed.threadData, mappingId)) continue;\n seed.threadIdMap[item.id] = mappingId;\n if (item.remoteId !== undefined) {\n seed.threadIdMap[item.remoteId] = mappingId;\n }\n seed.threadData[mappingId] = item;\n }\n\n const { threadIds, archivedThreadIds, threadIdMap, threadData } =\n classifyThreads(threads, seed);\n\n for (const item of carried) {\n if (item.remoteId === undefined) continue;\n const currentMappingId = createThreadMappingId(item.id);\n const current = Object.hasOwn(threadData, currentMappingId)\n ? threadData[currentMappingId]\n : undefined;\n if (current === undefined) continue;\n if (current.status === \"regular\" && !threadIds.includes(current.id)) {\n threadIds.push(current.id);\n } else if (\n current.status === \"archived\" &&\n !archivedThreadIds.includes(current.id)\n ) {\n archivedThreadIds.push(current.id);\n }\n }\n\n let nextState: RemoteThreadState = {\n ...state,\n isLoading: false,\n cursor,\n threadIds,\n archivedThreadIds,\n threadIdMap,\n threadData,\n newThreadId:\n state.newThreadId !== undefined &&\n !Object.hasOwn(threadIdMap, state.newThreadId)\n ? undefined\n : state.newThreadId,\n };\n\n if (getThreadData(nextState, this._mainThreadId) === undefined) {\n const preservedDraft = nextState.newThreadId;\n if (preservedDraft !== undefined) {\n this._mainThreadId = preservedDraft;\n } else {\n const seeded = seedNewThread(nextState);\n this._mainThreadId = seeded.id;\n nextState = seeded.state;\n }\n if (this._options.threadId === undefined) {\n this._notifyThreadIdChange();\n } else {\n this._lastNotifiedThreadId = undefined;\n }\n }\n\n const nextIds = new Set(\n Object.values(nextState.threadData).map((item) => item.id),\n );\n for (const item of Object.values(state.threadData)) {\n if (nextIds.has(item.id)) continue;\n try {\n this._hookManager.stopThreadRuntime(item.id);\n } catch (error) {\n console.error(\n \"[assistant-ui] Thread runtime cleanup threw while stopping a thread\",\n error,\n );\n }\n }\n void this._hookManager.startThreadRuntime(this._mainThreadId).then(\n () => this._notifySubscribers(),\n () => undefined,\n );\n\n return nextState;\n }\n\n public __internal_load() {\n this.getLoadThreadsPromise(); // begin loading on initial bind\n if (this._initialThreadLoaded) return;\n this._initialThreadLoaded = true;\n\n const startThreadId =\n this._options.threadId ?? this._options.initialThreadId;\n if (startThreadId !== undefined) {\n const switchTask =\n this._options.threadId !== undefined\n ? this._switchToThreadFromProp(startThreadId)\n : this.switchToThread(startThreadId);\n switchTask.catch(() => {});\n }\n }\n\n public async reloadMainThread(): Promise<void> {\n const threadId = this._mainThreadId;\n if (threadId === undefined) return;\n\n // An unsent thread holds no remote state, so a refetch would only discard\n // what the user has typed.\n if (this.getItemById(threadId)?.status === \"new\") return;\n\n const runtimeCore = this._hookManager.getThreadRuntimeCore(threadId);\n\n try {\n if (runtimeCore?.unstable_refetchThread) {\n // Called on the core so class-method implementations keep `this`.\n await runtimeCore.unstable_refetchThread();\n } else {\n await this._hookManager.__internal_restartThreadRuntime(threadId);\n }\n } catch (error) {\n // delete and detach switch the main thread away before stopping the\n // runtime, so a rejection once that has happened belongs to them.\n if (threadId !== this._mainThreadId) return;\n throw error;\n }\n\n if (threadId !== this._mainThreadId) return;\n this._notifySubscribers();\n }\n\n public reload() {\n this._loadGeneration++;\n this._loadThreadsPromise = undefined;\n this._loadMorePromise = undefined;\n this._state.update({\n ...this._state.baseValue,\n cursor: undefined,\n });\n return this.getLoadThreadsPromise();\n }\n\n public get isLoading() {\n return this._state.value.isLoading;\n }\n\n public get loadError() {\n return this._state.value.loadError;\n }\n\n public get isLoadingMore() {\n return this._state.value.isLoadingMore;\n }\n\n public get hasMore() {\n return this._state.value.cursor !== undefined;\n }\n\n public get threadIds() {\n return this._state.value.threadIds;\n }\n\n public get archivedThreadIds() {\n return this._state.value.archivedThreadIds;\n }\n\n public get newThreadId() {\n return this._state.value.newThreadId;\n }\n\n public get mainThreadId(): string {\n return this._mainThreadId;\n }\n\n // The settled remote ID of the active thread, or undefined while it is still\n // a new/optimistic thread. This is the value surfaced to `onThreadIdChange`.\n private get _mainThreadRemoteId(): string | undefined {\n if (this._mainThreadId === undefined) return undefined;\n return getThreadData(this._state.value, this._mainThreadId)?.remoteId;\n }\n\n private _lastNotifiedThreadId: string | undefined = undefined;\n\n private _notifyThreadIdChange(emit = true) {\n const threadId = this._mainThreadRemoteId;\n if (this._lastNotifiedThreadId === threadId) return;\n this._lastNotifiedThreadId = threadId;\n if (emit) {\n invokeUserCallback(\n \"assistant-ui\",\n \"onThreadIdChange\",\n this._options.onThreadIdChange,\n threadId,\n );\n }\n }\n\n public getMainThreadRuntimeCore() {\n const result = this._hookManager.getThreadRuntimeCore(this._mainThreadId);\n if (!result) return EMPTY_THREAD_CORE;\n return result;\n }\n\n public getThreadRuntimeCore(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data)\n throw threadNotFoundError(threadIdOrRemoteId, \"getting its runtime\");\n\n const result = this._hookManager.getThreadRuntimeCore(data.id);\n if (!result)\n throw new Error(\n `Runtime for thread \"${threadIdOrRemoteId}\" not found while getting its runtime.`,\n );\n return result;\n }\n\n public unstable_isThreadRunning(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) return false;\n return this._hookManager.__internal_isThreadRunning(data.id);\n }\n\n public unstable_subscribeThreadEvents(\n callback: (event: ThreadListRuntimeEvent) => void,\n ) {\n return this._hookManager.__internal_subscribeThreadEvents(callback);\n }\n\n public getItemById(threadIdOrRemoteId: string) {\n return getThreadData(this._state.value, threadIdOrRemoteId);\n }\n\n public switchToThread(\n threadIdOrRemoteId: string,\n options?: { unarchive?: boolean },\n ): Promise<void> {\n return this._startSwitchToThread(threadIdOrRemoteId, options, true);\n }\n\n private _startSwitchToThread(\n threadIdOrRemoteId: string,\n options: { unarchive?: boolean } | undefined,\n emitThreadIdChange: boolean,\n ): Promise<void> {\n const generation = ++this._switchGeneration;\n const task = this._switchToThread(\n threadIdOrRemoteId,\n options,\n generation,\n emitThreadIdChange,\n );\n this._switchTask = task;\n return task;\n }\n\n private async _switchToThread(\n threadIdOrRemoteId: string,\n options: { unarchive?: boolean } | undefined,\n generation: number,\n emitThreadIdChange: boolean,\n ): Promise<void> {\n if (\n this._replaceListOnNextLoad &&\n threadIdOrRemoteId !== this._state.value.newThreadId\n ) {\n throw new ThreadListAdapterChangedError();\n }\n let data = this.getItemById(threadIdOrRemoteId);\n\n if (!data) {\n const remoteMetadata =\n await this._options.adapter.fetch(threadIdOrRemoteId);\n if (generation !== this._switchGeneration) return;\n\n const state = this._state.value;\n const mappingId = createThreadMappingId(remoteMetadata.remoteId);\n\n const newThreadData = {\n ...state.threadData,\n [mappingId]: {\n id: mappingId,\n initializeTask: Promise.resolve({\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n }),\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n status: remoteMetadata.status,\n title: remoteMetadata.title,\n lastMessageAt: remoteMetadata.lastMessageAt,\n custom: remoteMetadata.custom,\n } as RemoteThreadData,\n };\n\n const newThreadIdMap = {\n ...state.threadIdMap,\n [remoteMetadata.remoteId]: mappingId,\n };\n\n // A concurrent `list()` may already have placed this thread; keep that\n // position and only merge metadata. A genuinely absent thread stays\n // appended: it may live on an unloaded page, and a prepend would pin it\n // above newer threads permanently. Filtering both arrays first still\n // prevents duplication or a wrong-status entry from `list()`.\n const remoteId = remoteMetadata.remoteId;\n const wasInTarget =\n remoteMetadata.status === \"regular\"\n ? state.threadIds.includes(remoteId)\n : state.archivedThreadIds.includes(remoteId);\n\n const threadIdsWithoutRemote = state.threadIds.filter(\n (id) => id !== remoteId,\n );\n const archivedThreadIdsWithoutRemote = state.archivedThreadIds.filter(\n (id) => id !== remoteId,\n );\n\n const newThreadIds =\n remoteMetadata.status === \"regular\"\n ? wasInTarget\n ? state.threadIds\n : [...threadIdsWithoutRemote, remoteId]\n : threadIdsWithoutRemote;\n const newArchivedThreadIds =\n remoteMetadata.status === \"archived\"\n ? wasInTarget\n ? state.archivedThreadIds\n : [...archivedThreadIdsWithoutRemote, remoteId]\n : archivedThreadIdsWithoutRemote;\n\n this._state.update({\n ...state,\n threadIds: newThreadIds,\n archivedThreadIds: newArchivedThreadIds,\n threadIdMap: newThreadIdMap,\n threadData: newThreadData,\n });\n\n data = this.getItemById(threadIdOrRemoteId);\n }\n\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"switching to it\");\n if (this._mainThreadId === data.id) return;\n\n const task = this._hookManager.startThreadRuntime(data.id);\n if (this.mainThreadId !== undefined) {\n await task;\n } else {\n void task.then(\n () => this._notifySubscribers(),\n () => undefined,\n );\n }\n\n if (generation !== this._switchGeneration) return;\n\n let current = this.getItemById(data.id);\n if (current?.id !== data.id) return;\n\n if (current.status === \"archived\" && options?.unarchive !== false) {\n await current.initializeTask;\n if (generation !== this._switchGeneration) return;\n current = this.getItemById(data.id);\n if (current?.id !== data.id) return;\n if (current.status === \"archived\") {\n await this.unarchive(current.id);\n if (generation !== this._switchGeneration) return;\n current = this.getItemById(data.id);\n if (current?.id !== data.id) return;\n }\n }\n this._mainThreadId = current.id;\n\n this._notifySubscribers();\n this._notifyThreadIdChange(emitThreadIdChange);\n }\n\n public switchToNewThread(): Promise<void> {\n return this._startSwitchToNewThread(true);\n }\n\n private _switchToThreadFromProp(threadId: string | undefined): Promise<void> {\n return threadId !== undefined\n ? handleThreadListAction(\"switch\", () =>\n this._startSwitchToThread(threadId, undefined, false),\n )\n : handleThreadListAction(\"create\", () =>\n this._startSwitchToNewThread(false),\n );\n }\n\n private _startSwitchToNewThread(emitThreadIdChange: boolean): Promise<void> {\n const generation = ++this._switchGeneration;\n const task = this._switchToNewThread(generation, emitThreadIdChange);\n this._switchTask = task;\n return task;\n }\n\n private async _switchToNewThread(\n generation: number,\n emitThreadIdChange: boolean,\n ): Promise<void> {\n // an initialization transaction is in progress, wait for it to settle\n while (\n this._state.baseValue.newThreadId !== undefined &&\n this._state.value.newThreadId === undefined\n ) {\n await this._state.waitForUpdate();\n if (generation !== this._switchGeneration) return;\n }\n\n const state = this._state.baseValue;\n let id: string | undefined = this._state.value.newThreadId;\n if (id === undefined) {\n const next = seedNewThread(state);\n id = next.id;\n this._state.update(next.state);\n }\n\n return this._switchToThread(id, undefined, generation, emitThreadIdChange);\n }\n\n public initialize = async (threadId: string) => {\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n if (this._state.value.newThreadId !== threadId) {\n this._requireAdapterSettled();\n const data = this.getItemById(threadId);\n if (!data) throw threadNotFoundError(threadId, \"initializing it\");\n if (data.status === \"new\")\n throw threadStatusError(threadId, data.status, \"be initialized here\");\n const { remoteId, externalId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return { remoteId, externalId };\n }\n\n this._requireAdapterGeneration(adapterGeneration);\n const initializeTask = adapter.initialize(threadId);\n let removedMappingId: string | undefined;\n const { remoteId, externalId } = await this._state.optimisticUpdate({\n execute: () => initializeTask,\n optimistic: (state) =>\n promoteNewThreadReducer(state, threadId, initializeTask),\n then: (state, { remoteId, externalId }) => {\n if (adapterGeneration !== this._adapterGeneration) return state;\n const reconciliation = reconcileInitializedThread(\n state,\n threadId,\n remoteId,\n externalId,\n threadId,\n );\n removedMappingId = reconciliation.removedMappingId;\n if (removedMappingId === this._mainThreadId) {\n this._mainThreadId = reconciliation.survivorMappingId;\n }\n return reconciliation.state;\n },\n });\n this._requireAdapterGeneration(adapterGeneration);\n if (removedMappingId !== undefined) {\n this._hookManager.stopThreadRuntime(removedMappingId);\n }\n return { remoteId, externalId };\n };\n\n public generateTitle = async (\n threadId: string,\n options?: { automatic?: boolean },\n ) => {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadId);\n if (!data) throw threadNotFoundError(threadId, \"generating its title\");\n if (data.status === \"new\")\n throw threadStatusError(threadId, data.status, \"generate a title\");\n\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n\n const runtimeCore = this._hookManager.getThreadRuntimeCore(data.id);\n if (!runtimeCore) return; // thread is no longer running\n\n // Incomplete assistant turns (running status, possibly empty content)\n // would make the payload race-dependent; the title reads settled\n // messages only, matching the trigger's readiness gate.\n const messages = runtimeCore.messages.filter(isTitleSourceMessage);\n await runThreadTitleGeneration({\n states: this._titleStates,\n threadId: data.id,\n automatic: options?.automatic === true,\n generate: async (onTitle) => {\n const stream = await adapter.generateTitle(remoteId, messages);\n this._requireAdapterGeneration(adapterGeneration);\n await applyTitleStream(stream, onTitle);\n },\n rename: async (title) => {\n this._requireAdapterGeneration(adapterGeneration);\n await adapter.rename(remoteId, title);\n },\n applyTitle: async (title) => {\n await this._state.optimisticUpdate({\n execute: async () => {},\n optimistic: (state) => {\n if (adapterGeneration !== this._adapterGeneration) return state;\n const currentData = getThreadData(state, data.id);\n if (!currentData) return state;\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [currentData.id]: {\n ...currentData,\n title,\n },\n },\n };\n },\n });\n },\n });\n };\n\n public async rename(\n threadIdOrRemoteId: string,\n newTitle: string,\n ): Promise<void> {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"renaming it\");\n if (data.status === \"new\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be renamed\");\n\n const claim = startThreadTitleRename(this._titleStates, data.id, newTitle);\n try {\n const result = await this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return adapter.rename(remoteId, newTitle);\n },\n optimistic: (state) => {\n const currentData = getThreadData(state, threadIdOrRemoteId);\n if (!currentData) return state;\n\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [currentData.id]: {\n ...currentData,\n title: newTitle,\n },\n },\n };\n },\n });\n finishThreadTitleRename(this._titleStates, data.id, claim, true);\n return result;\n } catch (error) {\n finishThreadTitleRename(this._titleStates, data.id, claim, false);\n throw error;\n }\n }\n\n public async updateCustom(\n threadIdOrRemoteId: string,\n custom: Record<string, unknown> | undefined,\n ): Promise<void> {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data)\n throw threadNotFoundError(\n threadIdOrRemoteId,\n \"updating its custom metadata\",\n );\n if (data.status === \"new\")\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"update custom metadata\",\n );\n\n if (!adapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n if (!adapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n return adapter.updateCustom(remoteId, custom);\n },\n optimistic: (state) => {\n const data = getThreadData(state, threadIdOrRemoteId);\n if (!data) return state;\n\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [data.id]: {\n ...data,\n custom,\n },\n },\n };\n },\n });\n }\n\n private async _ensureThreadIsNotMain(threadId: string) {\n if (threadId === this.newThreadId)\n throw new Error(\"Cannot ensure new thread is not main\");\n\n let lastAwaitedTask: Promise<void> | undefined;\n\n while (threadId === this._mainThreadId) {\n // Rechecked each pass: the draft can become the new thread again\n // mid-loop when its failed first save rolls it back, and switching to a\n // new thread then re-adopts it, so no switch can move main off it.\n if (threadId === this.newThreadId)\n throw new Error(\"Cannot ensure new thread is not main\");\n let switchTask = this._switchTask;\n const startedFallback = !switchTask || switchTask === lastAwaitedTask;\n if (startedFallback) switchTask = this.switchToNewThread();\n lastAwaitedTask = switchTask;\n\n try {\n await switchTask;\n } catch (error) {\n if (startedFallback && this._switchTask === switchTask) {\n throw error;\n }\n }\n }\n }\n\n public async archive(threadIdOrRemoteId: string) {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"archiving it\");\n if (data.status !== \"regular\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be archived\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._requireAdapterGeneration(adapterGeneration);\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return adapter.archive(remoteId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"archived\");\n },\n });\n }\n\n public async unarchive(threadIdOrRemoteId: string): Promise<void> {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"unarchiving it\");\n if (data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be unarchived\");\n\n return this._state.optimisticUpdate({\n execute: async () => {\n try {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return await adapter.unarchive(remoteId);\n } catch (error) {\n if (adapterGeneration === this._adapterGeneration) {\n await this._ensureThreadIsNotMain(data.id);\n }\n throw error;\n }\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"regular\");\n },\n });\n }\n\n public async delete(threadIdOrRemoteId: string) {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"deleting it\");\n if (data.status !== \"regular\" && data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be deleted\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._requireAdapterGeneration(adapterGeneration);\n const result = await this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return await adapter.delete(remoteId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"deleted\");\n },\n });\n // The optimistic layer survives an adapter swap, so a resolved deletion has\n // dropped the slot from `threadData`, where `_replaceWithThreads` would\n // otherwise have found it to stop.\n this._hookManager.stopThreadRuntime(data.id);\n clearThreadTitleState(this._titleStates, data.id);\n return result;\n }\n\n public __internal_dispose() {\n this._hookManager.__internal_dispose();\n }\n\n public async detach(threadIdOrRemoteId: string): Promise<void> {\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"detaching it\");\n if (data.status !== \"regular\" && data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be detached\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._requireAdapterGeneration(adapterGeneration);\n this._hookManager.stopThreadRuntime(data.id);\n }\n\n private boundIdsStore = new WritableSubscribable<readonly string[]>([]);\n\n public __internal_RenderComponent: FC = () => {\n const id = useId();\n useEffect(() => {\n this.boundIdsStore.setState([...this.boundIdsStore.getState(), id]);\n return () => {\n this.boundIdsStore.setState(\n this.boundIdsStore.getState().filter((i) => i !== id),\n );\n };\n }, [id]);\n\n const boundIds = useSubscribable(this.boundIdsStore);\n const Provider = useSubscribable(this.providerStore);\n const aui = useAui();\n const enabled = boundIds.length === 0 || boundIds[0] === id;\n\n return (\n enabled && (\n <RuntimeAdapterProvider adapters={this._runtimeAdapters}>\n <this._hookManager.__internal_RenderThreadRuntimes\n provider={Provider}\n />\n <this._hookManager.__internal_Host parentClient={aui} />\n </RuntimeAdapterProvider>\n )\n );\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,26 +1,20 @@
|
|
|
1
|
-
import { Unsubscribe } from "../../types/unsubscribe.js";
|
|
2
|
-
import { ThreadRuntimeCore } from "../../runtime/interfaces/thread-runtime-core.js";
|
|
3
|
-
import { ThreadListRuntimeCore } from "../../runtime/interfaces/thread-list-runtime-core.js";
|
|
4
|
-
import { ThreadListItemRuntime } from "../../runtime/api/thread-list-item-runtime.js";
|
|
5
|
-
import { RuntimeAdapters } from "../../runtimes/remote-thread-list/types.js";
|
|
6
|
-
import { AssistantRuntime } from "../../runtime/api/assistant-runtime.js";
|
|
7
|
-
import "../../index.js";
|
|
8
|
-
import "./RuntimeAdapterProvider.js";
|
|
9
1
|
import { useConfiguredAui } from "@assistant-ui/store/client";
|
|
10
|
-
|
|
11
|
-
type
|
|
12
|
-
type
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
2
|
+
import type { AssistantRuntime } from "../../runtime/api/assistant-runtime.js";
|
|
3
|
+
import type { ThreadListRuntimeCore } from "../../runtime/interfaces/thread-list-runtime-core.js";
|
|
4
|
+
import type { ThreadRuntimeCore } from "../../runtime/interfaces/thread-runtime-core.js";
|
|
5
|
+
import { type ThreadListItemRuntime } from "../../runtime/api/thread-list-item-runtime.js";
|
|
6
|
+
import { type RuntimeAdapters } from "./RuntimeAdapterProvider.js";
|
|
7
|
+
export type RemoteThreadListHook = () => AssistantRuntime;
|
|
8
|
+
export type RemoteThreadResourceProps = {
|
|
9
|
+
threadId: string;
|
|
10
|
+
generation: number;
|
|
11
|
+
parentList: ThreadListRuntimeCore;
|
|
12
|
+
runtimeHook: RemoteThreadListHook;
|
|
13
|
+
parentClient: Parameters<typeof useConfiguredAui>[0];
|
|
14
|
+
adapters: RuntimeAdapters | null;
|
|
15
|
+
publish: (threadId: string, runtime: ThreadRuntimeCore, generation: number) => void;
|
|
16
|
+
destroySignal: AbortSignal;
|
|
21
17
|
};
|
|
22
|
-
declare const subscribeToTitleGeneration: (threadRuntime: AssistantRuntime["thread"], itemRuntime: ThreadListItemRuntime) => Unsubscribe;
|
|
23
|
-
declare const RemoteThreadResource: import("@assistant-ui/tap").Resource<AssistantRuntime, [RemoteThreadResourceProps]>;
|
|
24
|
-
//#endregion
|
|
25
|
-
export { RemoteThreadListHook, RemoteThreadResource, RemoteThreadResourceProps, subscribeToTitleGeneration };
|
|
18
|
+
export declare const subscribeToTitleGeneration: (threadRuntime: AssistantRuntime["thread"], itemRuntime: ThreadListItemRuntime) => import("../../index.js").Unsubscribe;
|
|
19
|
+
export declare const RemoteThreadResource: import("@assistant-ui/tap").Resource<AssistantRuntime, [RemoteThreadResourceProps]>;
|
|
26
20
|
//# sourceMappingURL=RemoteThreadResource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteThreadResource.d.ts","
|
|
1
|
+
{"version":3,"file":"RemoteThreadResource.d.ts","sourceRoot":"","sources":["../../../src/react/runtimes/RemoteThreadResource.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,gBAAgB,EAEjB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,+CAA4C;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,6DAA0D;AAC/F,OAAO,KAAK,EAAE,iBAAiB,EAAE,wDAAqD;AAEtF,OAAO,EAEL,KAAK,qBAAqB,EAC3B,sDAAmD;AAKpD,OAAO,EAEL,KAAK,eAAe,EACrB,oCAAiC;AAIlC,MAAM,MAAM,oBAAoB,GAAG,MAAM,gBAAgB,CAAC;AAE1D,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,qBAAqB,CAAC;IAClC,WAAW,EAAE,oBAAoB,CAAC;IAClC,YAAY,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,CACP,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,MAAM,KACf,IAAI,CAAC;IACV,aAAa,EAAE,WAAW,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,eAAe,gBAAgB,CAAC,QAAQ,CAAC,EACzC,aAAa,qBAAqB,yCAwBnC,CAAC;AAyKF,eAAO,MAAM,oBAAoB,qFAAoC,CAAC"}
|
|
@@ -47,12 +47,14 @@ const useRemoteThreadBinder = ({ threadId, generation, runtimeHook, publish, ite
|
|
|
47
47
|
}, [threadBinding, updateRuntime]);
|
|
48
48
|
const initPromiseRef = useRef(void 0);
|
|
49
49
|
const hasInitializedRef = useRef(false);
|
|
50
|
+
const bornNewRef = useRef(itemRuntime.getState().status === "new");
|
|
50
51
|
const titleDisposeRef = useRef(void 0);
|
|
51
52
|
const titleAliveRef = useRef(false);
|
|
52
53
|
const handleInitialize = useEffectEvent(() => {
|
|
53
54
|
if (hasInitializedRef.current) return;
|
|
54
|
-
if (itemRuntime.getState().status !== "new") return;
|
|
55
|
+
if (itemRuntime.getState().status !== "new" && !bornNewRef.current) return;
|
|
55
56
|
hasInitializedRef.current = true;
|
|
57
|
+
bornNewRef.current = false;
|
|
56
58
|
const initPromise = itemRuntime.initialize();
|
|
57
59
|
initPromiseRef.current = initPromise;
|
|
58
60
|
initPromise.then(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteThreadResource.js","names":["useCallback","useEffect","useEffectEvent","useMemo","useRef","resource","useAssistantContextProvider","useConfiguredAui","useDestroySignalProvider","ThreadListItemClient","AssistantRuntime","ThreadListRuntimeCore","ThreadRuntimeCore","ThreadRuntimeImpl","ThreadListItemRuntimeImpl","ThreadListItemRuntime","SKIP_UPDATE","ShallowMemoizeSubject","useRuntimeAdaptersProvider","RuntimeAdapters","isSilentRuntimeAction","isTitleSourceMessage","RemoteThreadListHook","RemoteThreadResourceProps","threadId","generation","parentList","runtimeHook","parentClient","Parameters","adapters","publish","runtime","destroySignal","AbortSignal","subscribeToTitleGeneration","threadRuntime","itemRuntime","generate","generateTitle","automatic","catch","error","console","hasTitleSource","getState","messages","some","unsubscribe","subscribe","useRemoteThreadBinder","threadBinding","thread","__internal_threadBinding","updateRuntime","isMounted","current","undefined","outerSubscribe","initPromiseRef","Promise","hasInitializedRef","titleDisposeRef","titleAliveRef","handleInitialize","state","status","initPromise","initialize","then","getInitializePromise","runtimeCore","setGetInitializePromise","Record","__internal_setGetInitializePromise","call","threads","main","unstable_on","useRemoteThreadResource","path","ref","threadSelector","type","data","getItemById","id","remoteId","externalId","title","lastMessageAt","custom","isMain","mainThreadId","isRunning","unstable_isThreadRunning","callback","client","threadListItem","useOwnedThread","useThreadClient","useBoundRuntime","RemoteThreadResource"],"sources":["../../../src/react/runtimes/RemoteThreadResource.ts"],"sourcesContent":["import { useCallback, useEffect, useEffectEvent, useMemo, useRef } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport {\n useAssistantContextProvider,\n useConfiguredAui,\n useDestroySignalProvider,\n} from \"@assistant-ui/store/client\";\nimport { ThreadListItemClient } from \"../../store/internal\";\nimport type { AssistantRuntime } from \"../../runtime/api/assistant-runtime\";\nimport type { ThreadListRuntimeCore } from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport type { ThreadRuntimeCore } from \"../../runtime/interfaces/thread-runtime-core\";\nimport type { ThreadRuntimeImpl } from \"../../runtime/api/thread-runtime\";\nimport {\n ThreadListItemRuntimeImpl,\n type ThreadListItemRuntime,\n} from \"../../runtime/api/thread-list-item-runtime\";\nimport {\n SKIP_UPDATE,\n ShallowMemoizeSubject,\n} from \"../../subscribable/subscribable\";\nimport {\n useRuntimeAdaptersProvider,\n type RuntimeAdapters,\n} from \"./RuntimeAdapterProvider\";\nimport { isSilentRuntimeAction } from \"../../utils/silent-runtime-action\";\nimport { isTitleSourceMessage } from \"../../runtimes/remote-thread-list/title\";\n\nexport type RemoteThreadListHook = () => AssistantRuntime;\n\nexport type RemoteThreadResourceProps = {\n threadId: string;\n generation: number;\n parentList: ThreadListRuntimeCore;\n runtimeHook: RemoteThreadListHook;\n parentClient: Parameters<typeof useConfiguredAui>[0];\n adapters: RuntimeAdapters | null;\n publish: (\n threadId: string,\n runtime: ThreadRuntimeCore,\n generation: number,\n ) => void;\n destroySignal: AbortSignal;\n};\n\nexport const subscribeToTitleGeneration = (\n threadRuntime: AssistantRuntime[\"thread\"],\n itemRuntime: ThreadListItemRuntime,\n) => {\n const generate = () =>\n void itemRuntime\n .generateTitle({ automatic: true })\n .catch((error: unknown) => {\n if (isSilentRuntimeAction(error)) return;\n console.error(\"[assistant-ui] Thread title generation failed\", error);\n });\n\n const hasTitleSource = () =>\n threadRuntime.getState().messages.some(isTitleSourceMessage);\n\n if (hasTitleSource()) {\n generate();\n return () => {};\n }\n\n const unsubscribe = threadRuntime.subscribe(() => {\n if (!hasTitleSource()) return;\n unsubscribe();\n generate();\n });\n return unsubscribe;\n};\n\nconst useRemoteThreadBinder = ({\n threadId,\n generation,\n runtimeHook,\n publish,\n itemRuntime,\n}: {\n threadId: string;\n generation: number;\n runtimeHook: RemoteThreadListHook;\n publish: RemoteThreadResourceProps[\"publish\"];\n itemRuntime: ThreadListItemRuntime;\n}) => {\n const runtime = runtimeHook();\n const threadBinding = (runtime?.thread as ThreadRuntimeImpl | undefined)\n ?.__internal_threadBinding;\n\n const updateRuntime = useCallback(() => {\n if (!threadBinding) return;\n publish(threadId, threadBinding.getState(), generation);\n }, [threadId, generation, threadBinding, publish]);\n\n const isMounted = useRef(false);\n if (!isMounted.current) {\n updateRuntime();\n }\n\n useEffect(() => {\n if (!threadBinding) return undefined;\n isMounted.current = true;\n updateRuntime();\n return threadBinding.outerSubscribe(updateRuntime);\n }, [threadBinding, updateRuntime]);\n\n const initPromiseRef = useRef<Promise<unknown> | undefined>(undefined);\n const hasInitializedRef = useRef(false);\n const titleDisposeRef = useRef<(() => void) | undefined>(undefined);\n const titleAliveRef = useRef(false);\n\n const handleInitialize = useEffectEvent(() => {\n if (hasInitializedRef.current) return;\n\n const state = itemRuntime.getState();\n if (state.status !== \"new\") return;\n hasInitializedRef.current = true;\n\n const initPromise = itemRuntime.initialize();\n initPromiseRef.current = initPromise;\n\n // The title needs the thread to exist and its first message, so it arms\n // when initialization resolves rather than at the first runEnd; waiting\n // for the run would leave the thread on \"New Chat\" for the whole\n // response, and forever when the run never completes.\n void initPromise.then(\n () => {\n if (!titleAliveRef.current) return;\n titleDisposeRef.current?.();\n titleDisposeRef.current = subscribeToTitleGeneration(\n runtime.thread,\n itemRuntime,\n );\n },\n () => {\n if (initPromiseRef.current === initPromise) {\n initPromiseRef.current = undefined;\n hasInitializedRef.current = false;\n }\n },\n );\n });\n\n const getInitializePromise = useEffectEvent(() => {\n handleInitialize();\n return initPromiseRef.current;\n });\n\n useEffect(() => {\n if (!threadBinding) return;\n const runtimeCore = threadBinding.getState();\n const setGetInitializePromise = (runtimeCore as Record<string, unknown>)\n .__internal_setGetInitializePromise;\n if (typeof setGetInitializePromise === \"function\") {\n setGetInitializePromise.call(runtimeCore, getInitializePromise);\n }\n }, [threadBinding]);\n useEffect(() => {\n if (!runtime?.threads?.main) return undefined;\n hasInitializedRef.current = false;\n titleAliveRef.current = true;\n const unsubscribe = runtime.threads.main.unstable_on(\n \"initialize\",\n handleInitialize,\n );\n return () => {\n titleAliveRef.current = false;\n unsubscribe();\n titleDisposeRef.current?.();\n titleDisposeRef.current = undefined;\n };\n }, [runtime]);\n\n return runtime;\n};\n\nconst useRemoteThreadResource = ({\n threadId,\n generation,\n parentList,\n runtimeHook,\n parentClient,\n adapters,\n publish,\n destroySignal,\n}: RemoteThreadResourceProps) => {\n const itemRuntime = useMemo(\n () =>\n new ThreadListItemRuntimeImpl(\n new ShallowMemoizeSubject({\n path: {\n ref: `threadItems[threadId=${threadId}]`,\n threadSelector: { type: \"threadId\", threadId },\n },\n getState: () => {\n const data = parentList.getItemById(threadId);\n if (!data) return SKIP_UPDATE;\n return {\n id: data.id,\n remoteId: data.remoteId,\n externalId: data.externalId,\n title: data.title,\n lastMessageAt: data.lastMessageAt,\n custom: data.custom,\n status: data.status,\n isMain: data.id === parentList.mainThreadId,\n isRunning:\n parentList.unstable_isThreadRunning?.(data.id) ?? false,\n };\n },\n subscribe: (callback) => parentList.subscribe(callback),\n }),\n parentList,\n ),\n [parentList, threadId],\n );\n\n const { client } = useConfiguredAui(parentClient, {\n threadListItem: ThreadListItemClient({ runtime: itemRuntime }),\n });\n\n return useDestroySignalProvider(destroySignal, function useOwnedThread() {\n return useAssistantContextProvider(client, function useThreadClient() {\n return useRuntimeAdaptersProvider(adapters, function useBoundRuntime() {\n return useRemoteThreadBinder({\n threadId,\n generation,\n runtimeHook,\n publish,\n itemRuntime,\n });\n });\n });\n });\n};\n\nexport const RemoteThreadResource = resource(useRemoteThreadResource);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RemoteThreadResource.js","names":["useCallback","useEffect","useEffectEvent","useMemo","useRef","resource","useAssistantContextProvider","useConfiguredAui","useDestroySignalProvider","ThreadListItemClient","AssistantRuntime","ThreadListRuntimeCore","ThreadRuntimeCore","ThreadRuntimeImpl","ThreadListItemRuntimeImpl","ThreadListItemRuntime","SKIP_UPDATE","ShallowMemoizeSubject","useRuntimeAdaptersProvider","RuntimeAdapters","isSilentRuntimeAction","isTitleSourceMessage","RemoteThreadListHook","RemoteThreadResourceProps","threadId","generation","parentList","runtimeHook","parentClient","Parameters","adapters","publish","runtime","destroySignal","AbortSignal","subscribeToTitleGeneration","threadRuntime","itemRuntime","generate","generateTitle","automatic","catch","error","console","hasTitleSource","getState","messages","some","unsubscribe","subscribe","useRemoteThreadBinder","threadBinding","thread","__internal_threadBinding","updateRuntime","isMounted","current","undefined","outerSubscribe","initPromiseRef","Promise","hasInitializedRef","bornNewRef","status","titleDisposeRef","titleAliveRef","handleInitialize","initPromise","initialize","then","getInitializePromise","runtimeCore","setGetInitializePromise","Record","__internal_setGetInitializePromise","call","threads","main","unstable_on","useRemoteThreadResource","path","ref","threadSelector","type","data","getItemById","id","remoteId","externalId","title","lastMessageAt","custom","isMain","mainThreadId","isRunning","unstable_isThreadRunning","callback","client","threadListItem","useOwnedThread","useThreadClient","useBoundRuntime","RemoteThreadResource"],"sources":["../../../src/react/runtimes/RemoteThreadResource.ts"],"sourcesContent":["import { useCallback, useEffect, useEffectEvent, useMemo, useRef } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport {\n useAssistantContextProvider,\n useConfiguredAui,\n useDestroySignalProvider,\n} from \"@assistant-ui/store/client\";\nimport { ThreadListItemClient } from \"../../store/internal\";\nimport type { AssistantRuntime } from \"../../runtime/api/assistant-runtime\";\nimport type { ThreadListRuntimeCore } from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport type { ThreadRuntimeCore } from \"../../runtime/interfaces/thread-runtime-core\";\nimport type { ThreadRuntimeImpl } from \"../../runtime/api/thread-runtime\";\nimport {\n ThreadListItemRuntimeImpl,\n type ThreadListItemRuntime,\n} from \"../../runtime/api/thread-list-item-runtime\";\nimport {\n SKIP_UPDATE,\n ShallowMemoizeSubject,\n} from \"../../subscribable/subscribable\";\nimport {\n useRuntimeAdaptersProvider,\n type RuntimeAdapters,\n} from \"./RuntimeAdapterProvider\";\nimport { isSilentRuntimeAction } from \"../../utils/silent-runtime-action\";\nimport { isTitleSourceMessage } from \"../../runtimes/remote-thread-list/title\";\n\nexport type RemoteThreadListHook = () => AssistantRuntime;\n\nexport type RemoteThreadResourceProps = {\n threadId: string;\n generation: number;\n parentList: ThreadListRuntimeCore;\n runtimeHook: RemoteThreadListHook;\n parentClient: Parameters<typeof useConfiguredAui>[0];\n adapters: RuntimeAdapters | null;\n publish: (\n threadId: string,\n runtime: ThreadRuntimeCore,\n generation: number,\n ) => void;\n destroySignal: AbortSignal;\n};\n\nexport const subscribeToTitleGeneration = (\n threadRuntime: AssistantRuntime[\"thread\"],\n itemRuntime: ThreadListItemRuntime,\n) => {\n const generate = () =>\n void itemRuntime\n .generateTitle({ automatic: true })\n .catch((error: unknown) => {\n if (isSilentRuntimeAction(error)) return;\n console.error(\"[assistant-ui] Thread title generation failed\", error);\n });\n\n const hasTitleSource = () =>\n threadRuntime.getState().messages.some(isTitleSourceMessage);\n\n if (hasTitleSource()) {\n generate();\n return () => {};\n }\n\n const unsubscribe = threadRuntime.subscribe(() => {\n if (!hasTitleSource()) return;\n unsubscribe();\n generate();\n });\n return unsubscribe;\n};\n\nconst useRemoteThreadBinder = ({\n threadId,\n generation,\n runtimeHook,\n publish,\n itemRuntime,\n}: {\n threadId: string;\n generation: number;\n runtimeHook: RemoteThreadListHook;\n publish: RemoteThreadResourceProps[\"publish\"];\n itemRuntime: ThreadListItemRuntime;\n}) => {\n const runtime = runtimeHook();\n const threadBinding = (runtime?.thread as ThreadRuntimeImpl | undefined)\n ?.__internal_threadBinding;\n\n const updateRuntime = useCallback(() => {\n if (!threadBinding) return;\n publish(threadId, threadBinding.getState(), generation);\n }, [threadId, generation, threadBinding, publish]);\n\n const isMounted = useRef(false);\n if (!isMounted.current) {\n updateRuntime();\n }\n\n useEffect(() => {\n if (!threadBinding) return undefined;\n isMounted.current = true;\n updateRuntime();\n return threadBinding.outerSubscribe(updateRuntime);\n }, [threadBinding, updateRuntime]);\n\n const initPromiseRef = useRef<Promise<unknown> | undefined>(undefined);\n const hasInitializedRef = useRef(false);\n // Any caller's initialize() moves the item off \"new\"; a thread born \"new\"\n // here still joins that initialization so its title arms.\n const bornNewRef = useRef(itemRuntime.getState().status === \"new\");\n const titleDisposeRef = useRef<(() => void) | undefined>(undefined);\n const titleAliveRef = useRef(false);\n\n const handleInitialize = useEffectEvent(() => {\n if (hasInitializedRef.current) return;\n\n if (itemRuntime.getState().status !== \"new\" && !bornNewRef.current) return;\n hasInitializedRef.current = true;\n bornNewRef.current = false;\n\n const initPromise = itemRuntime.initialize();\n initPromiseRef.current = initPromise;\n\n // The title needs the thread to exist and its first message, so it arms\n // when initialization resolves rather than at the first runEnd; waiting\n // for the run would leave the thread on \"New Chat\" for the whole\n // response, and forever when the run never completes.\n void initPromise.then(\n () => {\n if (!titleAliveRef.current) return;\n titleDisposeRef.current?.();\n titleDisposeRef.current = subscribeToTitleGeneration(\n runtime.thread,\n itemRuntime,\n );\n },\n () => {\n if (initPromiseRef.current === initPromise) {\n initPromiseRef.current = undefined;\n hasInitializedRef.current = false;\n }\n },\n );\n });\n\n const getInitializePromise = useEffectEvent(() => {\n handleInitialize();\n return initPromiseRef.current;\n });\n\n useEffect(() => {\n if (!threadBinding) return;\n const runtimeCore = threadBinding.getState();\n const setGetInitializePromise = (runtimeCore as Record<string, unknown>)\n .__internal_setGetInitializePromise;\n if (typeof setGetInitializePromise === \"function\") {\n setGetInitializePromise.call(runtimeCore, getInitializePromise);\n }\n }, [threadBinding]);\n useEffect(() => {\n if (!runtime?.threads?.main) return undefined;\n hasInitializedRef.current = false;\n titleAliveRef.current = true;\n const unsubscribe = runtime.threads.main.unstable_on(\n \"initialize\",\n handleInitialize,\n );\n return () => {\n titleAliveRef.current = false;\n unsubscribe();\n titleDisposeRef.current?.();\n titleDisposeRef.current = undefined;\n };\n }, [runtime]);\n\n return runtime;\n};\n\nconst useRemoteThreadResource = ({\n threadId,\n generation,\n parentList,\n runtimeHook,\n parentClient,\n adapters,\n publish,\n destroySignal,\n}: RemoteThreadResourceProps) => {\n const itemRuntime = useMemo(\n () =>\n new ThreadListItemRuntimeImpl(\n new ShallowMemoizeSubject({\n path: {\n ref: `threadItems[threadId=${threadId}]`,\n threadSelector: { type: \"threadId\", threadId },\n },\n getState: () => {\n const data = parentList.getItemById(threadId);\n if (!data) return SKIP_UPDATE;\n return {\n id: data.id,\n remoteId: data.remoteId,\n externalId: data.externalId,\n title: data.title,\n lastMessageAt: data.lastMessageAt,\n custom: data.custom,\n status: data.status,\n isMain: data.id === parentList.mainThreadId,\n isRunning:\n parentList.unstable_isThreadRunning?.(data.id) ?? false,\n };\n },\n subscribe: (callback) => parentList.subscribe(callback),\n }),\n parentList,\n ),\n [parentList, threadId],\n );\n\n const { client } = useConfiguredAui(parentClient, {\n threadListItem: ThreadListItemClient({ runtime: itemRuntime }),\n });\n\n return useDestroySignalProvider(destroySignal, function useOwnedThread() {\n return useAssistantContextProvider(client, function useThreadClient() {\n return useRuntimeAdaptersProvider(adapters, function useBoundRuntime() {\n return useRemoteThreadBinder({\n threadId,\n generation,\n runtimeHook,\n publish,\n itemRuntime,\n });\n });\n });\n });\n};\n\nexport const RemoteThreadResource = resource(useRemoteThreadResource);\n"],"mappings":"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"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type FC, type ReactNode } from "react";
|
|
2
|
+
import type { RuntimeAdapters } from "../../runtimes/remote-thread-list/types.js";
|
|
2
3
|
import { useRuntimeAdapters, useRuntimeAdaptersProvider } from "./useRuntimeAdapters.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
declare namespace RuntimeAdapterProvider {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
export type { RuntimeAdapters };
|
|
5
|
+
export { useRuntimeAdapters, useRuntimeAdaptersProvider };
|
|
6
|
+
export declare namespace RuntimeAdapterProvider {
|
|
7
|
+
type Props = {
|
|
8
|
+
adapters: RuntimeAdapters;
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
};
|
|
10
11
|
}
|
|
11
|
-
declare const RuntimeAdapterProvider: FC<RuntimeAdapterProvider.Props>;
|
|
12
|
-
//#endregion
|
|
13
|
-
export { RuntimeAdapterProvider, type RuntimeAdapters, useRuntimeAdapters, useRuntimeAdaptersProvider };
|
|
12
|
+
export declare const RuntimeAdapterProvider: FC<RuntimeAdapterProvider.Props>;
|
|
14
13
|
//# sourceMappingURL=RuntimeAdapterProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuntimeAdapterProvider.d.ts","
|
|
1
|
+
{"version":3,"file":"RuntimeAdapterProvider.d.ts","sourceRoot":"","sources":["../../../src/react/runtimes/RuntimeAdapterProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,mDAAgD;AAC/E,OAAO,EAEL,kBAAkB,EAClB,0BAA0B,EAC3B,gCAA6B;AAE9B,YAAY,EAAE,eAAe,EAAE,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,CAAC;AAE1D,yBAAiB,sBAAsB,CAAC;IACtC,KAAY,KAAK,GAAG;QAClB,QAAQ,EAAE,eAAe,CAAC;QAC1B,QAAQ,EAAE,SAAS,CAAC;KACrB,CAAC;CACH;AAED,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAcnE,CAAC"}
|
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import { AssistantTransportCommand, CommandQueueState, QueuedCommand } from "./types.js";
|
|
2
|
-
|
|
3
|
-
declare const
|
|
4
|
-
|
|
5
|
-
onQueue: () => void;
|
|
1
|
+
import type { AssistantTransportCommand, CommandQueueState, QueuedCommand } from "./types.js";
|
|
2
|
+
export declare const createInitialQueueState: () => CommandQueueState;
|
|
3
|
+
export declare const useCommandQueue: (opts: {
|
|
4
|
+
onQueue: () => void;
|
|
6
5
|
}) => {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
readonly state: CommandQueueState;
|
|
7
|
+
enqueue: (command: AssistantTransportCommand, options?: {
|
|
8
|
+
schedule?: boolean;
|
|
9
|
+
}) => void;
|
|
10
|
+
flush: () => QueuedCommand[];
|
|
11
|
+
markDelivered: () => void;
|
|
12
|
+
reset: () => void;
|
|
14
13
|
};
|
|
15
|
-
//#endregion
|
|
16
|
-
export { createInitialQueueState, useCommandQueue };
|
|
17
14
|
//# sourceMappingURL=commandQueue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commandQueue.d.ts","
|
|
1
|
+
{"version":3,"file":"commandQueue.d.ts","sourceRoot":"","sources":["../../../../src/react/runtimes/assistant-transport/commandQueue.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACd,mBAAgB;AAEjB,eAAO,MAAM,uBAAuB,QAAO,iBAGzC,CAAC;AAEH,eAAO,MAAM,eAAe,GAAI,MAAM;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE;;uBAUhD,yBAAyB,YACxB;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE;iBAWhB,aAAa,EAAE;;;CAiClC,CAAC"}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
declare const REPLAY_CONTENT_LENGTH_HEADER = "Aui-Replay-Content-Length";
|
|
1
|
+
export declare const REPLAY_CONTENT_LENGTH_HEADER = "Aui-Replay-Content-Length";
|
|
3
2
|
type ReplayBoundaryStreamOptions = {
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
setReplaying: (value: boolean) => void;
|
|
4
|
+
waitForRender: () => Promise<void>;
|
|
6
5
|
};
|
|
7
|
-
declare const useReplayRenderWait: () => () => Promise<void>;
|
|
8
|
-
declare const createReplayBoundaryStream: (response: Response, { setReplaying, waitForRender: waitForReplayRender }: ReplayBoundaryStreamOptions) => Promise<ReadableStream<Uint8Array>>;
|
|
9
|
-
|
|
10
|
-
export { REPLAY_CONTENT_LENGTH_HEADER, createReplayBoundaryStream, useReplayRenderWait };
|
|
6
|
+
export declare const useReplayRenderWait: () => () => Promise<void>;
|
|
7
|
+
export declare const createReplayBoundaryStream: (response: Response, { setReplaying, waitForRender: waitForReplayRender, }: ReplayBoundaryStreamOptions) => Promise<ReadableStream<Uint8Array>>;
|
|
8
|
+
export {};
|
|
11
9
|
//# sourceMappingURL=replayBoundaryStream.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replayBoundaryStream.d.ts","
|
|
1
|
+
{"version":3,"file":"replayBoundaryStream.d.ts","sourceRoot":"","sources":["../../../../src/react/runtimes/assistant-transport/replayBoundaryStream.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,4BAA4B,8BAA8B,CAAC;AAExE,KAAK,2BAA2B,GAAG;IACjC,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,mBAAmB,2BAkD/B,CAAC;AAWF,eAAO,MAAM,0BAA0B,GACrC,UAAU,QAAQ,EAClB,uDAGG,2BAA2B,KAC7B,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAqGpC,CAAC"}
|
|
@@ -92,7 +92,13 @@ const createReplayBoundaryStream = async (response, { setReplaying, waitForRende
|
|
|
92
92
|
const reader = body.getReader();
|
|
93
93
|
let bytesForwarded = 0;
|
|
94
94
|
let replayFinished = false;
|
|
95
|
+
let replayCleared = false;
|
|
95
96
|
let readerCleanup;
|
|
97
|
+
const clearReplay = () => {
|
|
98
|
+
if (replayCleared) return;
|
|
99
|
+
replayCleared = true;
|
|
100
|
+
setReplaying(false);
|
|
101
|
+
};
|
|
96
102
|
const releaseReader = () => {
|
|
97
103
|
if (readerCleanup) return readerCleanup;
|
|
98
104
|
reader.releaseLock();
|
|
@@ -114,7 +120,7 @@ const createReplayBoundaryStream = async (response, { setReplaying, waitForRende
|
|
|
114
120
|
if (replayFinished) return;
|
|
115
121
|
replayFinished = true;
|
|
116
122
|
await waitForReplayRender();
|
|
117
|
-
|
|
123
|
+
clearReplay();
|
|
118
124
|
await waitForReplayRender();
|
|
119
125
|
};
|
|
120
126
|
return new ReadableStream({
|
|
@@ -147,6 +153,7 @@ const createReplayBoundaryStream = async (response, { setReplaying, waitForRende
|
|
|
147
153
|
await finishReplay();
|
|
148
154
|
controller.enqueue(value.subarray(replayBytesInChunk));
|
|
149
155
|
} catch (error) {
|
|
156
|
+
clearReplay();
|
|
150
157
|
await cancelReader(error).catch(() => {});
|
|
151
158
|
throw error;
|
|
152
159
|
}
|
|
@@ -154,7 +161,7 @@ const createReplayBoundaryStream = async (response, { setReplaying, waitForRende
|
|
|
154
161
|
async cancel(reason) {
|
|
155
162
|
const wasFinished = replayFinished;
|
|
156
163
|
replayFinished = true;
|
|
157
|
-
if (!wasFinished)
|
|
164
|
+
if (!wasFinished) clearReplay();
|
|
158
165
|
await cancelReader(reason);
|
|
159
166
|
}
|
|
160
167
|
});
|